diff --git a/.circleci/config.yml b/.circleci/config.yml
index 75c806da2c7..55069b50583 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -58,6 +58,14 @@ jobs:
name: "Link packages"
command: |
yarn install
+ - run:
+ name: Workaround for https://github.com/GoogleChrome/puppeteer/issues/290
+ command: sh ./scripts/workaround-puppeteer-issue-290.sh
+ - run:
+ name: "Build official-storybook"
+ command: |
+ cd examples/official-storybook
+ yarn build-storybook
- run:
name: "Build react kitchen-sink"
command: |
@@ -73,34 +81,33 @@ jobs:
command: |
cd examples/angular-cli
yarn build-storybook
-
- run:
- name: "Run react kitchen-sink"
+ name: "Run react kitchen-sink (smoke test)"
command: |
cd examples/cra-kitchen-sink
- yarn storybook
- background: true
+ yarn storybook --smoke-test
- run:
- name: "Run vue kitchen-sink"
+ name: "Run vue kitchen-sink (smoke test)"
command: |
cd examples/vue-kitchen-sink
- yarn storybook
- background: true
+ yarn storybook --smoke-test
- run:
- name: "Run angular-cli"
+ name: "Run angular-cli (smoke test)"
command: |
cd examples/angular-cli
- yarn storybook
- background: true
+ yarn storybook --smoke-test
- run:
- name: Workaround for https://github.com/GoogleChrome/puppeteer/issues/290
- command: sh ./scripts/workaround-puppeteer-issue-290.sh
+ name: "Run image snapshots"
+ command: yarn test --image
- run:
name: Integration Test - Kichen sinks
command: yarn test --integration
- store_artifacts:
path: integration/__image_snapshots__
destination: integration_image_snapshots
+ - store_artifacts:
+ path: examples/official-storybook/image-snapshots/__image_snapshots__
+ destination: official_storybook_image_snapshots
react-native:
<<: *defaults
steps:
diff --git a/.editorconfig b/.editorconfig
index 641825cc12a..22d8918a308 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -3,6 +3,6 @@ root = true
[*]
end_of_line = lf
-[*.{js,json,ts}]
+[*.{js,json,ts,html}]
indent_style = space
indent_size = 2
diff --git a/.gitignore b/.gitignore
index 27c697ea921..e9f5cedff94 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@ package-lock.json
storybook-static
integration/__image_snapshots__/__diff_output__
.jest-test-results.json
+/examples/cra-kitchen-sink/src/__image_snapshots__/__diff_output__/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e50f88cb797..71d973f965a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,431 @@
+# 3.4.0-alpha.4
+
+2018-January-13
+
+Republish `3.4.0-alpha.3` due to potential publishing errors
+
+# 3.4.0-alpha.3
+
+2018-January-13
+
+#### Features
+
+- Polymer 2 support [#2225](https://github.com/storybooks/storybook/pull/2225)
+- Add image snapshots to addon-storyshots [#2413](https://github.com/storybooks/storybook/pull/2413)
+- Angular template support for Storybook [#2690](https://github.com/storybooks/storybook/pull/2690)
+
+#### Bug Fixes
+
+- Remove polymer-cli dependency [#2741](https://github.com/storybooks/storybook/pull/2741)
+- Add scss for components in angular apps by default. [#2703](https://github.com/storybooks/storybook/pull/2703)
+
+#### Maintenance
+
+- Change ng stories dir [#2672](https://github.com/storybooks/storybook/pull/2672)
+
+#### Dependency Upgrades
+
+
+
+54 Upgrades
+
+
+- Upgraded `jest-image-snapshot` in `/` from "2.2.1" to "2.3.0" [#2740](https://github.com/storybooks/storybook/pull/2740)
+- Upgraded `polymer-webpack-loader` in `app/polymer` from "2.0.0" to "2.0.1" [#2740](https://github.com/storybooks/storybook/pull/2740)
+- Upgraded `jest-image-snapshot` in `addons/storyshots` from "2.2.1" to "2.3.0" [#2740](https://github.com/storybooks/storybook/pull/2740)
+- Upgraded `shelljs` in `/` from "0.7.8" to "0.8.0" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `shelljs` in `addons/links` from "0.7.8" to "0.8.0" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `autoprefixer` in `app/react` from "7.2.4" to "7.2.5" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `shelljs` in `app/react` from "0.7.8" to "0.8.0" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `autoprefixer` in `app/angular` from "7.2.4" to "7.2.5" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `shelljs` in `app/angular` from "0.7.8" to "0.8.0" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `autoprefixer` in `app/react-native` from "7.2.4" to "7.2.5" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `shelljs` in `app/react-native` from "0.7.8" to "0.8.0" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `autoprefixer` in `app/vue` from "7.2.4" to "7.2.5" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `shelljs` in `app/vue` from "0.7.8" to "0.8.0" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Upgraded `shelljs` in `lib/cli` from "0.7.8" to "0.8.0" [#2734](https://github.com/storybooks/storybook/pull/2734)
+- Update gatsby in /docs from 1.9.153 to 1.9.154 [#2733](https://github.com/storybooks/storybook/pull/2733)
+- Update @angular/cli in examples/angular-cli from 1.6.3 to 1.6.4 [#2726](https://github.com/storybooks/storybook/pull/2726)
+- Upgraded `commander` in `/` from "2.12.2" to "2.13.0" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `jest` in `/` from "22.0.5" to "22.0.6" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `jest-cli` in `/` from "22.0.5" to "22.0.6" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `jest-config` in `/` from "22.0.5" to "22.0.6" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `jest-diff` in `/` from "22.0.5" to "22.0.6" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `jest-environment-jsdom` in `/` from "22.0.5" to "22.0.6" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `jest-jasmine2` in `/` from "22.0.5" to "22.0.6" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `nodemon` in `/` from "1.14.10" to "1.14.11" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `prettier` in `/` from "1.9.2" to "1.10.2" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `tslint` in `/` from "5.8.0" to "5.9.1" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `commander` in `app/react` from "2.12.2" to "2.13.0" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `common-tags` in `app/react` from "1.7.0" to "1.7.2" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `nodemon` in `app/react` from "1.14.10" to "1.14.11" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `commander` in `app/angular` from "2.12.2" to "2.13.0" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `common-tags` in `app/angular` from "1.7.0" to "1.7.2" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `zone.js` in `app/angular` from "0.8.19" to "0.8.20" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `nodemon` in `app/angular` from "1.14.10" to "1.14.11" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `commander` in `app/react-native` from "2.12.2" to "2.13.0" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `commander` in `app/vue` from "2.12.2" to "2.13.0" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `common-tags` in `app/vue` from "1.7.0" to "1.7.2" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `nodemon` in `app/vue` from "1.14.10" to "1.14.11" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `babel-jest` in `examples/cra-kitchen-sink` from "22.0.4" to "22.0.6" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `jest` in `examples/cra-kitchen-sink` from "22.0.5" to "22.0.6" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `commander` in `lib/cli` from "2.12.2" to "2.13.0" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `zone.js` in `examples/angular-cli` from "0.8.19" to "0.8.20" [#2724](https://github.com/storybooks/storybook/pull/2724)
+- Upgraded `@storybook/addon-actions` in `/docs` from "3.3.7" to "3.3.8" [#2722](https://github.com/storybooks/storybook/pull/2722)
+- Upgraded `@storybook/addon-links` in `/docs` from "3.3.7" to "3.3.8" [#2722](https://github.com/storybooks/storybook/pull/2722)
+- Upgraded `@storybook/addons` in `/docs` from "3.3.7" to "3.3.8" [#2722](https://github.com/storybooks/storybook/pull/2722)
+- Upgraded `@storybook/react` in `/docs` from "3.3.7" to "3.3.8" [#2722](https://github.com/storybooks/storybook/pull/2722)
+- Upgraded `gatsby-transformer-remark` in `/docs` from "1.7.27" to "1.7.28" [#2722](https://github.com/storybooks/storybook/pull/2722)
+- Upgraded `gatsby` in `/docs` from "1.9.151" to "1.9.153" [#2722](https://github.com/storybooks/storybook/pull/2722)
+- Upgraded `@storybook/addon-actions` in `/docs` from "3.3.6" to "3.3.7" [#2710](https://github.com/storybooks/storybook/pull/2710)
+- Upgraded `@storybook/addon-links` in `/docs` from "3.3.6" to "3.3.7" [#2710](https://github.com/storybooks/storybook/pull/2710)
+- Upgraded `@storybook/addons` in `/docs` from "3.3.6" to "3.3.7" [#2710](https://github.com/storybooks/storybook/pull/2710)
+- Upgraded `@storybook/react` in `/docs` from "3.3.6" to "3.3.7" [#2710](https://github.com/storybooks/storybook/pull/2710)
+- Upgraded `gatsby-link` in `/docs` from "1.6.33" to "1.6.34" [#2710](https://github.com/storybooks/storybook/pull/2710)
+- Upgraded `gatsby-transformer-remark` in `/docs` from "1.7.26" to "1.7.27" [#2710](https://github.com/storybooks/storybook/pull/2710)
+- Upgraded `gatsby` in `/docs` from "1.9.150" to "1.9.151" [#2710](https://github.com/storybooks/storybook/pull/2710)
+
+
+
+# 3.3.9
+
+2018-January-13
+
+#### Bug Fixes
+
+- Start haul/react-native using named binaries instead of cli.js [#2715](https://github.com/storybooks/storybook/pull/2715)
+- Reflect the new peer dependencies in docs and CLI templates [#2714](https://github.com/storybooks/storybook/pull/2714)
+- Don't mangle function names for production builds [#2705](https://github.com/storybooks/storybook/pull/2705)
+
+# 3.4.0-alpha.2
+
+2018-January-11
+
+This is a duplicate of `3.4.0-alpha.1`, re-published because I accidentally published `3.4.0-alpha.1` on the `latest` NPM tag.
+
+# 3.3.8
+
+2018-January-11
+
+This is a duplicate of `3.3.7`, re-published because I accidentally published `3.4.0-alpha.1` on the `latest` NPM tag.
+
+# 3.4.0-alpha.1
+
+2018-January-10
+
+In addition to the changes listed here, also contains fixes from [3.3.5](#335) and [3.3.6](#336) and [3.3.7](#337).
+
+#### Features
+
+- Custom tsconfig.json for angular apps. [#2669](https://github.com/storybooks/storybook/pull/2669)
+
+#### Dependency Upgrades
+
+
+
+105 Upgrades
+
+
+- Upgraded `babel-eslint` in `/` from "8.1.2" to "8.2.1" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `eslint-plugin-jest` in `/` from "21.5.0" to "21.6.1" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `jest` in `/` from "22.0.4" to "22.0.5" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `jest-cli` in `/` from "22.0.4" to "22.0.5" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `jest-config` in `/` from "22.0.4" to "22.0.5" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `jest-diff` in `/` from "22.0.3" to "22.0.5" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `jest-environment-jsdom` in `/` from "22.0.4" to "22.0.5" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `jest-jasmine2` in `/` from "22.0.4" to "22.0.5" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `lerna` in `/` from "2.5.1" to "2.6.0" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `nodemon` in `/` from "1.14.9" to "1.14.10" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `common-tags` in `app/react` from "1.6.0" to "1.7.0" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `nodemon` in `app/react` from "1.14.9" to "1.14.10" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `common-tags` in `app/angular` from "1.6.0" to "1.7.0" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `nodemon` in `app/angular` from "1.14.9" to "1.14.10" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `common-tags` in `app/vue` from "1.6.0" to "1.7.0" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `nodemon` in `app/vue` from "1.14.9" to "1.14.10" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `vue-loader` in `app/vue` from "13.6.2" to "13.7.0" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `jest` in `examples/cra-kitchen-sink` from "22.0.4" to "22.0.5" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `vue-loader` in `examples/vue-kitchen-sink` from "13.6.2" to "13.7.0" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `webpack-dev-server` in `examples/vue-kitchen-sink` from "2.10.0" to "2.10.1" [#2700](https://github.com/storybooks/storybook/pull/2700)
+- Upgraded `marked` in `/docs` from "0.3.7" to "0.3.12" [#2699](https://github.com/storybooks/storybook/pull/2699)
+- Upgraded `react-stack-grid` in `/docs` from "0.7.0" to "0.7.1" [#2699](https://github.com/storybooks/storybook/pull/2699)
+- Upgraded `@storybook/addon-actions` in `/docs` from "3.3.4" to "3.3.6" [#2686](https://github.com/storybooks/storybook/pull/2686)
+- Upgraded `@storybook/addon-links` in `/docs` from "3.3.4" to "3.3.6" [#2686](https://github.com/storybooks/storybook/pull/2686)
+- Upgraded `@storybook/addons` in `/docs` from "3.3.4" to "3.3.6" [#2686](https://github.com/storybooks/storybook/pull/2686)
+- Upgraded `@storybook/react` in `/docs` from "3.3.4" to "3.3.6" [#2686](https://github.com/storybooks/storybook/pull/2686)
+- Upgraded `gatsby-link` in `/docs` from "1.6.32" to "1.6.33" [#2686](https://github.com/storybooks/storybook/pull/2686)
+- Upgraded `gatsby` in `/docs` from "1.9.149" to "1.9.150" [#2686](https://github.com/storybooks/storybook/pull/2686)
+- Upgraded `nodemon` in `/` from "1.14.8" to "1.14.9" [#2687](https://github.com/storybooks/storybook/pull/2687)
+- Upgraded `markdown-loader` in `app/react` from "2.0.1" to "2.0.2" [#2687](https://github.com/storybooks/storybook/pull/2687)
+- Upgraded `nodemon` in `app/react` from "1.14.8" to "1.14.9" [#2687](https://github.com/storybooks/storybook/pull/2687)
+- Upgraded `nodemon` in `app/angular` from "1.14.8" to "1.14.9" [#2687](https://github.com/storybooks/storybook/pull/2687)
+- Upgraded `react-native` in `app/react-native` from "0.51.0" to "0.52.0" [#2687](https://github.com/storybooks/storybook/pull/2687)
+- Upgraded `nodemon` in `app/vue` from "1.14.8" to "1.14.9" [#2687](https://github.com/storybooks/storybook/pull/2687)
+- Upgraded `@storybook/addon-actions` in `/docs` from "3.3.3" to "3.3.4" [#2674](https://github.com/storybooks/storybook/pull/2674)
+- Upgraded `@storybook/addon-links` in `/docs` from "3.3.3" to "3.3.4" [#2674](https://github.com/storybooks/storybook/pull/2674)
+- Upgraded `@storybook/addons` in `/docs` from "3.3.3" to "3.3.4" [#2674](https://github.com/storybooks/storybook/pull/2674)
+- Upgraded `@storybook/react` in `/docs` from "3.3.3" to "3.3.4" [#2674](https://github.com/storybooks/storybook/pull/2674)
+- Update eslint in / from 4.14.0 to 4.15.0 [#2673](https://github.com/storybooks/storybook/pull/2673)
+- Upgraded `nodemon` in `/` from "1.14.7" to "1.14.8" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `marksy` in `addons/info` from "6.0.2" to "6.0.3" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `nodemon` in `app/react` from "1.14.7" to "1.14.8" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `nodemon` in `app/angular` from "1.14.7" to "1.14.8" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `nodemon` in `app/vue` from "1.14.7" to "1.14.8" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `webpack-dev-server` in `examples/vue-kitchen-sink` from "2.9.7" to "2.10.0" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `@types/lodash` in `/` from "4.14.91" to "4.14.92" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `marksy` in `addons/info` from "6.0.1" to "6.0.2" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/react` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `html-loader` in `app/react` from "0.5.1" to "0.5.4" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/react` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/angular` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/angular` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/react-native` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/react-native` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/vue` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/vue` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `@types/node` in `examples/angular-cli` from "6.0.95" to "6.0.96" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `examples/vue-kitchen-sink` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `@angular/animations` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/common` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/compiler` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/core` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/forms` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/http` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/platform-browser` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/platform-browser-dynamic` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/router` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/compiler-cli` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/language-service` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `postcss-loader` in `app/react` from "2.0.9" to "2.0.10" [#2637](https://github.com/storybooks/storybook/pull/2637)
+- Upgraded `postcss-loader` in `app/angular` from "2.0.9" to "2.0.10" [#2637](https://github.com/storybooks/storybook/pull/2637)
+- Upgraded `postcss-loader` in `app/react-native` from "2.0.9" to "2.0.10" [#2637](https://github.com/storybooks/storybook/pull/2637)
+- Upgraded `postcss-loader` in `app/vue` from "2.0.9" to "2.0.10" [#2637](https://github.com/storybooks/storybook/pull/2637)
+- Update inquirer in / from 4.0.1 to 4.0.2 [#2632](https://github.com/storybooks/storybook/pull/2632)
+- Upgraded `danger` in `/` from "2.1.8" to "2.1.10" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `autoprefixer` in `app/react` from "7.2.3" to "7.2.4" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `autoprefixer` in `app/angular` from "7.2.3" to "7.2.4" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `autoprefixer` in `app/react-native` from "7.2.3" to "7.2.4" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `autoprefixer` in `app/vue` from "7.2.3" to "7.2.4" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `nodemon` in `/` from "1.14.6" to "1.14.7" [#2612](https://github.com/storybooks/storybook/pull/2612)
+- Upgraded `nodemon` in `app/react` from "1.14.6" to "1.14.7" [#2612](https://github.com/storybooks/storybook/pull/2612)
+- Upgraded `nodemon` in `app/angular` from "1.14.6" to "1.14.7" [#2612](https://github.com/storybooks/storybook/pull/2612)
+- Upgraded `nodemon` in `app/vue` from "1.14.6" to "1.14.7" [#2612](https://github.com/storybooks/storybook/pull/2612)
+- Upgraded `vue-loader` in `app/vue` from "13.6.1" to "13.6.2" [#2611](https://github.com/storybooks/storybook/pull/2611)
+- Upgraded `vue-loader` in `examples/vue-kitchen-sink` from "13.6.1" to "13.6.2" [#2611](https://github.com/storybooks/storybook/pull/2611)
+- Upgraded `nodemon` in `/` from "1.14.5" to "1.14.6" [#2609](https://github.com/storybooks/storybook/pull/2609)
+- Upgraded `nodemon` in `app/react` from "1.14.5" to "1.14.6" [#2609](https://github.com/storybooks/storybook/pull/2609)
+- Upgraded `nodemon` in `app/angular` from "1.14.5" to "1.14.6" [#2609](https://github.com/storybooks/storybook/pull/2609)
+- Upgraded `nodemon` in `app/vue` from "1.14.5" to "1.14.6" [#2609](https://github.com/storybooks/storybook/pull/2609)
+- Upgraded `enzyme` in `/` from "3.2.0" to "3.3.0" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `nodemon` in `/` from "1.14.3" to "1.14.5" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `graphiql` in `addons/graphql` from "0.11.10" to "0.11.11" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `enzyme` in `addons/links` from "3.2.0" to "3.3.0" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `nodemon` in `app/react` from "1.14.3" to "1.14.5" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `nodemon` in `app/angular` from "1.14.3" to "1.14.5" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `nodemon` in `app/vue` from "1.14.3" to "1.14.5" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `enzyme` in `examples/cra-kitchen-sink` from "3.2.0" to "3.3.0" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `enzyme` in `examples/official-storybook` from "3.2.0" to "3.3.0" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Update 2 dependencies from npm [#2597](https://github.com/storybooks/storybook/pull/2597)
+- Upgraded `@storybook/addon-actions` in `/docs` from "3.3.1" to "3.3.3" [#2598](https://github.com/storybooks/storybook/pull/2598)
+- Upgraded `@storybook/addon-links` in `/docs` from "3.3.1" to "3.3.3" [#2598](https://github.com/storybooks/storybook/pull/2598)
+- Upgraded `@storybook/addons` in `/docs` from "3.3.1" to "3.3.3" [#2598](https://github.com/storybooks/storybook/pull/2598)
+- Upgraded `@storybook/react` in `/docs` from "3.3.1" to "3.3.3" [#2598](https://github.com/storybooks/storybook/pull/2598)
+- Upgraded `danger` in `/` from "2.1.6" to "2.1.8" [#2599](https://github.com/storybooks/storybook/pull/2599)
+- Upgraded `axe-core` in `addons/a11y` from "2.6.0" to "2.6.1" [#2599](https://github.com/storybooks/storybook/pull/2599)
+
+
+
+# 3.3.7
+
+2018-January-10
+
+#### Maintenance
+
+- Extract tslint exclusions out of package.json scripts [#2684](https://github.com/storybooks/storybook/pull/2684)
+- Add tslint to the linting pipe [#2682](https://github.com/storybooks/storybook/pull/2682)
+
+#### Bug Fixes
+
+- Angular: add entry components to modulemetadata - #2701 [#2702](https://github.com/storybooks/storybook/pull/2702)
+- Add html and markup loaders to angular and vue apps [#2692](https://github.com/storybooks/storybook/pull/2692)
+
+# 3.3.6
+
+2018-January-08
+
+#### Bug Fixes
+
+- Remove `src/` from remaining `.npmignore`s [#2678](https://github.com/storybooks/storybook/pull/2678)
+
+# 3.3.5
+
+2018-January-08
+
+#### Bug Fixes
+
+- Remove src from individual .npmignore files [#2677](https://github.com/storybooks/storybook/pull/2677)
+
+# 3.4.0-alpha.0
+
+2018-January-07
+
+#### Features
+
+- Multiple hierarchies [#2452](https://github.com/storybooks/storybook/pull/2452)
+- Change template story files extension to .ts [#2594](https://github.com/storybooks/storybook/pull/2594)
+- Use store revisions to ensure that stories re-render on HMR. [#2605](https://github.com/storybooks/storybook/pull/2605)
+- Ability to force re-render a story [#2463](https://github.com/storybooks/storybook/pull/2463)
+- Introduce framework-independent core library [#2241](https://github.com/storybooks/storybook/pull/2241)
+
+#### Documentation
+
+
+
+4 PRs
+
+
+- Update webpack extend warning. [#2660](https://github.com/storybooks/storybook/pull/2660)
+- ADD demo images to a new img folder with the documentation site [#2644](https://github.com/storybooks/storybook/pull/2644)
+- write doc about .css/.scss rules for Angular [#2634](https://github.com/storybooks/storybook/pull/2634)
+- Updated documentation wrt ejs exclusion [#2633](https://github.com/storybooks/storybook/pull/2633)
+
+
+
+#### Maintenance
+
+
+
+4 PRs
+
+
+- Only update CLI snapsots on postpublish script, skip smoke tests [#2671](https://github.com/storybooks/storybook/pull/2671)
+- Fix the timezone for example dates [#2654](https://github.com/storybooks/storybook/pull/2654)
+- Update prereq yarn install level [#2638](https://github.com/storybooks/storybook/pull/2638)
+- Separate stories in angular-cli example [#2592](https://github.com/storybooks/storybook/pull/2592)
+
+
+
+#### Dependency Upgrades
+
+
+
+66 Upgrades
+
+
+- Upgraded `nodemon` in `/` from "1.14.7" to "1.14.8" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `marksy` in `addons/info` from "6.0.2" to "6.0.3" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `nodemon` in `app/react` from "1.14.7" to "1.14.8" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `nodemon` in `app/angular` from "1.14.7" to "1.14.8" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `nodemon` in `app/vue` from "1.14.7" to "1.14.8" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `webpack-dev-server` in `examples/vue-kitchen-sink` from "2.9.7" to "2.10.0" [#2664](https://github.com/storybooks/storybook/pull/2664)
+- Upgraded `@types/lodash` in `/` from "4.14.91" to "4.14.92" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `marksy` in `addons/info` from "6.0.1" to "6.0.2" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/react` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `html-loader` in `app/react` from "0.5.1" to "0.5.4" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/react` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/angular` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/angular` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/react-native` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/react-native` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/vue` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/vue` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `@types/node` in `examples/angular-cli` from "6.0.95" to "6.0.96" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `examples/vue-kitchen-sink` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `@angular/animations` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/common` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/compiler` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/core` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/forms` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/http` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/platform-browser` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/platform-browser-dynamic` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/router` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/compiler-cli` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `@angular/language-service` in `examples/angular-cli` from "5.1.2" to "5.1.3" [#2648](https://github.com/storybooks/storybook/pull/2648)
+- Upgraded `postcss-loader` in `app/react` from "2.0.9" to "2.0.10" [#2637](https://github.com/storybooks/storybook/pull/2637)
+- Upgraded `postcss-loader` in `app/angular` from "2.0.9" to "2.0.10" [#2637](https://github.com/storybooks/storybook/pull/2637)
+- Upgraded `postcss-loader` in `app/react-native` from "2.0.9" to "2.0.10" [#2637](https://github.com/storybooks/storybook/pull/2637)
+- Upgraded `postcss-loader` in `app/vue` from "2.0.9" to "2.0.10" [#2637](https://github.com/storybooks/storybook/pull/2637)
+- Update inquirer in / from 4.0.1 to 4.0.2 [#2632](https://github.com/storybooks/storybook/pull/2632)
+- Upgraded `danger` in `/` from "2.1.8" to "2.1.10" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `autoprefixer` in `app/react` from "7.2.3" to "7.2.4" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `autoprefixer` in `app/angular` from "7.2.3" to "7.2.4" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `autoprefixer` in `app/react-native` from "7.2.3" to "7.2.4" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `autoprefixer` in `app/vue` from "7.2.3" to "7.2.4" [#2618](https://github.com/storybooks/storybook/pull/2618)
+- Upgraded `nodemon` in `/` from "1.14.6" to "1.14.7" [#2612](https://github.com/storybooks/storybook/pull/2612)
+- Upgraded `nodemon` in `app/react` from "1.14.6" to "1.14.7" [#2612](https://github.com/storybooks/storybook/pull/2612)
+- Upgraded `nodemon` in `app/angular` from "1.14.6" to "1.14.7" [#2612](https://github.com/storybooks/storybook/pull/2612)
+- Upgraded `nodemon` in `app/vue` from "1.14.6" to "1.14.7" [#2612](https://github.com/storybooks/storybook/pull/2612)
+- Upgraded `vue-loader` in `app/vue` from "13.6.1" to "13.6.2" [#2611](https://github.com/storybooks/storybook/pull/2611)
+- Upgraded `vue-loader` in `examples/vue-kitchen-sink` from "13.6.1" to "13.6.2" [#2611](https://github.com/storybooks/storybook/pull/2611)
+- Upgraded `nodemon` in `/` from "1.14.5" to "1.14.6" [#2609](https://github.com/storybooks/storybook/pull/2609)
+- Upgraded `nodemon` in `app/react` from "1.14.5" to "1.14.6" [#2609](https://github.com/storybooks/storybook/pull/2609)
+- Upgraded `nodemon` in `app/angular` from "1.14.5" to "1.14.6" [#2609](https://github.com/storybooks/storybook/pull/2609)
+- Upgraded `nodemon` in `app/vue` from "1.14.5" to "1.14.6" [#2609](https://github.com/storybooks/storybook/pull/2609)
+- Upgraded `enzyme` in `/` from "3.2.0" to "3.3.0" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `nodemon` in `/` from "1.14.3" to "1.14.5" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `graphiql` in `addons/graphql` from "0.11.10" to "0.11.11" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `enzyme` in `addons/links` from "3.2.0" to "3.3.0" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `nodemon` in `app/react` from "1.14.3" to "1.14.5" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `nodemon` in `app/angular` from "1.14.3" to "1.14.5" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `nodemon` in `app/vue` from "1.14.3" to "1.14.5" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `enzyme` in `examples/cra-kitchen-sink` from "3.2.0" to "3.3.0" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Upgraded `enzyme` in `examples/official-storybook` from "3.2.0" to "3.3.0" [#2608](https://github.com/storybooks/storybook/pull/2608)
+- Update 2 dependencies from npm [#2597](https://github.com/storybooks/storybook/pull/2597)
+- Upgraded `@storybook/addon-actions` in `/docs` from "3.3.1" to "3.3.3" [#2598](https://github.com/storybooks/storybook/pull/2598)
+- Upgraded `@storybook/addon-links` in `/docs` from "3.3.1" to "3.3.3" [#2598](https://github.com/storybooks/storybook/pull/2598)
+- Upgraded `@storybook/addons` in `/docs` from "3.3.1" to "3.3.3" [#2598](https://github.com/storybooks/storybook/pull/2598)
+- Upgraded `@storybook/react` in `/docs` from "3.3.1" to "3.3.3" [#2598](https://github.com/storybooks/storybook/pull/2598)
+- Upgraded `danger` in `/` from "2.1.6" to "2.1.8" [#2599](https://github.com/storybooks/storybook/pull/2599)
+- Upgraded `axe-core` in `addons/a11y` from "2.6.0" to "2.6.1" [#2599](https://github.com/storybooks/storybook/pull/2599)
+
+
+
+# 3.3.4
+
+2018-January-07
+
+#### Bug Fixes
+
+- Fix config dir detection [#2666](https://github.com/storybooks/storybook/pull/2666)
+- Removed lowercase-only restriction for knobs [#2646](https://github.com/storybooks/storybook/pull/2646)
+- Add IE11 compatibility meta tag [#2650](https://github.com/storybooks/storybook/pull/2650)
+- Allow transparency in color knob [#2624](https://github.com/storybooks/storybook/pull/2624)
+- RN: Use haul/bin/cli.js for cross-platform support [#2577](https://github.com/storybooks/storybook/pull/2577)
+- Publish package sources along with transpiled files [#2604](https://github.com/storybooks/storybook/pull/2604)
+- Fixed all peerDependencies for apps. [#2601](https://github.com/storybooks/storybook/pull/2601)
+- Renamed angular root node to avoid name collisions [#2657](https://github.com/storybooks/storybook/pull/2657)
+- Add .ts compatibility to storyshots [#2639](https://github.com/storybooks/storybook/pull/2639)
+- Remove @angular/core dep from knobs peer. [#2640](https://github.com/storybooks/storybook/pull/2640)
+- Angular: Change template story files extension .ts [#2594](https://github.com/storybooks/storybook/pull/2594)
+- Skip serializing (Synthetic)Events [#2626](https://github.com/storybooks/storybook/pull/2626)
+
+#### Maintenance
+
+- Separate stories in angular-cli example [#2592](https://github.com/storybooks/storybook/pull/2592)
+
+#### Dependency Upgrades
+
+
+
+13 Upgrades
+
+
+- Upgraded `@types/lodash` in `/` from "4.14.91" to "4.14.92" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `marksy` in `addons/info` from "6.0.1" to "6.0.2" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/react` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `html-loader` in `app/react` from "0.5.1" to "0.5.4" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/react` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/angular` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/angular` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/react-native` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/react-native` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `app/vue` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `uglifyjs-webpack-plugin` in `app/vue` from "1.1.5" to "1.1.6" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `@types/node` in `examples/angular-cli` from "6.0.95" to "6.0.96" [#2659](https://github.com/storybooks/storybook/pull/2659)
+- Upgraded `css-loader` in `examples/vue-kitchen-sink` from "0.28.7" to "0.28.8" [#2659](https://github.com/storybooks/storybook/pull/2659)
+
+
+
# 3.3.3
2017-December-29
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 90ae635db01..353d55b5db0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -76,6 +76,14 @@ In order for the snapshot-integration tests to be executed properly, examples be
Puppeteer is used to launch and grab screenshots of example pages, while jest is used to assert matching images.
+##### CRA-kitchen-sink - Image snapshots using Storyshots
+
+`yarn test --image`
+
+This option executes tests from `/examples/cra-kitchen-sink`
+In order for the image snapshots to be correctly generated, you must have static build of the storybook up-to-date.
+
+Puppeteer is used to launch and grab screenshots of example pages, while jest is used to assert matching images. (just like integration tests)
#### 2b. Run e2e tests for CLI
diff --git a/MIGRATION.md b/MIGRATION.md
index e331a988902..91151df1c7e 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -18,7 +18,20 @@
## From version 3.2.x to 3.3.x
-There should be no breaking changes in this release, but read on if you're using `addon-knobs`: we advise an update to your code for efficiency's sake.
+There wasn't expected be any breaking changes in this release, but unfortunately it turned out that there are some. We're revisiting our [release strategy](https://github.com/storybooks/storybook/blob/master/RELEASES.md) to follow semver more strictly.
+Also read on if you're using `addon-knobs`: we advise an update to your code for efficiency's sake.
+
+### `babel-core` is now a peer dependency ([#2494](https://github.com/storybooks/storybook/pull/2494))
+
+This affects you if you don't use babel in your project. You may need to add `babel-core` as dev dependency:
+```
+npm install --save-dev babel-core
+```
+This was done to support different major versions of babel.
+
+### Base webpack config now contains vital plugins ([#1775](https://github.com/storybooks/storybook/pull/1775))
+
+This affects you if you use custom webpack config in [Full Control Mode](https://storybook.js.org/configurations/custom-webpack-config/#full-control-mode) while not preserving the plugins from `storybookBaseConfig`. Before `3.3`, preserving them was just a reccomendation, but now it [became](https://github.com/storybooks/storybook/pull/2578) a requirement.
### Refactored Knobs
diff --git a/README.md b/README.md
index 24abb639329..858456edf66 100644
--- a/README.md
+++ b/README.md
@@ -60,6 +60,8 @@ It runs a codemod to update all package names. Read all migration details in our
For full documentation on using Storybook visit: [storybook.js.org](https://storybook.js.org)
+For additional help, join us [in our Slack](https://now-examples-slackin-rrirkqohko.now.sh/)
+
## Projects
### Main Projects
diff --git a/RELEASES.md b/RELEASES.md
index 1ba156817a8..ae86af316b9 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -116,3 +116,4 @@ in a patch release.
- For PATCH PR's, any maintainer can review, test, approve, and merge it.
- For MINOR/MAJOR PR's, once a maintainer reviews, tests, and approves it, s/he should clear it with the other maintainers before merging it into the release branch.
+
diff --git a/addons/a11y/package.json b/addons/a11y/package.json
index e8eba6b85fd..963d4a644fd 100644
--- a/addons/a11y/package.json
+++ b/addons/a11y/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-a11y",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "a11y addon for storybook",
"keywords": [
"a11y",
@@ -25,8 +25,9 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/components": "^3.3.3",
+ "@storybook/components": "^3.4.0-alpha.4",
"axe-core": "^2.6.1",
+ "glamorous": "^4.11.2",
"prop-types": "^15.6.0"
},
"peerDependencies": {
diff --git a/addons/a11y/src/components/Panel.js b/addons/a11y/src/components/Panel.js
index 8b7b0416a88..191b214afc4 100644
--- a/addons/a11y/src/components/Panel.js
+++ b/addons/a11y/src/components/Panel.js
@@ -6,10 +6,10 @@ import Report from './Report';
const styles = {
passes: {
- color: '#2ecc71',
+ color: '#0D6731',
},
violations: {
- color: '#e74c3c',
+ color: '#AC2300',
},
};
@@ -47,11 +47,11 @@ class Panel extends Component {
Violations,
+ label: {violations.length} Violations ,
panel: ,
},
{
- label: Passes ,
+ label: {passes.length} Passes ,
panel: ,
},
]}
diff --git a/addons/a11y/src/components/Report/RerunButton.js b/addons/a11y/src/components/Report/RerunButton.js
new file mode 100644
index 00000000000..659f1417ffa
--- /dev/null
+++ b/addons/a11y/src/components/Report/RerunButton.js
@@ -0,0 +1,17 @@
+import glamorous from 'glamorous';
+
+const RerunButton = glamorous.button({
+ position: 'absolute',
+ bottom: 0,
+ right: 0,
+ border: 'none',
+ borderTop: 'solid 1px rgba(0, 0, 0, 0.2)',
+ borderLeft: 'solid 1px rgba(0, 0, 0, 0.2)',
+ background: 'rgba(255, 255, 255, 0.5)',
+ padding: '5px 10px',
+ borderRadius: '4px 0 0 0',
+ color: 'rgba(0, 0, 0, 0.5)',
+ textTransform: 'uppercase',
+});
+
+export default RerunButton;
diff --git a/addons/a11y/src/components/Report/index.js b/addons/a11y/src/components/Report/index.js
index f92cb13a635..28b10047b03 100644
--- a/addons/a11y/src/components/Report/index.js
+++ b/addons/a11y/src/components/Report/index.js
@@ -1,6 +1,7 @@
-import React from 'react';
+import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
-
+import addons from '@storybook/addons';
+import RerunButton from './RerunButton';
import Item from './Item';
const styles = {
@@ -17,17 +18,23 @@ const styles = {
},
};
-function Report({ items, empty, passes }) {
- if (items.length) {
- return (
+function onRerunClick() {
+ const channel = addons.getChannel();
+ channel.emit('addon:a11y:rerun');
+}
+
+const Report = ({ items, empty, passes }) => (
+
+ {items.length ? (
{items.map(item => )}
- );
- }
-
- return {empty} ;
-}
+ ) : (
+ {empty}
+ )}
+ Re-run tests
+
+);
Report.propTypes = {
items: PropTypes.arrayOf(
diff --git a/addons/a11y/src/components/Tabs.js b/addons/a11y/src/components/Tabs.js
index 12f8b27dea2..d52fcf54746 100644
--- a/addons/a11y/src/components/Tabs.js
+++ b/addons/a11y/src/components/Tabs.js
@@ -5,6 +5,7 @@ import { baseFonts } from '@storybook/components';
const styles = {
container: {
width: '100%',
+ position: 'relative',
...baseFonts,
},
tabs: {
diff --git a/addons/a11y/src/components/WrapStory.js b/addons/a11y/src/components/WrapStory.js
index ffb43cee017..c21db1925fd 100644
--- a/addons/a11y/src/components/WrapStory.js
+++ b/addons/a11y/src/components/WrapStory.js
@@ -15,8 +15,24 @@ class WrapStory extends Component {
channel: {},
};
- /* eslint-disable react/no-find-dom-node */
+ constructor(props) {
+ super(props);
+ this.runA11yCheck = this.runA11yCheck.bind(this);
+ }
+
componentDidMount() {
+ const { channel } = this.props;
+ channel.on('addon:a11y:rerun', this.runA11yCheck);
+ this.runA11yCheck();
+ }
+
+ componentWillUnmount() {
+ const { channel } = this.props;
+ channel.removeListener('addon:a11y:rerun', this.runA11yCheck);
+ }
+
+ /* eslint-disable react/no-find-dom-node */
+ runA11yCheck() {
const { channel } = this.props;
const wrapper = findDOMNode(this);
diff --git a/addons/actions/package.json b/addons/actions/package.json
index e00c2dbf766..4558dd44acf 100644
--- a/addons/actions/package.json
+++ b/addons/actions/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-actions",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Action Logger addon for storybook",
"keywords": [
"storybook"
diff --git a/addons/background/package.json b/addons/background/package.json
index d0e1fde55f9..df103cd5e38 100644
--- a/addons/background/package.json
+++ b/addons/background/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-backgrounds",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "A storybook addon to show different backgrounds for your preview",
"keywords": [
"addon",
diff --git a/addons/background/src/index.js b/addons/background/src/index.js
index ac0c1a65f59..43c53af3925 100644
--- a/addons/background/src/index.js
+++ b/addons/background/src/index.js
@@ -5,7 +5,7 @@ import addons from '@storybook/addons';
const style = {
wrapper: {
- overflow: 'scroll',
+ overflow: 'auto',
position: 'fixed',
top: 0,
bottom: 0,
diff --git a/addons/centered/package.json b/addons/centered/package.json
index 0a7041ae8ee..73d10ad0cda 100644
--- a/addons/centered/package.json
+++ b/addons/centered/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-centered",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook decorator to center components",
"license": "MIT",
"author": "Muhammed Thanish ",
diff --git a/addons/events/package.json b/addons/events/package.json
index 9c63ba8539a..7f074e63eb7 100644
--- a/addons/events/package.json
+++ b/addons/events/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-events",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Add events to your Storybook stories.",
"keywords": [
"addon",
diff --git a/addons/graphql/package.json b/addons/graphql/package.json
index 15110baffa0..dc5116518f7 100644
--- a/addons/graphql/package.json
+++ b/addons/graphql/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-graphql",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook addon to display the GraphiQL IDE",
"keywords": [
"storybook"
diff --git a/addons/info/docs/home-screenshot.png b/addons/info/docs/home-screenshot.png
index 65e7a787c12..a590bc0a6f1 100644
Binary files a/addons/info/docs/home-screenshot.png and b/addons/info/docs/home-screenshot.png differ
diff --git a/addons/info/package.json b/addons/info/package.json
index 24e37abad28..04b3c97dcdf 100644
--- a/addons/info/package.json
+++ b/addons/info/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-info",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "A Storybook addon to show additional information for your stories.",
"license": "MIT",
"main": "dist/index.js",
@@ -15,11 +15,12 @@
"storybook": "start-storybook -p 9010"
},
"dependencies": {
- "@storybook/client-logger": "^3.3.3",
- "@storybook/components": "^3.3.3",
+ "@storybook/client-logger": "^3.4.0-alpha.4",
+ "@storybook/components": "^3.4.0-alpha.4",
"babel-runtime": "^6.26.0",
+ "glamorous": "^4.11.2",
"global": "^4.3.2",
- "marksy": "^6.0.2",
+ "marksy": "^6.0.3",
"nested-object-assign": "^1.0.1",
"prop-types": "^15.6.0",
"react-addons-create-fragment": "^15.5.3",
diff --git a/addons/info/src/__snapshots__/index.test.js.snap b/addons/info/src/__snapshots__/index.test.js.snap
index 2a7a1b87cfa..baccb582c91 100644
--- a/addons/info/src/__snapshots__/index.test.js.snap
+++ b/addons/info/src/__snapshots__/index.test.js.snap
@@ -34,107 +34,52 @@ containing **bold**, *cursive* text, \`code\` and [a link](https://github.com)"
showSource={true}
styles={[Function]}
>
-
-
-
- It's a
- story:
-
-
-
- function func(x) {return x + 1;}
-
-
- [object Object]
-
-
- 1,2,3
-
-
- 7
-
-
- seven
-
-
- true
-
-
- undefined
-
-
- test
-
-
- storiesOf
-
-
-
-
-
-
-
- Show Info
-
-
+ }
+ >
+
+
+
+ It's a
+ story:
+
+
+
+ function func(x) {return x + 1;}
+
+
+ [object Object]
+
+
+ 1,2,3
+
+
+ 7
+
+
+ seven
+
+
+ true
+
+
+ undefined
+
+
+ test
+
+
+ storiesOf
+
+
+
+
+
+
- ×
+ Show Info
-
-
+
+ ×
+
+
-
-
-
-
-
- Test story
-
-
-
+ />
- with markdown info
-
-
-
-
- containing
-
- bold
-
- ,
-
- cursive
-
- text,
-
- code
-
- and
-
-
- a link
-
-
-
-
-
-
-
+
+
- Story Source
-
-
-
+
+ Test story
+
+
+
+
+ with markdown info
+
+
+
+
+ containing
+
+ bold
+
+ ,
+
+ cursive
+
+ text,
+
+ code
+
+ and
+
+
+ a link
+
+
+
+
+
+
+
-
- It's a
- story:
-
-
+ Story Source
+
+
+
-
-
+
-
- <
- div
-
-
- It's a
- story:
-
-
- }
- singleLine={false}
- >
-
-
-
- >
-
-
-
-
-
- It's a
-
-
-
-
-
-
-
-
-
-
-
- story:
-
-
-
-
- }
- >
-
-
- <
- TestComponent
-
-
+
+ It's a
+ story:
+
+
+ }
+ >
+
+
- }
- singleLine={true}
- >
-
-
-
-
-
-
- func
+ <
+ div
-
- =
-
-
-
- {
-
- func()
-
- }
-
-
-
-
-
-
-
-
-
-
-
- obj
-
-
- =
-
-
-
- {
-
- {
-
- a
-
- :
-
-
- "
- a
- "
-
-
- ,
-
- b
-
- :
-
-
- "
- b
- "
-
-
- }
-
- }
-
-
-
-
-
-
-
-
-
-
-
- array
-
-
- =
-
-
-
- {
-
- [
-
-
- {
-
- 1
-
- }
-
-
- ,
-
-
- {
-
- 2
-
- }
-
-
- ,
-
-
- {
-
- 3
-
- }
-
-
+
+ It's a
+ story:
+
}
-
-
-
-
-
-
-
-
-
-
-
- number
-
-
- =
-
-
-
- {
-
- 7
-
- }
-
-
-
-
-
-
-
-
-
-
-
- string
-
-
- =
-
-
-
- "
- seven
- "
-
-
-
-
-
-
-
-
-
-
-
+
+ }
+ singleLine={false}
>
- bool
+
+
+
+ >
-
-
-
-
-
+
+
+
+ It's a
+
+
+
+
+
+
+
+
+
+
+
+ story:
+
+
+
+
+ }
+ >
+
+
+ <
+ TestComponent
+
+
+ }
+ singleLine={true}
+ >
+
+
+
+
+
+
+
+ func
+
+
+ =
+
+
+
+
+ {
+
+ func()
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ obj
+
+
+ =
+
+
+
+
+ {
+
+ {
+
+ a
+
+ :
+
+
+ "
+ a
+ "
+
+
+ ,
+
+ b
+
+ :
+
+
+ "
+ b
+ "
+
+
+ }
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ array
+
+
+ =
+
+
+
+
+ {
+
+ [
+
+
+ {
+
+ 1
+
+ }
+
+
+ ,
+
+
+ {
+
+ 2
+
+ }
+
+
+ ,
+
+
+ {
+
+ 3
+
+ }
+
+
+ ]
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ number
+
+
+ =
+
+
+
+
+ {
+
+ 7
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+ string
+
+
+ =
+
+
+
+
+ "
+ seven
+ "
+
+
+
+
+
+
+
+
+
+
+
+
+ bool
+
+
+
+
+
+
+ />
+
+
+
+
+
+ </
+ div
+ >
+
+
+
+
+
+
+
- />
-
-
-
-
-
- </
- div
- >
-
-
-
-
-
-
-
-
-
- Prop Types
-
-
-
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- "
- TestComponent
- " Component
-
-
+
-
+ "
+ TestComponent
+ " Component
+
+
-
- No propTypes defined!
-
-
-
+
+
+ No propTypes defined!
+
+
+
+
-
+
`;
diff --git a/addons/info/src/components/PropVal.js b/addons/info/src/components/PropVal.js
index 361dd6b0055..db935e709d7 100644
--- a/addons/info/src/components/PropVal.js
+++ b/addons/info/src/components/PropVal.js
@@ -1,46 +1,47 @@
import React from 'react';
import PropTypes from 'prop-types';
+import { withTheme } from 'glamorous';
import createFragment from 'react-addons-create-fragment';
-const valueStyles = {
+const getValueStyles = (codeColors = {}) => ({
func: {
- color: '#170',
+ color: codeColors.func || '#170',
},
attr: {
- color: '#666',
+ color: codeColors.attr || '#666',
},
object: {
- color: '#666',
+ color: codeColors.object || '#666',
},
array: {
- color: '#666',
+ color: codeColors.array || '#666',
},
number: {
- color: '#a11',
+ color: codeColors.number || '#a11',
},
string: {
- color: '#22a',
+ color: codeColors.string || '#22a',
wordBreak: 'break-word',
},
bool: {
- color: '#a11',
+ color: codeColors.bool || '#a11',
},
empty: {
color: '#777',
},
-};
+});
-function previewArray(val, maxPropArrayLength) {
+function previewArray(val, maxPropArrayLength, valueStyles) {
const items = {};
val.slice(0, maxPropArrayLength).forEach((item, i) => {
- items[`n${i}`] = ;
+ items[`n${i}`] = ;
items[`c${i}`] = ', ';
});
if (val.length > maxPropArrayLength) {
@@ -51,13 +52,13 @@ function previewArray(val, maxPropArrayLength) {
return [{createFragment(items)}] ;
}
-function previewObject(val, maxPropObjectKeys) {
+function previewObject(val, maxPropObjectKeys, valueStyles) {
const names = Object.keys(val);
const items = {};
names.slice(0, maxPropObjectKeys).forEach((name, i) => {
items[`k${i}`] = {name} ;
items[`c${i}`] = ': ';
- items[`v${i}`] = ;
+ items[`v${i}`] = ;
items[`m${i}`] = ', ';
});
if (names.length > maxPropObjectKeys) {
@@ -74,11 +75,13 @@ function previewObject(val, maxPropObjectKeys) {
);
}
-export default function PropVal(props) {
- const { maxPropObjectKeys, maxPropArrayLength, maxPropStringLength } = props;
+function PropVal(props) {
+ const { maxPropObjectKeys, maxPropArrayLength, maxPropStringLength, theme } = props;
let { val } = props;
+ const { codeColors } = theme || {};
let braceWrap = true;
let content = null;
+ const valueStyles = props.valueStyles || getValueStyles(codeColors);
if (typeof val === 'number') {
content = {val} ;
@@ -91,7 +94,7 @@ export default function PropVal(props) {
} else if (typeof val === 'boolean') {
content = {`${val}`} ;
} else if (Array.isArray(val)) {
- content = previewArray(val, maxPropArrayLength);
+ content = previewArray(val, maxPropArrayLength, valueStyles);
} else if (typeof val === 'function') {
content = {val.name ? `${val.name}()` : 'anonymous()'} ;
} else if (!val) {
@@ -105,7 +108,7 @@ export default function PropVal(props) {
);
} else {
- content = previewObject(val, maxPropObjectKeys);
+ content = previewObject(val, maxPropObjectKeys, valueStyles);
}
if (!braceWrap) return content;
@@ -118,6 +121,8 @@ PropVal.defaultProps = {
maxPropObjectKeys: 3,
maxPropArrayLength: 3,
maxPropStringLength: 50,
+ theme: {},
+ valueStyles: null,
};
PropVal.propTypes = {
@@ -125,4 +130,19 @@ PropVal.propTypes = {
maxPropObjectKeys: PropTypes.number,
maxPropArrayLength: PropTypes.number,
maxPropStringLength: PropTypes.number,
+ theme: PropTypes.shape({
+ codeColors: PropTypes.object,
+ }),
+ valueStyles: PropTypes.shape({
+ func: PropTypes.object,
+ attr: PropTypes.object,
+ object: PropTypes.object,
+ array: PropTypes.object,
+ number: PropTypes.object,
+ string: PropTypes.object,
+ bool: PropTypes.object,
+ empty: PropTypes.object,
+ }),
};
+
+export default withTheme(PropVal);
diff --git a/addons/info/src/components/Story.js b/addons/info/src/components/Story.js
index 3dd4bf83437..1021f180531 100644
--- a/addons/info/src/components/Story.js
+++ b/addons/info/src/components/Story.js
@@ -4,6 +4,7 @@ import React, { createElement } from 'react';
import PropTypes from 'prop-types';
import global from 'global';
import { baseFonts } from '@storybook/components';
+import { ThemeProvider } from 'glamorous';
import marksy from 'marksy';
@@ -364,11 +365,11 @@ export default class Story extends React.Component {
}
render() {
- if (this.props.showInline) {
- return this._renderInline();
- }
-
- return this._renderOverlay();
+ return (
+
+ {this.props.showInline ? this._renderInline() : this._renderOverlay()}
+
+ );
}
}
diff --git a/addons/info/src/components/markdown/code.js b/addons/info/src/components/markdown/code.js
index f43d67955b8..db17696ca94 100644
--- a/addons/info/src/components/markdown/code.js
+++ b/addons/info/src/components/markdown/code.js
@@ -52,21 +52,6 @@ Code.defaultProps = {
code: null,
};
-export function Pre(props) {
- const style = {
- fontSize: '.88em',
- fontFamily: 'Menlo, Monaco, "Courier New", monospace',
- backgroundColor: '#fafafa',
- padding: '.5rem',
- lineHeight: 1.5,
- overflowX: 'scroll',
- };
- return {props.children} ;
-}
-
-Pre.propTypes = { children: PropTypes.node };
-Pre.defaultProps = { children: null };
-
export function Blockquote(props) {
const style = {
fontSize: '1.88em',
@@ -79,3 +64,5 @@ export function Blockquote(props) {
Blockquote.propTypes = { children: PropTypes.node };
Blockquote.defaultProps = { children: null };
+
+export { default as Pre } from './pre/pre';
diff --git a/addons/info/src/components/markdown/pre/copy.js b/addons/info/src/components/markdown/pre/copy.js
new file mode 100644
index 00000000000..8142b089573
--- /dev/null
+++ b/addons/info/src/components/markdown/pre/copy.js
@@ -0,0 +1,13 @@
+/* eslint-disable no-undef */
+export default function copy(str) {
+ const tmp = document.createElement('TEXTAREA');
+ const focus = document.activeElement;
+
+ tmp.value = str;
+
+ document.body.appendChild(tmp);
+ tmp.select();
+ document.execCommand('copy');
+ document.body.removeChild(tmp);
+ focus.focus();
+}
diff --git a/addons/info/src/components/markdown/pre/copyButton.js b/addons/info/src/components/markdown/pre/copyButton.js
new file mode 100644
index 00000000000..0daf4db7990
--- /dev/null
+++ b/addons/info/src/components/markdown/pre/copyButton.js
@@ -0,0 +1,68 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import glamorous, { withTheme } from 'glamorous';
+
+const Button = glamorous.button(
+ {
+ overflow: 'hidden',
+ border: '1px solid #eee',
+ borderRadius: 3,
+ backgroundColor: '#FFFFFF',
+ cursor: 'pointer',
+ fontSize: 13,
+ padding: '3px 10px',
+ alignSelf: 'flex-start',
+
+ ':hover': {
+ backgroundColor: '#f4f7fa',
+ borderColor: '#ddd',
+ },
+
+ ':active': {
+ backgroundColor: '#e9ecef',
+ borderColor: '#ccc',
+ },
+ },
+ props => props.styles
+);
+
+const ContentWrapper = glamorous.div(
+ {
+ transition: 'transform .2s ease',
+ height: 16,
+ },
+ props => ({
+ ...props.styles,
+ transform: props.toggled ? 'translateY(0px)' : 'translateY(-100%) translateY(-6px)',
+ })
+);
+
+function CopyButton(props) {
+ const { copyButton = {}, copyButtonContent } = props.theme;
+ const { toggleText = 'Copied!', text = 'Copy', ...copyButtonStyles } = copyButton;
+
+ return (
+
+
+ {toggleText}
+ {text}
+
+
+ );
+}
+
+CopyButton.propTypes = {
+ onClick: PropTypes.func,
+ toggled: PropTypes.bool,
+ theme: PropTypes.shape({
+ copyButton: PropTypes.object,
+ }),
+};
+
+CopyButton.defaultProps = {
+ onClick: () => {},
+ toggled: false,
+ theme: {},
+};
+
+export default withTheme(CopyButton);
diff --git a/addons/info/src/components/markdown/pre/pre.js b/addons/info/src/components/markdown/pre/pre.js
new file mode 100644
index 00000000000..c8c4a45633c
--- /dev/null
+++ b/addons/info/src/components/markdown/pre/pre.js
@@ -0,0 +1,75 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import glamorous, { withTheme } from 'glamorous';
+
+import CopyButton from './copyButton';
+import copy from './copy';
+
+const TOGGLE_TIMEOUT = 1800;
+
+const StyledPre = glamorous.pre(
+ {
+ display: 'flex',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ fontSize: '.88em',
+ fontFamily: 'Menlo, Monaco, "Courier New", monospace',
+ backgroundColor: '#fafafa',
+ padding: '.5rem',
+ lineHeight: 1.5,
+ overflowX: 'scroll',
+ },
+ props => props.styles
+);
+
+class Pre extends React.Component {
+ state = {
+ copied: false,
+ };
+
+ setRef = elem => {
+ this.pre = elem;
+ };
+
+ handleClick = () => {
+ const text = this.pre && this.pre.innerText;
+
+ if (!text) {
+ return;
+ }
+
+ copy(text);
+ this.setState({ copied: true });
+
+ clearTimeout(this.timeout);
+
+ this.timeout = setTimeout(() => {
+ this.setState({ copied: false });
+ }, TOGGLE_TIMEOUT);
+ };
+
+ render() {
+ const { pre } = this.props.theme;
+
+ return (
+
+ {this.props.children}
+
+
+ );
+ }
+}
+
+Pre.propTypes = {
+ children: PropTypes.node,
+ theme: PropTypes.shape({
+ pre: PropTypes.object,
+ }),
+};
+
+Pre.defaultProps = {
+ children: null,
+ theme: {},
+};
+
+export default withTheme(Pre);
diff --git a/addons/info/src/components/types/OneOfType.js b/addons/info/src/components/types/OneOfType.js
index 3c10aa68df4..fab5bb53bc9 100644
--- a/addons/info/src/components/types/OneOfType.js
+++ b/addons/info/src/components/types/OneOfType.js
@@ -8,13 +8,13 @@ const OneOfType = ({ propType }) => {
return (
{propType.value
- .map((value, i) => [
- ,
- i < length - 1 ? | : null,
- ])
+ .map((value, i) => {
+ const key = `${value.name}${value.value ? `-${value.value}` : ''}`;
+ return [
+ ,
+ i < length - 1 ? | : null,
+ ];
+ })
.reduce((acc, tuple) => acc.concat(tuple), [])}
);
diff --git a/addons/jest/package.json b/addons/jest/package.json
index cbfd8c07453..18826611243 100644
--- a/addons/jest/package.json
+++ b/addons/jest/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-jest",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "React storybook addon that show component jest report",
"keywords": [
"addon",
@@ -25,7 +25,7 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/components": "^3.3.3",
+ "@storybook/components": "^3.4.0-alpha.4",
"glamor": "^2.20.40",
"glamorous": "^4.11.2",
"global": "^4.3.2",
diff --git a/addons/knobs/.npmignore b/addons/knobs/.npmignore
index b467c377fd1..02ba1793bbe 100644
--- a/addons/knobs/.npmignore
+++ b/addons/knobs/.npmignore
@@ -1,2 +1 @@
-src
.babelrc
diff --git a/addons/knobs/package.json b/addons/knobs/package.json
index af2d5f23343..338d6e03e0a 100644
--- a/addons/knobs/package.json
+++ b/addons/knobs/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-knobs",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook Addon Prop Editor Component",
"license": "MIT",
"main": "dist/index.js",
diff --git a/addons/knobs/polymer.js b/addons/knobs/polymer.js
new file mode 100644
index 00000000000..b3cfb782c79
--- /dev/null
+++ b/addons/knobs/polymer.js
@@ -0,0 +1 @@
+module.exports = require('./dist/polymer');
diff --git a/addons/knobs/src/angular/helpers.js b/addons/knobs/src/angular/helpers.js
index 1fdc7d7f5b9..54607015ce2 100644
--- a/addons/knobs/src/angular/helpers.js
+++ b/addons/knobs/src/angular/helpers.js
@@ -3,7 +3,7 @@
import { Component, SimpleChange, ChangeDetectorRef } from '@angular/core';
import { getParameters, getAnnotations, getPropMetadata } from './utils';
-const getComponentMetadata = ({ component, props = {}, moduleMetadata = {} }) => {
+const getComponentMetadata = ({ component, props = {}, moduleMetadata = {}, template = '' }) => {
if (!component || typeof component !== 'function') throw new Error('No valid component provided');
const componentMeta = getAnnotations(component)[0] || {};
@@ -16,6 +16,7 @@ const getComponentMetadata = ({ component, props = {}, moduleMetadata = {} }) =>
componentMeta,
propsMeta,
moduleMetadata,
+ template,
params: paramsMetadata,
};
};
@@ -29,8 +30,8 @@ const getAnnotatedComponent = ({ componentMeta, component, params, knobStore, ch
};
KnobWrapperComponent.prototype = Object.create(component.prototype);
- KnobWrapperComponent.__annotations__ = [new Component(componentMeta)];
- KnobWrapperComponent.__parameters__ = [[ChangeDetectorRef], ...params];
+ KnobWrapperComponent.annotations = [new Component(componentMeta)];
+ KnobWrapperComponent.parameters = [[ChangeDetectorRef], ...params];
KnobWrapperComponent.prototype.constructor = KnobWrapperComponent;
KnobWrapperComponent.prototype.ngOnInit = function onInit() {
diff --git a/addons/knobs/src/polymer/WrapStory.html b/addons/knobs/src/polymer/WrapStory.html
new file mode 100644
index 00000000000..ec233fb8744
--- /dev/null
+++ b/addons/knobs/src/polymer/WrapStory.html
@@ -0,0 +1,87 @@
+
+
+
diff --git a/addons/knobs/src/polymer/index.js b/addons/knobs/src/polymer/index.js
new file mode 100644
index 00000000000..5bb16a89065
--- /dev/null
+++ b/addons/knobs/src/polymer/index.js
@@ -0,0 +1,36 @@
+import addons from '@storybook/addons';
+import window from 'global';
+import './WrapStory.html';
+
+import { knob, text, boolean, number, color, object, array, date, select, manager } from '../base';
+
+export { knob, text, boolean, number, color, object, array, date, select };
+
+export function button(name, callback) {
+ return manager.knob(name, { type: 'button', value: Date.now(), callback, hideLabel: true });
+}
+
+function prepareComponent({ getStory, context, channel, knobStore }) {
+ const WrapStory = window.customElements.get('wrap-story');
+ return new WrapStory(getStory(context), channel, context, getStory, knobStore);
+}
+
+export const polymerHandler = (channel, knobStore) => getStory => context =>
+ prepareComponent({ getStory, context, channel, knobStore });
+
+function wrapperKnobs(options) {
+ const channel = addons.getChannel();
+ manager.setChannel(channel);
+
+ if (options) channel.emit('addon:knobs:setOptions', options);
+
+ return polymerHandler(channel, manager.knobStore);
+}
+
+export function withKnobs(storyFn, context) {
+ return wrapperKnobs()(storyFn)(context);
+}
+
+export function withKnobsOptions(options = {}) {
+ return (storyFn, context) => wrapperKnobs(options)(storyFn)(context);
+}
diff --git a/addons/links/package.json b/addons/links/package.json
index e02114bdc16..56d75533f71 100644
--- a/addons/links/package.json
+++ b/addons/links/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-links",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Story Links addon for storybook",
"keywords": [
"storybook"
@@ -22,7 +22,7 @@
"storybook": "start-storybook -p 9001"
},
"dependencies": {
- "@storybook/components": "^3.3.3",
+ "@storybook/components": "^3.4.0-alpha.4",
"global": "^4.3.2",
"prop-types": "^15.5.10"
},
@@ -30,7 +30,7 @@
"enzyme": "^3.3.0",
"react": "^16.1.0",
"react-dom": "^16.1.0",
- "shelljs": "^0.7.8"
+ "shelljs": "^0.8.0"
},
"peerDependencies": {
"@storybook/addons": "^3.3.0",
diff --git a/addons/notes/package.json b/addons/notes/package.json
index 5bd3fe2d69f..be02853de9e 100644
--- a/addons/notes/package.json
+++ b/addons/notes/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-notes",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Write notes for your Storybook stories.",
"keywords": [
"addon",
diff --git a/addons/options/package.json b/addons/options/package.json
index fdea967bc5c..c02dd1cda1f 100644
--- a/addons/options/package.json
+++ b/addons/options/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-options",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Options addon for storybook",
"keywords": [
"storybook"
diff --git a/addons/storyshots/.npmignore b/addons/storyshots/.npmignore
index b467c377fd1..02ba1793bbe 100644
--- a/addons/storyshots/.npmignore
+++ b/addons/storyshots/.npmignore
@@ -1,2 +1 @@
-src
.babelrc
diff --git a/addons/storyshots/README.md b/addons/storyshots/README.md
index 0505b724b24..b75b0ec4c49 100644
--- a/addons/storyshots/README.md
+++ b/addons/storyshots/README.md
@@ -36,7 +36,7 @@ Usually, you might already have completed this step. If not, here are some resou
> Note: If you use React 16, you'll need to follow [these additional instructions](https://github.com/facebook/react/issues/9102#issuecomment-283873039).
-## Configure Storyshots
+## Configure Storyshots for HTML snapshots
Create a new test file with the name `Storyshots.test.js`. (Or whatever the name you prefer, as long as it matches Jest's config [`testMatch`](http://facebook.github.io/jest/docs/en/configuration.html#testmatch-array-string)).
Then add following content to it:
@@ -53,6 +53,103 @@ Now run your Jest test command. (Usually, `npm test`.) Then you can see all of y

+
+## Configure Storyshots for image snapshots
+
+/*\ **React-native** is **not supported** by this test function.
+
+Internally, it uses [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot).
+
+When willing to generate and compare image snapshots for your stories, you have to two options:
+ - Have a storybook running (ie. accessible via http(s):// , for instance using `yarn run storybook`)
+ - Have a static build of the storybook (for instance, using `yarn run build-storybook`)
+
+Then you will need to reference the storybook URL (`file://...` if local, `http(s)://...` if served)
+
+### Using default values for _imageSnapshots_
+
+Then you can either create a new Storyshots instance or edit the one you previously used:
+```js
+import initStoryshots, { imageSnapshot } from '@storybook/addon-storyshots';
+
+initStoryshots({suite: 'Image storyshots', test: imageSnapshot});
+```
+This will assume you have a storybook running on at _http://localhost:6006_.
+Internally here are the steps:
+- Launches a Chrome headless using [puppeteer](https://github.com/GoogleChrome/puppeteer)
+- Browses each stories (calling _http://localhost:6006/iframe.html?..._ URL),
+- Take screenshots & save all images under _\_image_snapshots\__ folder.
+
+### Specifying the storybook URL
+
+If you want to set specific storybook URL, you can specify via the `storybookUrl` parameter, see below:
+```js
+import initStoryshots, { imageSnapshot } from '@storybook/addon-storyshots';
+
+initStoryshots({suite: 'Image storyshots', test: imageSnapshot({storybookUrl: 'http://my-specific-domain.com:9010'})});
+```
+The above config will use _https://my-specific-domain.com:9010_ for screenshots.
+
+
+You may also use a local static build of storybook if you do not want to run the webpack dev-server:
+```js
+import initStoryshots, { imageSnapshot } from '@storybook/addon-storyshots';
+
+initStoryshots({suite: 'Image storyshots', test: imageSnapshot({storybookUrl: 'file:///path/to/my/storybook-static'})});
+```
+
+### Specifying options to _jest-image-snapshots_
+
+If you wish to customize [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot), then you can provide a `getMatchOptions` parameter that should return the options config object.
+```js
+import initStoryshots, { imageSnapshot } from '@storybook/addon-storyshots';
+const getMatchOptions = ({context : {kind, story}, url}) => {
+ return {
+ failureThreshold: 0.2,
+ failureThresholdType: 'percent',
+ }
+}
+initStoryshots({suite: 'Image storyshots', test: imageSnapshot({storybookUrl: 'http://localhost:6006', getMatchOptions})});
+```
+`getMatchOptions` receives an object: `{ context: {kind, story}, url}`. _kind_ is the kind of the story and the _story_ its name. _url_ is the URL the browser will use to screenshot.
+
+
+### Integrate image storyshots with regular app
+You may want to use another Jest project to run your image snapshots as they require more resources: Chrome and Storybook built/served.
+You can find a working example of this in the [official-storybook](https://github.com/storybooks/storybook/tree/master/examples/official-storybook) example.
+
+### Integrate image storyshots with [Create React App](https://github.com/facebookincubator/create-react-app)
+You have two options here, you can either:
+
+- Simply add the storyshots configuration inside any of your `test.js` file. You must ensure you have either a running storybook or a static build available.
+
+- Create a custom test file using Jest outside of the CRA scope:
+
+ A more robust approach would be to separate existing test files ran by create-react-app (anything `(test|spec).js` suffixed files) from the test files to run storyshots with image snapshots.
+ This use case can be achieved by using a custom name for the test file, ie something like `image-storyshots.runner.js`. This file will contains the `initStoryshots` call with image snapshots configuration.
+ Then you will create a separate script entry in your package.json, for instance
+ ```json
+ {
+ "scripts": {
+ "image-snapshots" : "jest image-storyshots.runner.js --config path/to/custom/jest.config.json"
+ }
+ }
+ ```
+ Note that you will certainly need a custom config file for Jest as you run it outside of the CRA scope and thus you do not have the built-in config.
+
+ Once that's setup, you can run `yarn run image-snapshots` (or `npm run image-snapshots`).
+
+### Reminder
+An image snapshot is simply a screenshot taken by a web browser (in our case, Chrome).
+
+The browser opens a page (either using the static build of storybook or a running instance of Storybook)
+
+If you run your test without either the static build or a running instance, this wont work.
+
+To make sure your screenshots are taken from latest changes of your Storybook, you must keep your static build or running Storybook up-to-date.
+This can be achieved by adding a step before running the test ie: `yarn run build-storybook && yarn run image-snapshots`.
+If you run the image snapshots against a running Storybook in dev mode, you don't have to care about being up-to-date because the dev-server is watching changes and rebuilds automatically.
+
## Options
### `configPath`
diff --git a/addons/storyshots/package.json b/addons/storyshots/package.json
index 8d5521ab990..d1ae8f5bf11 100644
--- a/addons/storyshots/package.json
+++ b/addons/storyshots/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-storyshots",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "StoryShots is a Jest Snapshot Testing Addon for Storybook.",
"license": "MIT",
"main": "dist/index.js",
@@ -16,17 +16,19 @@
"example": "jest storyshot.test"
},
"dependencies": {
- "@storybook/channels": "^3.3.3",
+ "@storybook/channels": "^3.4.0-alpha.4",
"babel-runtime": "^6.26.0",
"glob": "^7.1.2",
"global": "^4.3.2",
+ "jest-image-snapshot": "^2.3.0",
"jest-specific-snapshot": "^0.3.0",
"prop-types": "^15.6.0",
+ "puppeteer": "^0.13.0",
"read-pkg-up": "^3.0.0"
},
"devDependencies": {
- "@storybook/addons": "^3.3.3",
- "@storybook/react": "^3.3.3",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/react": "^3.4.0-alpha.4",
"babel-cli": "^6.26.0",
"babel-jest": "^20.0.3",
"babel-plugin-transform-runtime": "^6.23.0",
@@ -40,7 +42,7 @@
"react-dom": "^16.1.0"
},
"peerDependencies": {
- "@storybook/addons": "^3.3.3",
+ "@storybook/addons": "^3.4.0-alpha.4",
"babel-core": "^6.26.0 || ^7.0.0-0",
"react": "*",
"react-test-renderer": "*"
diff --git a/addons/storyshots/src/index.js b/addons/storyshots/src/index.js
index c43acb30182..1f94fd13a45 100644
--- a/addons/storyshots/src/index.js
+++ b/addons/storyshots/src/index.js
@@ -1,7 +1,7 @@
import path from 'path';
import fs from 'fs';
import glob from 'glob';
-import global, { describe, it } from 'global';
+import global, { describe, it, beforeEach, afterEach } from 'global';
import readPkgUp from 'read-pkg-up';
import addons from '@storybook/addons';
@@ -18,6 +18,8 @@ export {
renderOnly,
} from './test-bodies';
+export { imageSnapshot } from './test-body-image-snapshot';
+
export { getSnapshotFileName };
let storybook;
@@ -100,6 +102,20 @@ export default function testStorySnapshots(options = {}) {
}
describe(suite, () => {
+ beforeEach(() => {
+ if (typeof options.test.beforeEach === 'function') {
+ return options.test.beforeEach();
+ }
+ return Promise.resolve();
+ });
+
+ afterEach(() => {
+ if (typeof options.test.afterEach === 'function') {
+ return options.test.afterEach();
+ }
+ return Promise.resolve();
+ });
+
describe(kind, () => {
// eslint-disable-next-line
for (const story of group.stories) {
@@ -109,7 +125,7 @@ export default function testStorySnapshots(options = {}) {
}
it(story.name, () => {
- const context = { fileName, kind, story: story.name };
+ const context = { fileName, kind, story: story.name, isRNStorybook };
return options.test({
story,
context,
@@ -122,14 +138,13 @@ export default function testStorySnapshots(options = {}) {
}
describe('Storyshots Integrity', () => {
- describe('Abandoned Storyshots', () => {
+ test('Abandoned Storyshots', () => {
const storyshots = glob.sync('**/*.storyshot');
const abandonedStoryshots = storyshots.filter(fileName => {
const possibleStoriesFiles = getPossibleStoriesFiles(fileName);
return !possibleStoriesFiles.some(fs.existsSync);
});
-
expect(abandonedStoryshots).toHaveLength(0);
});
});
diff --git a/addons/storyshots/src/test-body-image-snapshot.js b/addons/storyshots/src/test-body-image-snapshot.js
new file mode 100644
index 00000000000..94aadf4de74
--- /dev/null
+++ b/addons/storyshots/src/test-body-image-snapshot.js
@@ -0,0 +1,67 @@
+import puppeteer from 'puppeteer';
+import { toMatchImageSnapshot } from 'jest-image-snapshot';
+
+expect.extend({ toMatchImageSnapshot });
+
+export const imageSnapshot = ({
+ storybookUrl = 'http://localhost:6006',
+ getMatchOptions = () => {},
+}) => {
+ let browser; // holds ref to browser. (ie. Chrome)
+ let page; // Hold ref to the page to screenshot.
+
+ const testFn = ({ context }) => {
+ if (context.isRNStorybook) {
+ // Skip tests since we de not support RN image snapshots.
+ console.error(
+ "It seems you are running imageSnapshot on RN app and it's not supported. Skipping test."
+ );
+ return Promise.resolve();
+ }
+
+ const encodedKind = encodeURIComponent(context.kind);
+ const encodedStoryName = encodeURIComponent(context.story);
+ const storyUrl = `/iframe.html?selectedKind=${encodedKind}&selectedStory=${encodedStoryName}`;
+ const url = storybookUrl + storyUrl;
+ if (!browser || !page) {
+ console.error(
+ `Error when generating image snapshot for test ${context.kind} - ${
+ context.story
+ } : It seems the headless browser is not running.`
+ );
+ return Promise.reject(new Error('no-headless-browser-running'));
+ }
+
+ expect.assertions(1);
+ return page
+ .goto(url)
+ .catch(e => {
+ console.error(
+ `ERROR WHILE CONNECTING TO ${url}, did you start or build the storybook first ? A storybook instance should be running or a static version should be built when using image snapshot feature.`,
+ e
+ );
+ throw e;
+ })
+ .then(() =>
+ page.screenshot().then(image => {
+ expect(image).toMatchImageSnapshot(getMatchOptions({ context, url }));
+ })
+ );
+ };
+
+ testFn.beforeEach = () =>
+ puppeteer
+ // add some options "no-sandbox" to make it work properly on some Linux systems as proposed here: https://github.com/Googlechrome/puppeteer/issues/290#issuecomment-322851507
+ .launch({ args: ['--no-sandbox ', '--disable-setuid-sandbox'] })
+ .then(b => {
+ browser = b;
+ })
+ .then(() => browser.newPage())
+ .then(p => {
+ page = p;
+ });
+
+ testFn.afterEach = () => browser.close();
+
+ return testFn;
+};
diff --git a/addons/viewport/README.md b/addons/viewport/README.md
index 37f59241831..05aad39ff40 100644
--- a/addons/viewport/README.md
+++ b/addons/viewport/README.md
@@ -4,7 +4,7 @@ Storybook Viewport Addon allows your stories to be displayed in different sizes
This addon works with Storybook for: [React](https://github.com/storybooks/storybook/tree/master/app/react) and [Vue](https://github.com/storybooks/storybook/tree/master/app/vue).
-
+
## Installation
diff --git a/addons/viewport/package.json b/addons/viewport/package.json
index 1ba6eaabee8..82ec3710286 100644
--- a/addons/viewport/package.json
+++ b/addons/viewport/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addon-viewport",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook addon to change the viewport size to mobile",
"main": "register.js",
"keywords": [
@@ -11,7 +11,7 @@
},
"license": "MIT",
"dependencies": {
- "@storybook/components": "^3.3.3",
+ "@storybook/components": "^3.4.0-alpha.4",
"global": "^4.3.2",
"prop-types": "^15.5.10"
},
diff --git a/app/angular/.npmignore b/app/angular/.npmignore
index 329fc8d67ad..6d236e2ff68 100644
--- a/app/angular/.npmignore
+++ b/app/angular/.npmignore
@@ -1,3 +1,2 @@
docs
-src
.babelrc
diff --git a/app/angular/demo.d.ts b/app/angular/demo.d.ts
index 7ff09737fcd..c2deaa98dbb 100644
--- a/app/angular/demo.d.ts
+++ b/app/angular/demo.d.ts
@@ -1,4 +1,4 @@
declare module '@storybook/angular/demo' {
- export const Button: any;
- export const Welcome: any;
-}
\ No newline at end of file
+ export const Button: any;
+ export const Welcome: any;
+}
diff --git a/app/angular/index.d.ts b/app/angular/index.d.ts
index 96e06d24596..09fc1b7c611 100644
--- a/app/angular/index.d.ts
+++ b/app/angular/index.d.ts
@@ -1,31 +1,32 @@
-import {NgModuleMetadata, ICollection} from './dist/client/preview/angular/types';
+import { NgModuleMetadata, ICollection } from './dist/client/preview/angular/types';
export interface IStorybookStory {
- name: string,
- render: () => any
+ name: string;
+ render: () => any;
}
export interface IStoribookSection {
- kind: string,
- stories: IStorybookStory[]
+ kind: string;
+ stories: IStorybookStory[];
}
export type IGetStory = () => {
- props?: ICollection;
- moduleMetadata?: Partial;
- component: any
+ props?: ICollection;
+ moduleMetadata?: Partial;
+ component?: any;
+ template?: string;
};
export interface IApi {
- kind: string;
- addDecorator: (decorator: any) => IApi;
- add: (storyName: string, getStory: IGetStory ) => IApi;
+ kind: string;
+ addDecorator: (decorator: any) => IApi;
+ add: (storyName: string, getStory: IGetStory) => IApi;
}
declare module '@storybook/angular' {
- export function storiesOf(kind: string, module: NodeModule): IApi;
- export function setAddon(addon: any): void;
- export function addDecorator(decorator: any): IApi;
- export function configure(loaders: () => NodeRequire, module: NodeModule): void;
- export function getStorybook(): IStoribookSection[];
+ export function storiesOf(kind: string, module: NodeModule): IApi;
+ export function setAddon(addon: any): void;
+ export function addDecorator(decorator: any): IApi;
+ export function configure(loaders: () => NodeRequire, module: NodeModule): void;
+ export function getStorybook(): IStoribookSection[];
}
diff --git a/app/angular/package.json b/app/angular/package.json
index 0313188ad4c..ff3f2f3aa45 100644
--- a/app/angular/package.json
+++ b/app/angular/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/angular",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook for Angular: Develop Angular Components in isolation with Hot Reloading.",
"homepage": "https://github.com/storybooks/storybook/tree/master/apps/angular",
"bugs": {
@@ -23,15 +23,15 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/channel-postmessage": "^3.3.3",
- "@storybook/core": "^3.3.3",
- "@storybook/ui": "^3.3.3",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/channel-postmessage": "^3.4.0-alpha.4",
+ "@storybook/core": "^3.4.0-alpha.4",
+ "@storybook/ui": "^3.4.0-alpha.4",
"airbnb-js-shims": "^1.1.1",
"angular2-template-loader": "^0.6.2",
- "autoprefixer": "^7.2.4",
+ "autoprefixer": "^7.2.5",
"babel-core": "^6.26.0",
"babel-loader": "^7.0.0",
"babel-plugin-react-docgen": "^1.6.0",
@@ -42,8 +42,8 @@
"babel-runtime": "^6.23.0",
"case-sensitive-paths-webpack-plugin": "^2.0.0",
"chalk": "^2.1.0",
- "commander": "^2.11.0",
- "common-tags": "^1.4.0",
+ "commander": "^2.13.0",
+ "common-tags": "^1.7.2",
"configstore": "^3.1.0",
"core-js": "^2.4.1",
"cross-env": "^5.1.1",
@@ -52,11 +52,14 @@
"file-loader": "^0.11.1",
"find-cache-dir": "^1.0.0",
"global": "^4.3.2",
+ "html-loader": "^0.5.4",
"html-webpack-plugin": "^2.30.1",
"json-loader": "^0.5.4",
"json-stringify-safe": "^5.0.1",
"json5": "^0.5.1",
"lodash.pick": "^4.4.0",
+ "markdown-loader": "^2.0.2",
+ "node-sass": "^4.7.2",
"postcss-flexbugs-fixes": "^3.0.0",
"postcss-loader": "^2.0.10",
"prop-types": "^15.5.10",
@@ -68,8 +71,9 @@
"redux": "^3.6.0",
"request": "^2.81.0",
"rxjs": "^5.4.2",
+ "sass-loader": "^6.0.6",
"serve-favicon": "^2.4.3",
- "shelljs": "^0.7.8",
+ "shelljs": "^0.8.0",
"style-loader": "^0.18.2",
"ts-loader": "^2.2.2",
"uglifyjs-webpack-plugin": "^1.1.6",
@@ -79,7 +83,7 @@
"webpack": "^2.5.1 || ^3.0.0",
"webpack-dev-middleware": "^1.10.2",
"webpack-hot-middleware": "^2.18.0",
- "zone.js": "^0.8.19"
+ "zone.js": "^0.8.20"
},
"devDependencies": {
"babel-cli": "^6.26.0",
@@ -87,7 +91,7 @@
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"codelyzer": "^3.1.2",
"mock-fs": "^4.3.0",
- "nodemon": "^1.14.7",
+ "nodemon": "^1.14.11",
"typescript": "^2.4.0"
},
"peerDependencies": {
diff --git a/app/angular/src/client/preview/angular/app.token.ts b/app/angular/src/client/preview/angular/app.token.ts
index bf45fcd7720..3e4753b21c1 100644
--- a/app/angular/src/client/preview/angular/app.token.ts
+++ b/app/angular/src/client/preview/angular/app.token.ts
@@ -1,4 +1,4 @@
-import { InjectionToken } from "@angular/core";
-import { NgStory } from "./types";
+import { InjectionToken } from '@angular/core';
+import { NgStory } from './types';
-export const STORY = new InjectionToken("story");
+export const STORY = new InjectionToken('story');
diff --git a/app/angular/src/client/preview/angular/components/app.component.ts b/app/angular/src/client/preview/angular/components/app.component.ts
index ff4d463bf9e..af7a76764c2 100644
--- a/app/angular/src/client/preview/angular/components/app.component.ts
+++ b/app/angular/src/client/preview/angular/components/app.component.ts
@@ -2,35 +2,31 @@
// to provide @Inputs and subscribe to @Outputs, see
// https://github.com/angular/angular/issues/15360
// For the time being, the ViewContainerRef approach works pretty well.
-import * as _ from 'lodash';
import {
Component,
Inject,
- AfterViewInit,
+ OnInit,
ViewChild,
ViewContainerRef,
ComponentFactoryResolver,
OnDestroy,
EventEmitter,
SimpleChanges,
- SimpleChange
+ SimpleChange,
} from '@angular/core';
import { STORY } from '../app.token';
import { NgStory, ICollection } from '../types';
@Component({
selector: 'storybook-dynamic-app-root',
- template: ' '
+ template: ' ',
})
-export class AppComponent implements AfterViewInit, OnDestroy {
+export class AppComponent implements OnInit, OnDestroy {
@ViewChild('target', { read: ViewContainerRef })
target: ViewContainerRef;
- constructor(
- private cfr: ComponentFactoryResolver,
- @Inject(STORY) private data: NgStory
- ) {}
+ constructor(private cfr: ComponentFactoryResolver, @Inject(STORY) private data: NgStory) {}
- ngAfterViewInit(): void {
+ ngOnInit(): void {
this.putInMyHtml();
}
@@ -49,20 +45,20 @@ export class AppComponent implements AfterViewInit, OnDestroy {
/**
* Set inputs and outputs
*/
- private setProps(instance: any, {props = {}, propsMeta = {}}: NgStory): void {
+ private setProps(instance: any, { props = {} }: NgStory): void {
const changes: SimpleChanges = {};
- const hasNgOnChangesHook = _.has(instance, 'ngOnChanges');
+ const hasNgOnChangesHook = !!instance['ngOnChanges'];
- _.forEach(propsMeta, (meta, key) => {
+ Object.keys(props).map((key: string) => {
const value = props[key];
- const instanceProperty = _.get(instance, key);
+ const instanceProperty = instance[key];
- if (!(instanceProperty instanceof EventEmitter) && !_.isUndefined(value)) {
- _.set(instance, key, value);
+ if (!(instanceProperty instanceof EventEmitter) && !!value) {
+ instance[key] = value;
if (hasNgOnChangesHook) {
changes[key] = new SimpleChange(undefined, value, instanceProperty === undefined);
}
- } else if (_.isFunction(value) && (key !== 'ngModelChange')) {
+ } else if (typeof value === 'function' && key !== 'ngModelChange') {
instanceProperty.subscribe(value);
}
});
@@ -76,8 +72,8 @@ export class AppComponent implements AfterViewInit, OnDestroy {
* Issue: [https://github.com/angular/angular/issues/8903]
*/
private callNgOnChangesHook(instance: any, changes: SimpleChanges): void {
- if (!_.isEmpty(changes)) {
- _.invoke(instance, 'ngOnChanges', changes);
+ if (!!Object.keys(changes).length) {
+ instance.ngOnChanges(changes);
}
}
@@ -85,12 +81,12 @@ export class AppComponent implements AfterViewInit, OnDestroy {
* If component implements ControlValueAccessor interface try to set ngModel
*/
private setNgModel(instance: any, props: ICollection): void {
- if (_.has(props, 'ngModel')) {
- _.invoke(instance, 'writeValue', props.ngModel);
+ if (!!props['ngModel']) {
+ instance.writeValue(props.ngModel);
}
- if (_.isFunction(props.ngModelChange)) {
- _.invoke(instance, 'registerOnChange', props.ngModelChange);
+ if (typeof props.ngModelChange === 'function') {
+ instance.registerOnChange(props.ngModelChange);
}
}
}
diff --git a/app/angular/src/client/preview/angular/components/error.component.ts b/app/angular/src/client/preview/angular/components/error.component.ts
index e5c2588036d..f19d679b11c 100644
--- a/app/angular/src/client/preview/angular/components/error.component.ts
+++ b/app/angular/src/client/preview/angular/components/error.component.ts
@@ -1,6 +1,6 @@
-import { Component, Inject } from "@angular/core";
-import { STORY } from "../app.token";
-import { NgError } from "../types";
+import { Component, Inject } from '@angular/core';
+import { STORY } from '../app.token';
+import { NgError } from '../types';
@Component({
selector: 'storybook-dynamic-app-root',
@@ -40,9 +40,9 @@ import { NgError } from "../types";
width: 100vw;
overflow: auto;
}
- `
- ]
+ `,
+ ],
})
export class ErrorComponent {
constructor(@Inject(STORY) public error: NgError) {}
-}
\ No newline at end of file
+}
diff --git a/app/angular/src/client/preview/angular/components/no-preview.component.ts b/app/angular/src/client/preview/angular/components/no-preview.component.ts
index 73a0d0c205e..3e220b28cc2 100644
--- a/app/angular/src/client/preview/angular/components/no-preview.component.ts
+++ b/app/angular/src/client/preview/angular/components/no-preview.component.ts
@@ -1,7 +1,7 @@
-import { Component } from "@angular/core";
+import { Component } from '@angular/core';
@Component({
selector: 'storybook-dynamic-app-root',
- template: "No Preview Available!
"
+ template: 'No Preview Available!
',
})
export class NoPreviewComponent {}
diff --git a/app/angular/src/client/preview/angular/helpers.ts b/app/angular/src/client/preview/angular/helpers.ts
index 847654083b6..68b1ec9e3eb 100644
--- a/app/angular/src/client/preview/angular/helpers.ts
+++ b/app/angular/src/client/preview/angular/helpers.ts
@@ -1,45 +1,35 @@
-import {
- Type,
- enableProdMode,
- NgModule,
- Component,
- NgModuleRef
-} from '@angular/core';
-import {FormsModule} from '@angular/forms';
-
+import { enableProdMode, NgModule, Component, NgModuleRef, Type } from '@angular/core';
+import { FormsModule } from '@angular/forms';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './components/app.component';
import { ErrorComponent } from './components/error.component';
import { NoPreviewComponent } from './components/no-preview.component';
import { STORY } from './app.token';
-import { getAnnotations, getParameters, getPropMetadata } from './utils';
-import { NgModuleMetadata, NgStory, IGetStoryWithContext, IContext, NgProvidedData } from './types';
+import {
+ NgModuleMetadata,
+ IGetStoryWithContext,
+ IContext,
+ NgProvidedData,
+ IRenderErrorFn,
+ IRenderStoryFn,
+} from './types';
let platform: any = null;
let promises: Promise>[] = [];
-type IRenderStoryFn = (story: IGetStoryWithContext, context: IContext, reRender?: boolean) => void;
-type IRenderErrorFn = (error: Error) => void;
-
-interface IModule extends Type {
- annotations: any[];
-}
-interface IComponent extends Type {
- annotations: any[];
- parameters: any[];
- propsMetadata: any[];
-}
-
// Taken from https://davidwalsh.name/javascript-debounce-function
// We don't want to pull underscore
-const debounce = (func: IRenderStoryFn | IRenderErrorFn,
- wait: number = 100,
- immediate: boolean = false): () => void => {
+const debounce = (
+ func: IRenderStoryFn | IRenderErrorFn,
+ wait: number = 100,
+ immediate: boolean = false
+): (() => void) => {
let timeout: any;
- return function () {
- const context = this, args = arguments;
- const later = function () {
+ return function() {
+ const context = this,
+ args = arguments;
+ const later = function() {
timeout = null;
if (!immediate) {
func.apply(context, args);
@@ -54,113 +44,57 @@ const debounce = (func: IRenderStoryFn | IRenderErrorFn,
};
};
-const getComponentMetadata = (
- { component, props = {}, propsMeta = {}, moduleMetadata = {
- imports: [],
- schemas: [],
- declarations: [],
- providers: []
- } }: NgStory
+const getModule = (
+ declarations: Array | any[]>,
+ entryComponents: Array | any[]>,
+ bootstrap: Array | any[]>,
+ data: NgProvidedData,
+ moduleMetadata: NgModuleMetadata
) => {
- if (!component || typeof component !== 'function') {
- throw new Error('No valid component provided');
- }
-
- const componentMetadata = getAnnotations(component)[0] || {};
- const propsMetadata = getPropMetadata(component);
- const paramsMetadata = getParameters(component);
-
- Object.keys(propsMeta).map(key => {
- (propsMetadata)[key] = (propsMeta)[key];
- });
-
- const {
- imports = [],
- schemas = [],
- declarations = [],
- providers = []
- } = moduleMetadata;
-
- return {
- component,
- props,
- componentMeta: componentMetadata,
- propsMeta: propsMetadata,
- params: paramsMetadata,
- moduleMeta: {
- imports,
- schemas,
- declarations,
- providers
- }
- };
-};
-
-const getAnnotatedComponent = (meta: NgModule,
- component: any,
- propsMeta: { [p: string]: any },
- params: any[]): IComponent => {
- const NewComponent: any = function NewComponent(...args: any[]) {
- component.call(this, ...args);
+ const moduleMeta = {
+ declarations: [...declarations, ...(moduleMetadata.declarations || [])],
+ imports: [BrowserModule, FormsModule, ...(moduleMetadata.imports || [])],
+ providers: [
+ { provide: STORY, useValue: Object.assign({}, data) },
+ ...(moduleMetadata.providers || []),
+ ],
+ entryComponents: [...entryComponents, ...(moduleMetadata.entryComponents || [])],
+ schemas: [...(moduleMetadata.schemas || [])],
+ bootstrap: [...bootstrap],
};
- NewComponent.prototype = Object.create(component.prototype);
- NewComponent.annotations = [new Component(meta)];
- NewComponent.parameters = params;
- NewComponent.propsMetadata = propsMeta;
+ const moduleClass = class DynamicModule {};
- return NewComponent;
+ return NgModule(moduleMeta)(moduleClass);
};
-const getModule = (declarations: Array | any[]>,
-entryComponents: Array | any[]>,
-bootstrap: Array | any[]>,
-data: NgProvidedData,
-moduleMetadata: NgModuleMetadata = {
- imports: [],
- schemas: [],
- declarations: [],
- providers: []
-}): IModule => {
- const moduleMeta = new NgModule({
- declarations: [...declarations, ...moduleMetadata.declarations],
- imports: [BrowserModule, FormsModule, ...moduleMetadata.imports],
- providers: [{ provide: STORY, useValue: Object.assign({}, data) }, ...moduleMetadata.providers],
- entryComponents: [...entryComponents],
- schemas: [...moduleMetadata.schemas],
- bootstrap: [...bootstrap]
- });
+const createComponentFromTemplate = (template: string): Function => {
+ const componentClass = class DynamicComponent {};
- const NewModule: any = function NewModule() {};
- (NewModule).annotations = [moduleMeta];
- return NewModule;
+ return Component({
+ template: template,
+ })(componentClass);
};
-const initModule = (currentStory: IGetStoryWithContext, context: IContext, reRender: boolean): IModule => {
- const {
- component,
- componentMeta,
- props,
- propsMeta,
- params,
- moduleMeta
- } = getComponentMetadata(currentStory(context));
+const initModule = (
+ currentStory: IGetStoryWithContext,
+ context: IContext,
+ reRender: boolean
+): Function => {
+ const storyObj = currentStory(context);
+ const { component, template, props, moduleMetadata = {} } = storyObj;
- if (!componentMeta) {
- throw new Error('No component metadata available');
+ let AnnotatedComponent;
+
+ if (template) {
+ AnnotatedComponent = createComponentFromTemplate(template);
+ } else {
+ AnnotatedComponent = component;
}
- const AnnotatedComponent = getAnnotatedComponent(
- componentMeta,
- component,
- propsMeta,
- [...params, ...moduleMeta.providers.map(provider => [provider])]
- );
-
const story = {
component: AnnotatedComponent,
props,
- propsMeta
};
return getModule(
@@ -168,11 +102,11 @@ const initModule = (currentStory: IGetStoryWithContext, context: IContext, reRen
[AnnotatedComponent],
[AppComponent],
story,
- moduleMeta
+ moduleMetadata
);
};
-const draw = (newModule: IModule, reRender: boolean = true): void => {
+const draw = (newModule: Function, reRender: boolean = true): void => {
if (!platform) {
try {
enableProdMode();
@@ -181,26 +115,25 @@ const draw = (newModule: IModule, reRender: boolean = true): void => {
platform = platformBrowserDynamic();
promises.push(platform.bootstrapModule(newModule));
} else {
- Promise.all(promises)
- .then((modules) => {
- modules.forEach(mod => mod.destroy());
+ Promise.all(promises).then(modules => {
+ modules.forEach(mod => mod.destroy());
- const body = document.body;
- const app = document.createElement('storybook-dynamic-app-root');
- body.appendChild(app);
- promises = [];
- promises.push(platform.bootstrapModule(newModule));
- });
+ const body = document.body;
+ const app = document.createElement('storybook-dynamic-app-root');
+ body.appendChild(app);
+ promises = [];
+ promises.push(platform.bootstrapModule(newModule));
+ });
}
};
export const renderNgError = debounce((error: Error) => {
const errorData = {
message: error.message,
- stack: error.stack
+ stack: error.stack,
};
- const Module = getModule([ErrorComponent], [], [ErrorComponent], errorData);
+ const Module = getModule([ErrorComponent], [], [ErrorComponent], errorData, {});
draw(Module);
});
@@ -212,8 +145,9 @@ export const renderNoPreview = debounce(() => {
[NoPreviewComponent],
{
message: 'No Preview available.',
- stack: ''
- }
+ stack: '',
+ },
+ {}
);
draw(Module);
diff --git a/app/angular/src/client/preview/angular/types.ts b/app/angular/src/client/preview/angular/types.ts
index ae1501e3e99..f24ab7beb2a 100644
--- a/app/angular/src/client/preview/angular/types.ts
+++ b/app/angular/src/client/preview/angular/types.ts
@@ -1,8 +1,9 @@
export interface NgModuleMetadata {
- declarations: Array;
- imports: Array;
- schemas: Array;
- providers: Array;
+ declarations?: Array;
+ entryComponents?: Array;
+ imports?: Array;
+ schemas?: Array;
+ providers?: Array;
}
export interface ICollection {
@@ -10,21 +11,29 @@ export interface ICollection {
}
export interface NgStory {
- component: any;
- props: ICollection;
- propsMeta: ICollection;
- moduleMetadata?: NgModuleMetadata;
+ component?: any;
+ props: ICollection;
+ propsMeta?: ICollection;
+ moduleMetadata?: NgModuleMetadata;
+ template?: string;
}
export interface NgError {
- message: string;
- stack: string;
+ message: string;
+ stack: string;
}
export type NgProvidedData = NgStory | NgError;
export interface IContext {
- [p: string]: any;
+ [p: string]: any;
}
export type IGetStoryWithContext = (context: IContext) => NgStory;
+
+export type IRenderStoryFn = (
+ story: IGetStoryWithContext,
+ context: IContext,
+ reRender?: boolean
+) => void;
+export type IRenderErrorFn = (error: Error) => void;
diff --git a/app/angular/src/client/preview/angular/utils.ts b/app/angular/src/client/preview/angular/utils.ts
deleted file mode 100644
index fe83324fa0d..00000000000
--- a/app/angular/src/client/preview/angular/utils.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { ɵReflectionCapabilities } from '@angular/core';
-
-const reflectionCapabilities = new ɵReflectionCapabilities();
-
-function getMeta(component: any, [name1, name2]: any, defaultValue: any) {
- if (!name2) {
- name2 = name1;
- name1 = `__${name1}__`;
- }
-
- if (component[name1]) {
- return component[name1];
- }
-
- if (component[name2]) {
- return component[name2];
- }
-
- return (window)['Reflect'].getMetadata(name2, component) || defaultValue;
-}
-
-export function getAnnotations(component: any) {
- return getMeta(component, ['annotations'], []);
-}
-
-export function getPropMetadata(component: any) {
- return getMeta(component, ['__prop__metadata__', 'propMetadata'], {});
-}
-
-export function getParameters(component: any) {
- const params = reflectionCapabilities.parameters(component);
-
- if (!params || !params[0]) {
- return getMeta(component, ['parameters'], []);
- }
-
- return params;
-}
\ No newline at end of file
diff --git a/app/angular/src/demo/button.component.ts b/app/angular/src/demo/button.component.ts
index cc03d44f743..bb292c9793a 100644
--- a/app/angular/src/demo/button.component.ts
+++ b/app/angular/src/demo/button.component.ts
@@ -1,12 +1,12 @@
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
- selector: 'button-component',
+ selector: 'storybook-button-component',
template: `
{{ text }}
`,
styles: [
- `
+ `
button {
border: 1px solid #eee;
border-radius: 3px;
@@ -16,10 +16,10 @@ import { Component, Input, Output, EventEmitter } from '@angular/core';
padding: 3px 10px;
margin: 10px;
}
- `
- ]
+ `,
+ ],
})
export default class ButtonComponent {
- @Input() text = '';
- @Output() onClick = new EventEmitter();
-}
\ No newline at end of file
+ @Input() text = '';
+ @Output() onClick = new EventEmitter();
+}
diff --git a/app/angular/src/demo/welcome.component.ts b/app/angular/src/demo/welcome.component.ts
index 99c240ce566..ca7a7c2f9fb 100644
--- a/app/angular/src/demo/welcome.component.ts
+++ b/app/angular/src/demo/welcome.component.ts
@@ -1,7 +1,7 @@
import { Component } from '@angular/core';
@Component({
- selector: 'welcome-component',
+ selector: 'storybook-welcome-component',
template: `
Welcome to storybook
@@ -15,7 +15,8 @@ import { Component } from '@angular/core';
(Basically a story is like a visual test case.)
- See these sample stories for a component called Button .
+ See these sample stories for a component called
+ Button .
Just like that, you can add your own components as stories.
@@ -38,12 +39,13 @@ import { Component } from '@angular/core';
NOTE:
- Have a look at the .storybook/webpack.config.js to add webpack loaders and plugins you are using in this project.
+ Have a look at the .storybook/webpack.config.js
+ to add webpack loaders and plugins you are using in this project.
`,
styles: [
- `
+ `
main {
margin: 15px;
max-width: 600;
@@ -71,9 +73,9 @@ import { Component } from '@angular/core';
border-bottom: 1px solid #1474f3;
padding-bottom: 2px;
}
- `
- ]
+ `,
+ ],
})
export default class WelcomeComponent {
- displayName = 'Welcome';
-}
\ No newline at end of file
+ displayName = 'Welcome';
+}
diff --git a/app/angular/src/server/build.js b/app/angular/src/server/build.js
index 74fc769d1a5..ea488da6a0e 100755
--- a/app/angular/src/server/build.js
+++ b/app/angular/src/server/build.js
@@ -56,7 +56,7 @@ shelljs.cp(path.resolve(__dirname, 'public/favicon.ico'), outputDir);
// Build the webpack configuration using the `baseConfig`
// custom `.babelrc` file and `webpack.config.js` files
// NOTE changes to env should be done before calling `getBaseConfig`
-const config = loadConfig('PRODUCTION', getBaseConfig(), configDir);
+const config = loadConfig('PRODUCTION', getBaseConfig(configDir), configDir);
config.output.path = path.resolve(outputDir);
// copy all static files
diff --git a/app/angular/src/server/config.js b/app/angular/src/server/config.js
index abe4257095b..dcf9e41ee5b 100644
--- a/app/angular/src/server/config.js
+++ b/app/angular/src/server/config.js
@@ -2,6 +2,7 @@
import fs from 'fs';
import path from 'path';
import loadBabelConfig from './babel_config';
+import loadTsConfig from './ts_config';
// avoid ESLint errors
const logger = console;
@@ -15,6 +16,9 @@ export default function(configType, baseConfig, configDir) {
const babelConfig = loadBabelConfig(configDir);
config.module.rules[0].query = babelConfig;
+ const tsOptions = loadTsConfig(configDir);
+ config.module.rules[1].loaders[0].options = tsOptions;
+
// Check whether a config.js file exists inside the storybook
// config directory and throw an error if it's not.
const storybookConfigPath = path.resolve(configDir, 'config.js');
diff --git a/app/angular/src/server/config/utils.js b/app/angular/src/server/config/utils.js
index 0236481efd7..fc73c38a37f 100644
--- a/app/angular/src/server/config/utils.js
+++ b/app/angular/src/server/config/utils.js
@@ -33,5 +33,3 @@ export function loadEnv(options = {}) {
'process.env': env,
};
}
-
-export const getConfigDir = () => process.env.SBCONFIG_CONFIG_DIR || './.storybook';
diff --git a/app/angular/src/server/config/webpack.config.js b/app/angular/src/server/config/webpack.config.js
index e479e77efd8..fccf87ea32e 100644
--- a/app/angular/src/server/config/webpack.config.js
+++ b/app/angular/src/server/config/webpack.config.js
@@ -4,19 +4,12 @@ import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import WatchMissingNodeModulesPlugin from './WatchMissingNodeModulesPlugin';
-import {
- getConfigDir,
- includePaths,
- excludePaths,
- nodeModulesPaths,
- loadEnv,
- nodePaths,
-} from './utils';
+import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils';
import babelLoaderConfig from './babel';
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
import { version } from '../../../package.json';
-export default function() {
+export default function(configDir) {
const config = {
devtool: 'cheap-module-source-map',
entry: {
@@ -37,7 +30,7 @@ export default function() {
filename: 'index.html',
chunks: ['manager'],
data: {
- managerHead: getManagerHeadHtml(getConfigDir()),
+ managerHead: getManagerHeadHtml(configDir),
version,
},
template: require.resolve('../index.html.ejs'),
@@ -46,7 +39,7 @@ export default function() {
filename: 'iframe.html',
excludeChunks: ['manager'],
data: {
- previewHead: getPreviewHeadHtml(getConfigDir()),
+ previewHead: getPreviewHeadHtml(configDir),
},
template: require.resolve('../iframe.html.ejs'),
}),
@@ -71,12 +64,21 @@ export default function() {
},
{
test: /\.ts?$/,
- loaders: [require.resolve('ts-loader'), require.resolve('angular2-template-loader')],
+ loaders: [
+ {
+ loader: require.resolve('ts-loader'),
+ },
+ require.resolve('angular2-template-loader'),
+ ],
},
{
- test: /\.(html|css)$/,
+ test: /\.html$/,
loader: 'raw-loader',
- exclude: /\.async\.(html|css)$/,
+ exclude: /\.async\.css$/,
+ },
+ {
+ test: /\.scss$/,
+ loaders: [require.resolve('raw-loader'), require.resolve('sass-loader')],
},
{
test: /\.md$/,
diff --git a/app/angular/src/server/config/webpack.config.prod.js b/app/angular/src/server/config/webpack.config.prod.js
index c06bc2a4286..4adf3deba0e 100644
--- a/app/angular/src/server/config/webpack.config.prod.js
+++ b/app/angular/src/server/config/webpack.config.prod.js
@@ -4,11 +4,11 @@ import UglifyJsPlugin from 'uglifyjs-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import babelLoaderConfig from './babel.prod';
-import { getConfigDir, includePaths, excludePaths, loadEnv, nodePaths } from './utils';
+import { includePaths, excludePaths, loadEnv, nodePaths } from './utils';
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
import { version } from '../../../package.json';
-export default function() {
+export default function(configDir) {
const entries = {
preview: [require.resolve('./polyfills'), require.resolve('./globals')],
manager: [require.resolve('./polyfills'), path.resolve(__dirname, '../../client/manager')],
@@ -32,7 +32,7 @@ export default function() {
filename: 'index.html',
chunks: ['manager'],
data: {
- managerHead: getManagerHeadHtml(getConfigDir()),
+ managerHead: getManagerHeadHtml(configDir),
version,
},
template: require.resolve('../index.html.ejs'),
@@ -41,7 +41,7 @@ export default function() {
filename: 'iframe.html',
excludeChunks: ['manager'],
data: {
- previewHead: getPreviewHeadHtml(getConfigDir()),
+ previewHead: getPreviewHeadHtml(configDir),
},
template: require.resolve('../iframe.html.ejs'),
}),
@@ -52,6 +52,9 @@ export default function() {
ie8: false,
mangle: false,
warnings: false,
+ compress: {
+ keep_fnames: true,
+ },
output: {
comments: false,
},
@@ -73,12 +76,21 @@ export default function() {
},
{
test: /\.ts?$/,
- loaders: [require.resolve('ts-loader'), require.resolve('angular2-template-loader')],
+ loaders: [
+ {
+ loader: require.resolve('ts-loader'),
+ },
+ require.resolve('angular2-template-loader'),
+ ],
},
{
- test: /\.(html|css)$/,
+ test: /\.html$/,
loader: 'raw-loader',
- exclude: /\.async\.(html|css)$/,
+ exclude: /\.async\.html$/,
+ },
+ {
+ test: /\.scss$/,
+ loaders: [require.resolve('raw-loader'), require.resolve('sass-loader')],
},
],
},
diff --git a/app/angular/src/server/index.js b/app/angular/src/server/index.js
index 9b82e9ac7a6..96234d9e0f8 100755
--- a/app/angular/src/server/index.js
+++ b/app/angular/src/server/index.js
@@ -120,8 +120,6 @@ if (!hasCustomFavicon) {
app.use(favicon(path.resolve(__dirname, 'public/favicon.ico')));
}
-// Build the webpack configuration using the `baseConfig`
-// custom `.babelrc` file and `webpack.config.js` files
const configDir = program.configDir || './.storybook';
// The repository info is sent to the storybook while running on
diff --git a/app/angular/src/server/middleware.js b/app/angular/src/server/middleware.js
index 7b84bc34349..28e8554bccf 100644
--- a/app/angular/src/server/middleware.js
+++ b/app/angular/src/server/middleware.js
@@ -17,7 +17,7 @@ export const webpackValid = new Promise((resolve, reject) => {
export default function(configDir) {
// Build the webpack configuration using the `getBaseConfig`
// custom `.babelrc` file and `webpack.config.js` files
- const config = loadConfig('DEVELOPMENT', getBaseConfig(), configDir);
+ const config = loadConfig('DEVELOPMENT', getBaseConfig(configDir), configDir);
const middlewareFn = getMiddleware(configDir);
// remove the leading '/'
diff --git a/app/angular/src/server/ts_config.js b/app/angular/src/server/ts_config.js
new file mode 100644
index 00000000000..cdf1106a2f3
--- /dev/null
+++ b/app/angular/src/server/ts_config.js
@@ -0,0 +1,27 @@
+import fs from 'fs';
+import path from 'path';
+
+// avoid ESLint errors
+const logger = console;
+
+function resolveTsConfig(tsConfigPath) {
+ if (!fs.existsSync(tsConfigPath)) {
+ return null;
+ }
+
+ logger.info('=> Found custom tsconfig.json');
+
+ return tsConfigPath;
+}
+
+export default function(configDir) {
+ const configFile = resolveTsConfig(path.resolve(configDir, 'tsconfig.json'));
+
+ if (!configFile) {
+ return {};
+ }
+
+ return {
+ configFile,
+ };
+}
diff --git a/app/angular/src/server/ts_config.test.js b/app/angular/src/server/ts_config.test.js
new file mode 100644
index 00000000000..2a00d1d212c
--- /dev/null
+++ b/app/angular/src/server/ts_config.test.js
@@ -0,0 +1,32 @@
+import loadTsConfig from './ts_config';
+
+// eslint-disable-next-line global-require
+jest.mock('fs', () => require('../../../../__mocks__/fs'));
+jest.mock('path', () => ({
+ resolve: () => 'tsconfig.json',
+}));
+
+const setupFiles = files => {
+ // eslint-disable-next-line no-underscore-dangle, global-require
+ require('fs').__setMockFiles(files);
+};
+
+describe('ts_config', () => {
+ it('should return the config with the path to the tsconfig.json', () => {
+ setupFiles({ 'tsconfig.json': '{}' });
+
+ const config = loadTsConfig('.foo');
+
+ expect(config).toEqual({
+ configFile: 'tsconfig.json',
+ });
+ });
+
+ it('should return empty object when there is no tsconfig.json', () => {
+ setupFiles({});
+
+ const config = loadTsConfig('.foo');
+
+ expect(config).toEqual({});
+ });
+});
diff --git a/app/polymer/.babelrc b/app/polymer/.babelrc
new file mode 100644
index 00000000000..845c3cf4d75
--- /dev/null
+++ b/app/polymer/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["env", "stage-0", "react"]
+}
diff --git a/app/polymer/.npmignore b/app/polymer/.npmignore
new file mode 100644
index 00000000000..329fc8d67ad
--- /dev/null
+++ b/app/polymer/.npmignore
@@ -0,0 +1,3 @@
+docs
+src
+.babelrc
diff --git a/app/polymer/README.md b/app/polymer/README.md
new file mode 100644
index 00000000000..9f3492f09bf
--- /dev/null
+++ b/app/polymer/README.md
@@ -0,0 +1,41 @@
+# Storybook for Polymer
+
+[](https://circleci.com/gh/storybooks/storybook)
+[](https://www.codefactor.io/repository/github/storybooks/storybook)
+[](https://snyk.io/test/github/storybooks/storybook/8f36abfd6697e58cd76df3526b52e4b9dc894847)
+[](https://bettercodehub.com/results/storybooks/storybook) [](https://codecov.io/gh/storybooks/storybook)
+[](https://now-examples-slackin-nqnzoygycp.now.sh/)
+[](#backers) [](#sponsors)
+
+* * *
+
+Storybook for polymer is a UI development environment for your Polymer components.
+With it, you can visualize different states of your UI components and develop them interactively.
+
+> Storybook for Polymer is at the **EXPERIMENTAL** stage!
+
+
+
+Storybook runs outside of your app.
+So you can develop UI components in isolation without worrying about app specific dependencies and requirements.
+
+## Getting Started
+
+```sh
+npm i -g @storybook/cli
+cd my-polymer-app
+getstorybook
+```
+
+For more information visit: [storybook.js.org](https://storybook.js.org)
+
+* * *
+
+Storybook also comes with a lot of [addons](https://storybook.js.org/addons/introduction) and a great API to customize as you wish.
+You can also build a [static version](https://storybook.js.org/basics/exporting-storybook) of your storybook and deploy it anywhere you want.
+
+## Polymer Notes
+
+- This is super super experimental, if you want to use this, expect some bugs, and missing features.
+- We're looking for help to support this. If you're a member of the Polymer community and like this project, please help us!
+ If you need any onboarding from us, we're happy to help you in any way!
diff --git a/app/polymer/bin/build.js b/app/polymer/bin/build.js
new file mode 100755
index 00000000000..780773c6cd3
--- /dev/null
+++ b/app/polymer/bin/build.js
@@ -0,0 +1,3 @@
+#!/usr/bin/env node
+
+require('../dist/server/build');
diff --git a/app/polymer/bin/index.js b/app/polymer/bin/index.js
new file mode 100755
index 00000000000..2e96258ce63
--- /dev/null
+++ b/app/polymer/bin/index.js
@@ -0,0 +1,3 @@
+#!/usr/bin/env node
+
+require('../dist/server');
diff --git a/app/polymer/docs/demo.gif b/app/polymer/docs/demo.gif
new file mode 100644
index 00000000000..c8366f8534a
Binary files /dev/null and b/app/polymer/docs/demo.gif differ
diff --git a/app/polymer/docs/react_storybook_screenshot.png b/app/polymer/docs/react_storybook_screenshot.png
new file mode 100644
index 00000000000..9763382042b
Binary files /dev/null and b/app/polymer/docs/react_storybook_screenshot.png differ
diff --git a/app/polymer/docs/storybooks_io_logo.png b/app/polymer/docs/storybooks_io_logo.png
new file mode 100644
index 00000000000..3dd9b09f3a9
Binary files /dev/null and b/app/polymer/docs/storybooks_io_logo.png differ
diff --git a/app/polymer/package.json b/app/polymer/package.json
new file mode 100644
index 00000000000..e913f6153a5
--- /dev/null
+++ b/app/polymer/package.json
@@ -0,0 +1,87 @@
+{
+ "name": "@storybook/polymer",
+ "version": "3.4.0-alpha.4",
+ "description": "Storybook for Polymer: Develop Polymer components in isolation with Hot Reloading.",
+ "homepage": "https://github.com/storybooks/storybook/tree/master/apps/polymer",
+ "bugs": {
+ "url": "https://github.com/storybooks/storybook/issues"
+ },
+ "license": "MIT",
+ "main": "dist/client/index.js",
+ "bin": {
+ "build-storybook": "./bin/build.js",
+ "start-storybook": "./bin/index.js",
+ "storybook-server": "./bin/index.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/storybooks/storybook.git"
+ },
+ "scripts": {
+ "dev": "DEV_BUILD=1 nodemon --watch ./src --exec 'yarn prepare'",
+ "prepare": "node ../../scripts/prepare.js"
+ },
+ "dependencies": {
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/channel-postmessage": "^3.4.0-alpha.4",
+ "@storybook/client-logger": "^3.4.0-alpha.4",
+ "@storybook/core": "^3.4.0-alpha.4",
+ "@storybook/node-logger": "^3.4.0-alpha.4",
+ "@storybook/ui": "^3.4.0-alpha.4",
+ "@webcomponents/webcomponentsjs": "^1.0.17",
+ "airbnb-js-shims": "^1.3.0",
+ "autoprefixer": "^7.1.6",
+ "babel-core": "^6.26.0",
+ "babel-loader": "^7.1.2",
+ "babel-plugin-react-docgen": "^1.8.0",
+ "babel-plugin-transform-regenerator": "^6.26.0",
+ "babel-plugin-transform-runtime": "^6.23.0",
+ "babel-polyfill": "^6.26.0",
+ "babel-preset-env": "^1.6.0",
+ "babel-preset-minify": "^0.2.0",
+ "babel-preset-react": "^6.24.1",
+ "babel-preset-react-app": "^3.1.0",
+ "babel-preset-stage-0": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "case-sensitive-paths-webpack-plugin": "^2.1.1",
+ "chalk": "^2.3.0",
+ "commander": "^2.11.0",
+ "common-tags": "^1.4.0",
+ "configstore": "^3.1.1",
+ "copy-webpack-plugin": "^4.2.0",
+ "core-js": "^2.5.1",
+ "css-loader": "^0.28.7",
+ "express": "^4.16.2",
+ "file-loader": "^0.11.2",
+ "find-cache-dir": "^1.0.0",
+ "global": "^4.3.2",
+ "html-webpack-plugin": "^2.30.1",
+ "json-loader": "^0.5.7",
+ "json-stringify-safe": "^5.0.1",
+ "json5": "^0.5.1",
+ "lodash.pick": "^4.4.0",
+ "polymer-webpack-loader": "2.0.1",
+ "postcss-flexbugs-fixes": "^3.2.0",
+ "postcss-loader": "^2.0.8",
+ "prop-types": "^15.6.0",
+ "qs": "^6.5.1",
+ "react": "^16.0.0",
+ "react-dom": "^16.0.0",
+ "react-modal": "^2.4.1",
+ "redux": "^3.7.2",
+ "request": "^2.83.0",
+ "serve-favicon": "^2.4.5",
+ "shelljs": "^0.7.8",
+ "style-loader": "^0.18.2",
+ "url-loader": "^0.6.2",
+ "util-deprecate": "^1.0.2",
+ "uuid": "^3.1.0",
+ "webpack": "^3.6.0",
+ "webpack-dev-middleware": "^1.12.0",
+ "webpack-hot-middleware": "^2.20.0"
+ },
+ "devDependencies": {
+ "babel-cli": "^6.26.0",
+ "nodemon": "^1.12.1"
+ }
+}
diff --git a/app/polymer/src/client/index.js b/app/polymer/src/client/index.js
new file mode 100644
index 00000000000..4d19c3fb217
--- /dev/null
+++ b/app/polymer/src/client/index.js
@@ -0,0 +1,17 @@
+// import deprecate from 'util-deprecate';
+
+// NOTE export these to keep backwards compatibility
+// import { action as deprecatedAction } from '@storybook/addon-actions';
+// import { linkTo as deprecatedLinkTo } from '@storybook/addon-links';
+
+export { storiesOf, setAddon, addDecorator, configure, getStorybook } from './preview';
+
+// export const action = deprecate(
+// deprecatedAction,
+// '@storybook/react action is deprecated. See: https://github.com/storybooks/storybook/tree/master/addons/actions'
+// );
+
+// export const linkTo = deprecate(
+// deprecatedLinkTo,
+// '@storybook/react linkTo is deprecated. See: https://github.com/storybooks/storybook/tree/master/addons/links'
+// );
diff --git a/app/polymer/src/client/manager/index.js b/app/polymer/src/client/manager/index.js
new file mode 100644
index 00000000000..24082de7ca5
--- /dev/null
+++ b/app/polymer/src/client/manager/index.js
@@ -0,0 +1,7 @@
+/* global document */
+
+import renderStorybookUI from '@storybook/ui';
+import Provider from './provider';
+
+const rootEl = document.getElementById('root');
+renderStorybookUI(rootEl, new Provider());
diff --git a/app/polymer/src/client/manager/preview.js b/app/polymer/src/client/manager/preview.js
new file mode 100644
index 00000000000..4f8e792d964
--- /dev/null
+++ b/app/polymer/src/client/manager/preview.js
@@ -0,0 +1,39 @@
+import PropTypes from 'prop-types';
+import React, { Component } from 'react';
+
+const iframeStyle = {
+ width: '100%',
+ height: '100%',
+ border: 0,
+ margin: 0,
+ padding: 0,
+};
+
+class Preview extends Component {
+ shouldComponentUpdate() {
+ // When the manager is re-rendered, due to changes in the layout (going full screen / changing
+ // addon panel to right) Preview section will update. If its re-rendered the whole html page
+ // inside the html is re-rendered making the story to re-mount.
+ // We dont have to re-render this component for any reason since changes are communicated to
+ // story using the channel and necessary changes are done by it.
+ return false;
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+Preview.propTypes = {
+ url: PropTypes.string.isRequired,
+};
+
+export default Preview;
diff --git a/app/polymer/src/client/manager/provider.js b/app/polymer/src/client/manager/provider.js
new file mode 100644
index 00000000000..84e75d88f88
--- /dev/null
+++ b/app/polymer/src/client/manager/provider.js
@@ -0,0 +1,51 @@
+import { location } from 'global';
+import qs from 'qs';
+import React from 'react';
+import { Provider } from '@storybook/ui';
+import addons from '@storybook/addons';
+import createChannel from '@storybook/channel-postmessage';
+import Preview from './preview';
+
+export default class ReactProvider extends Provider {
+ constructor() {
+ super();
+ this.channel = createChannel({ page: 'manager' });
+ addons.setChannel(this.channel);
+ }
+
+ getPanels() {
+ return addons.getPanels();
+ }
+
+ renderPreview(selectedKind, selectedStory) {
+ const queryParams = {
+ selectedKind,
+ selectedStory,
+ };
+
+ // Add the react-perf query string to the iframe if that present.
+ if (/react_perf/.test(location.search)) {
+ queryParams.react_perf = '1';
+ }
+
+ const queryString = qs.stringify(queryParams);
+ const url = `iframe.html?${queryString}`;
+ return ;
+ }
+
+ handleAPI(api) {
+ api.onStory((kind, story) => {
+ this.channel.emit('setCurrentStory', { kind, story });
+ });
+ this.channel.on('setStories', data => {
+ api.setStories(data.stories);
+ });
+ this.channel.on('selectStory', data => {
+ api.selectStory(data.kind, data.story);
+ });
+ this.channel.on('applyShortcut', data => {
+ api.handleShortcut(data.event);
+ });
+ addons.loadAddons(api);
+ }
+}
diff --git a/app/polymer/src/client/preview/errorpreview.js b/app/polymer/src/client/preview/errorpreview.js
new file mode 100644
index 00000000000..f48860b554b
--- /dev/null
+++ b/app/polymer/src/client/preview/errorpreview.js
@@ -0,0 +1,37 @@
+export const errorpreview = (message, stack) => `
+
+
+
${message}
+
+
+ ${stack}
+
+
+
+`;
diff --git a/app/polymer/src/client/preview/index.js b/app/polymer/src/client/preview/index.js
new file mode 100644
index 00000000000..2d7bfe85f32
--- /dev/null
+++ b/app/polymer/src/client/preview/index.js
@@ -0,0 +1,61 @@
+import { createStore } from 'redux';
+import addons from '@storybook/addons';
+import { navigator, window } from 'global';
+import createChannel from '@storybook/channel-postmessage';
+import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events';
+import {
+ StoryStore,
+ ClientApi,
+ ConfigApi,
+ Actions,
+ reducer,
+ syncUrlWithStore,
+} from '@storybook/core/client';
+
+import render from './render';
+
+// check whether we're running on node/browser
+const isBrowser =
+ navigator &&
+ navigator.userAgent &&
+ navigator.userAgent !== 'storyshots' &&
+ !(navigator.userAgent.indexOf('Node.js') > -1) &&
+ !(navigator.userAgent.indexOf('jsdom') > -1);
+
+const storyStore = new StoryStore();
+/* eslint-disable no-underscore-dangle */
+const reduxStore = createStore(reducer);
+/* eslint-enable */
+const context = { storyStore, reduxStore };
+
+if (isBrowser) {
+ // setup preview channel
+ const channel = createChannel({ page: 'preview' });
+ channel.on('setCurrentStory', data => {
+ reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
+ });
+ addons.setChannel(channel);
+ Object.assign(context, { channel });
+
+ syncUrlWithStore(reduxStore);
+
+ // Handle keyboard shortcuts
+ window.onkeydown = handleKeyboardShortcuts(channel);
+}
+
+const clientApi = new ClientApi(context);
+export const { storiesOf, setAddon, addDecorator, clearDecorators, getStorybook } = clientApi;
+
+const configApi = new ConfigApi({ clearDecorators, ...context });
+export const { configure } = configApi;
+
+// initialize the UI
+const renderUI = () => {
+ if (isBrowser) {
+ render(context);
+ }
+};
+
+reduxStore.subscribe(renderUI);
+
+export const forceReRender = () => render(context, true);
diff --git a/app/polymer/src/client/preview/nopreview.js b/app/polymer/src/client/preview/nopreview.js
new file mode 100644
index 00000000000..688d93cc8e4
--- /dev/null
+++ b/app/polymer/src/client/preview/nopreview.js
@@ -0,0 +1,42 @@
+export const nopreview = `
+
+
+
+
No Preview
+
Sorry, but you either have no stories or none are selected somehow.
+
+ Please check the storybook config.
+ Try reloading the page.
+
+
+
+`;
diff --git a/app/polymer/src/client/preview/render.js b/app/polymer/src/client/preview/render.js
new file mode 100644
index 00000000000..7087e278e43
--- /dev/null
+++ b/app/polymer/src/client/preview/render.js
@@ -0,0 +1,66 @@
+import { document } from 'global';
+import { stripIndents } from 'common-tags';
+import { logger } from '@storybook/client-logger';
+import { nopreview } from './nopreview';
+import { errorpreview } from './errorpreview';
+
+let previousKind = '';
+let previousStory = '';
+
+const rootElement = document.getElementById('root');
+
+export function renderError(error) {
+ rootElement.innerHTML = errorpreview(error.message, error.stack);
+}
+
+export function renderException(error) {
+ renderError(error);
+ logger.error(error.stack);
+}
+
+export function renderMain(data, storyStore) {
+ if (storyStore.size() === 0) return;
+ const { selectedKind, selectedStory } = data;
+ const story = storyStore.getStory(selectedKind, selectedStory);
+
+ if (selectedKind !== previousKind || previousStory !== selectedStory) {
+ previousKind = selectedKind;
+ previousStory = selectedStory;
+ } else {
+ return;
+ }
+ const context = {
+ kind: selectedKind,
+ story: selectedStory,
+ };
+ const component = story ? story(context) : nopreview;
+
+ if (!component) {
+ renderError({
+ message: `Expecting a Polymer component from the story: "${selectedStory}" of "${selectedKind}".`,
+ stack: stripIndents`
+ Did you forget to return the Polymer component from the story?
+ Use "() => '<your-component-name></your-component-name\>'" when defining the story.
+ `,
+ });
+ return;
+ }
+ if (typeof component === 'string') {
+ rootElement.innerHTML = component;
+ } else {
+ rootElement.innerHTML = '';
+ rootElement.appendChild(component);
+ }
+}
+
+export default function renderPreview({ reduxStore, storyStore }) {
+ const state = reduxStore.getState();
+ if (state.error) {
+ return renderException(state.error);
+ }
+ try {
+ return renderMain(state, storyStore);
+ } catch (ex) {
+ return renderException(ex);
+ }
+}
diff --git a/app/polymer/src/server/addons.js b/app/polymer/src/server/addons.js
new file mode 100644
index 00000000000..280e2ac1365
--- /dev/null
+++ b/app/polymer/src/server/addons.js
@@ -0,0 +1,2 @@
+// import '@storybook/addon-actions/register';
+// import '@storybook/addon-links/register';
diff --git a/app/polymer/src/server/babel_config.js b/app/polymer/src/server/babel_config.js
new file mode 100644
index 00000000000..f5294fe1ca5
--- /dev/null
+++ b/app/polymer/src/server/babel_config.js
@@ -0,0 +1,82 @@
+import fs from 'fs';
+import path from 'path';
+import JSON5 from 'json5';
+import { logger } from '@storybook/node-logger';
+import defaultConfig from './config/babel';
+
+function removeReactHmre(presets) {
+ const index = presets.indexOf('react-hmre');
+ if (index > -1) {
+ presets.splice(index, 1);
+ }
+}
+
+// Tries to load a .babelrc and returns the parsed object if successful
+function loadFromPath(babelConfigPath) {
+ let config;
+ if (fs.existsSync(babelConfigPath)) {
+ const content = fs.readFileSync(babelConfigPath, 'utf-8');
+ try {
+ config = JSON5.parse(content);
+ config.babelrc = false;
+ logger.info('=> Loading custom .babelrc');
+ } catch (e) {
+ logger.error(`=> Error parsing .babelrc file: ${e.message}`);
+ throw e;
+ }
+ }
+
+ if (!config) return null;
+
+ // Remove react-hmre preset.
+ // It causes issues with react-storybook.
+ // We don't really need it.
+ // Earlier, we fix this by running storybook in the production mode.
+ // But, that hide some useful debug messages.
+ if (config.presets) {
+ removeReactHmre(config.presets);
+ }
+
+ if (config.env && config.env.development && config.env.development.presets) {
+ removeReactHmre(config.env.development.presets);
+ }
+
+ return config;
+}
+
+export default function(configDir) {
+ let babelConfig = loadFromPath(path.resolve(configDir, '.babelrc'));
+ let inConfigDir = true;
+
+ if (!babelConfig) {
+ babelConfig = loadFromPath('.babelrc');
+ inConfigDir = false;
+ }
+
+ if (babelConfig) {
+ // If the custom config uses babel's `extends` clause, then replace it with
+ // an absolute path. `extends` will not work unless we do this.
+ if (babelConfig.extends) {
+ babelConfig.extends = inConfigDir
+ ? path.resolve(configDir, babelConfig.extends)
+ : path.resolve(babelConfig.extends);
+ }
+ }
+
+ const finalConfig = babelConfig || defaultConfig;
+ // Ensure plugins are defined or fallback to an array to avoid empty values.
+ const babelConfigPlugins = finalConfig.plugins || [];
+ const extraPlugins = [
+ [
+ require.resolve('babel-plugin-react-docgen'),
+ {
+ DOC_GEN_COLLECTION_NAME: 'STORYBOOK_REACT_CLASSES',
+ },
+ ],
+ ];
+ // If `babelConfigPlugins` is not an `Array`, calling `concat` will inject it
+ // as a single value, if it is an `Array` it will be spreaded.
+ finalConfig.plugins = [].concat(babelConfigPlugins, extraPlugins);
+
+ return finalConfig;
+}
diff --git a/app/polymer/src/server/babel_config.test.js b/app/polymer/src/server/babel_config.test.js
new file mode 100644
index 00000000000..ba991adcd4e
--- /dev/null
+++ b/app/polymer/src/server/babel_config.test.js
@@ -0,0 +1,110 @@
+import loadBabelConfig from './babel_config';
+
+// eslint-disable-next-line global-require
+jest.mock('fs', () => require('../../../../__mocks__/fs'));
+jest.mock('path', () => ({
+ resolve: () => '.babelrc',
+}));
+
+const setup = ({ files }) => {
+ // eslint-disable-next-line no-underscore-dangle, global-require
+ require('fs').__setMockFiles(files);
+};
+
+describe('babel_config', () => {
+ // As the 'fs' is going to be mocked, let's call require.resolve
+ // so the require.cache has the correct route to the file.
+ // In fact let's use it in the tests :)
+ const babelPluginReactDocgenPath = require.resolve('babel-plugin-react-docgen');
+
+ it('should return the config with the extra plugins when `plugins` is an array.', () => {
+ setup({
+ files: {
+ '.babelrc': `{
+ "presets": [
+ "env",
+ "foo-preset"
+ ],
+ "plugins": [
+ "foo-plugin"
+ ]
+ }`,
+ },
+ });
+
+ const config = loadBabelConfig('.foo');
+
+ expect(config).toEqual({
+ babelrc: false,
+ plugins: [
+ 'foo-plugin',
+ [
+ babelPluginReactDocgenPath,
+ {
+ DOC_GEN_COLLECTION_NAME: 'STORYBOOK_REACT_CLASSES',
+ },
+ ],
+ ],
+ presets: ['env', 'foo-preset'],
+ });
+ });
+
+ it('should return the config with the extra plugins when `plugins` is not an array.', () => {
+ setup({
+ files: {
+ '.babelrc': `{
+ "presets": [
+ "env",
+ "foo-preset"
+ ],
+ "plugins": "bar-plugin"
+ }`,
+ },
+ });
+
+ const config = loadBabelConfig('.bar');
+
+ expect(config).toEqual({
+ babelrc: false,
+ plugins: [
+ 'bar-plugin',
+ [
+ babelPluginReactDocgenPath,
+ {
+ DOC_GEN_COLLECTION_NAME: 'STORYBOOK_REACT_CLASSES',
+ },
+ ],
+ ],
+ presets: ['env', 'foo-preset'],
+ });
+ });
+
+ it('should return the config only with the extra plugins when `plugins` is not present.', () => {
+ // Mock a `.babelrc` config file with no plugins key.
+ setup({
+ files: {
+ '.babelrc': `{
+ "presets": [
+ "env",
+ "foo-preset"
+ ]
+ }`,
+ },
+ });
+
+ const config = loadBabelConfig('.biz');
+
+ expect(config).toEqual({
+ babelrc: false,
+ plugins: [
+ [
+ babelPluginReactDocgenPath,
+ {
+ DOC_GEN_COLLECTION_NAME: 'STORYBOOK_REACT_CLASSES',
+ },
+ ],
+ ],
+ presets: ['env', 'foo-preset'],
+ });
+ });
+});
diff --git a/app/polymer/src/server/build.js b/app/polymer/src/server/build.js
new file mode 100755
index 00000000000..b5ea935842c
--- /dev/null
+++ b/app/polymer/src/server/build.js
@@ -0,0 +1,83 @@
+import webpack from 'webpack';
+import program from 'commander';
+import path from 'path';
+import fs from 'fs';
+import chalk from 'chalk';
+import shelljs from 'shelljs';
+import { logger } from '@storybook/node-logger';
+import packageJson from '../../package.json';
+import getBaseConfig from './config/webpack.config.prod';
+import loadConfig from './config';
+import { parseList, getEnvConfig } from './utils';
+
+process.env.NODE_ENV = process.env.NODE_ENV || 'production';
+
+program
+ .version(packageJson.version)
+ .option('-s, --static-dir ', 'Directory where to load static files from', parseList)
+ .option('-o, --output-dir [dir-name]', 'Directory where to store built files')
+ .option('-c, --config-dir [dir-name]', 'Directory where to load Storybook configurations from')
+ .option('-d, --db-path [db-file]', 'DEPRECATED!')
+ .option('--enable-db', 'DEPRECATED!')
+ .parse(process.argv);
+
+logger.info(chalk.bold(`${packageJson.name} v${packageJson.version}\n`));
+
+if (program.enableDb || program.dbPath) {
+ logger.error(
+ [
+ 'Error: the experimental local database addon is no longer bundled with',
+ 'react-storybook. Please remove these flags (-d,--db-path,--enable-db)',
+ 'from the command or npm script and try again.',
+ ].join(' ')
+ );
+ process.exit(1);
+}
+
+// The key is the field created in `program` variable for
+// each command line argument. Value is the env variable.
+getEnvConfig(program, {
+ staticDir: 'SBCONFIG_STATIC_DIR',
+ outputDir: 'SBCONFIG_OUTPUT_DIR',
+ configDir: 'SBCONFIG_CONFIG_DIR',
+});
+
+const configDir = program.configDir || './.storybook';
+const outputDir = program.outputDir || './storybook-static';
+
+// create output directory if not exists
+shelljs.mkdir('-p', path.resolve(outputDir));
+// clear the static dir
+shelljs.rm('-rf', path.resolve(outputDir, 'static'));
+shelljs.cp(path.resolve(__dirname, 'public/favicon.ico'), outputDir);
+
+// Build the webpack configuration using the `baseConfig`
+// custom `.babelrc` file and `webpack.config.js` files
+// NOTE changes to env should be done before calling `getBaseConfig`
+const config = loadConfig('PRODUCTION', getBaseConfig(), configDir);
+config.output.path = path.resolve(outputDir);
+
+// copy all static files
+if (program.staticDir) {
+ program.staticDir.forEach(dir => {
+ if (!fs.existsSync(dir)) {
+ logger.error(`Error: no such directory to load static files: ${dir}`);
+ process.exit(-1);
+ }
+ logger.log(`=> Copying static files from: ${dir}`);
+ shelljs.cp('-r', `${dir}/*`, outputDir);
+ });
+}
+
+// compile all resources with webpack and write them to the disk.
+logger.log('Building storybook ...');
+webpack(config).run((err, stats) => {
+ if (err || stats.hasErrors()) {
+ logger.error('Failed to build the storybook');
+ // eslint-disable-next-line no-unused-expressions
+ err && logger.error(err.message);
+ // eslint-disable-next-line no-unused-expressions
+ stats.hasErrors() && stats.toJson().errors.forEach(e => logger.error(e));
+ process.exit(1);
+ }
+});
diff --git a/app/polymer/src/server/config.js b/app/polymer/src/server/config.js
new file mode 100644
index 00000000000..1f5ba20ec0c
--- /dev/null
+++ b/app/polymer/src/server/config.js
@@ -0,0 +1,86 @@
+/* eslint-disable global-require, import/no-dynamic-require */
+import fs from 'fs';
+import path from 'path';
+import findCacheDir from 'find-cache-dir';
+import { logger } from '@storybook/node-logger';
+import loadBabelConfig from './babel_config';
+
+// `baseConfig` is a webpack configuration bundled with storybook.
+// Storybook will look in the `configDir` directory
+// (inside working directory) if a config path is not provided.
+export default function(configType, baseConfig, configDir) {
+ const config = baseConfig;
+
+ const babelConfig = loadBabelConfig(configDir);
+ config.module.rules[0].query = {
+ // This is a feature of `babel-loader` for webpack (not Babel itself).
+ // It enables a cache directory for faster-rebuilds
+ // `find-cache-dir` will create the cache directory under the node_modules directory.
+ cacheDirectory: findCacheDir({ name: 'react-storybook' }),
+ ...babelConfig,
+ };
+
+ // Check whether a config.js file exists inside the storybook
+ // config directory and throw an error if it's not.
+ const storybookConfigPath = path.resolve(configDir, 'config.js');
+ if (!fs.existsSync(storybookConfigPath)) {
+ const err = new Error(`=> Create a storybook config file in "${configDir}/config.js".`);
+ throw err;
+ }
+ config.entry.preview.push(require.resolve(storybookConfigPath));
+
+ // Check whether addons.js file exists inside the storybook.
+ // Load the default addons.js file if it's missing.
+ // Insert it after polyfills.js, but before client/manager.
+ const storybookDefaultAddonsPath = path.resolve(__dirname, 'addons.js');
+ const storybookCustomAddonsPath = path.resolve(configDir, 'addons.js');
+ if (fs.existsSync(storybookCustomAddonsPath)) {
+ logger.info('=> Loading custom addons config.');
+ config.entry.manager.splice(1, 0, storybookCustomAddonsPath);
+ } else {
+ config.entry.manager.splice(1, 0, storybookDefaultAddonsPath);
+ }
+
+ // Check whether user has a custom webpack config file and
+ // return the (extended) base configuration if it's not available.
+ const customConfigPath = path.resolve(configDir, 'webpack.config.js');
+
+ if (!fs.existsSync(customConfigPath)) {
+ logger.info('=> Using default webpack setup based on "polymer-cli".');
+ const configPath = path.resolve(__dirname, './config/defaults/webpack.config.js');
+ const customConfig = require(configPath);
+
+ return customConfig(config);
+ }
+ const customConfig = require(customConfigPath);
+
+ if (typeof customConfig === 'function') {
+ logger.info('=> Loading custom webpack config (full-control mode).');
+ return customConfig(config, configType);
+ }
+ logger.info('=> Loading custom webpack config (extending mode).');
+ return {
+ ...customConfig,
+ // We'll always load our configurations after the custom config.
+ // So, we'll always load the stuff we need.
+ ...config,
+ // Override with custom devtool if provided
+ devtool: customConfig.devtool || config.devtool,
+ // We need to use our and custom plugins.
+ plugins: [...config.plugins, ...(customConfig.plugins || [])],
+ module: {
+ ...config.module,
+ // We need to use our and custom rules.
+ ...customConfig.module,
+ rules: [...config.module.rules, ...(customConfig.module.rules || [])],
+ },
+ resolve: {
+ ...config.resolve,
+ ...customConfig.resolve,
+ alias: {
+ ...config.alias,
+ ...(customConfig.resolve && customConfig.resolve.alias),
+ },
+ },
+ };
+}
diff --git a/app/polymer/src/server/config/WatchMissingNodeModulesPlugin.js b/app/polymer/src/server/config/WatchMissingNodeModulesPlugin.js
new file mode 100644
index 00000000000..962bbb97ff4
--- /dev/null
+++ b/app/polymer/src/server/config/WatchMissingNodeModulesPlugin.js
@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+// @remove-on-eject-end
+
+// This Webpack plugin ensures `npm install ` forces a project rebuild.
+// We’re not sure why this isn't Webpack's default behavior.
+// See https://github.com/facebookincubator/create-react-app/issues/186.
+
+function WatchMissingNodeModulesPlugin(nodeModulesPath) {
+ this.nodeModulesPath = nodeModulesPath;
+}
+
+WatchMissingNodeModulesPlugin.prototype.apply = function apply(compiler) {
+ compiler.plugin('emit', (compilation, callback) => {
+ const missingDeps = compilation.missingDependencies;
+ const { nodeModulesPath } = this;
+
+ // If any missing files are expected to appear in node_modules...
+ if (missingDeps.some(file => file.indexOf(nodeModulesPath) !== -1)) {
+ // ...tell webpack to watch node_modules recursively until they appear.
+ compilation.contextDependencies.push(nodeModulesPath);
+ }
+
+ callback();
+ });
+};
+
+module.exports = WatchMissingNodeModulesPlugin;
diff --git a/app/polymer/src/server/config/babel.js b/app/polymer/src/server/config/babel.js
new file mode 100644
index 00000000000..2f904b2e2fd
--- /dev/null
+++ b/app/polymer/src/server/config/babel.js
@@ -0,0 +1,28 @@
+module.exports = {
+ // Don't try to find .babelrc because we want to force this configuration.
+ babelrc: false,
+ presets: [
+ [
+ require.resolve('babel-preset-env'),
+ {
+ targets: {
+ browsers: ['last 2 versions', 'safari >= 7'],
+ },
+ modules: process.env.NODE_ENV === 'test' ? 'commonjs' : false,
+ },
+ ],
+ require.resolve('babel-preset-stage-0'),
+ require.resolve('babel-preset-react'),
+ ],
+ plugins: [
+ require.resolve('babel-plugin-transform-regenerator'),
+ [
+ require.resolve('babel-plugin-transform-runtime'),
+ {
+ helpers: true,
+ polyfill: true,
+ regenerator: true,
+ },
+ ],
+ ],
+};
diff --git a/app/polymer/src/server/config/babel.prod.js b/app/polymer/src/server/config/babel.prod.js
new file mode 100644
index 00000000000..59a87fe49bc
--- /dev/null
+++ b/app/polymer/src/server/config/babel.prod.js
@@ -0,0 +1,29 @@
+module.exports = {
+ // Don't try to find .babelrc because we want to force this configuration.
+ babelrc: false,
+ presets: [
+ [
+ require.resolve('babel-preset-env'),
+ {
+ targets: {
+ browsers: ['last 2 versions', 'safari >= 7'],
+ },
+ modules: false,
+ },
+ ],
+ require.resolve('babel-preset-stage-0'),
+ require.resolve('babel-preset-react'),
+ require.resolve('babel-preset-minify'),
+ ],
+ plugins: [
+ require.resolve('babel-plugin-transform-regenerator'),
+ [
+ require.resolve('babel-plugin-transform-runtime'),
+ {
+ helpers: true,
+ polyfill: true,
+ regenerator: true,
+ },
+ ],
+ ],
+};
diff --git a/app/polymer/src/server/config/defaults/webpack.config.js b/app/polymer/src/server/config/defaults/webpack.config.js
new file mode 100644
index 00000000000..477d1c4c62b
--- /dev/null
+++ b/app/polymer/src/server/config/defaults/webpack.config.js
@@ -0,0 +1,73 @@
+// import webpack from 'webpack';
+import autoprefixer from 'autoprefixer';
+import { includePaths } from '../utils';
+
+// Add a default custom config which is similar to what React Create App does.
+module.exports = storybookBaseConfig => {
+ const newConfig = { ...storybookBaseConfig };
+
+ newConfig.module.rules = [
+ ...storybookBaseConfig.module.rules,
+ {
+ test: /\.css$/,
+ use: [
+ require.resolve('style-loader'),
+ {
+ loader: require.resolve('css-loader'),
+ options: {
+ importLoaders: 1,
+ },
+ },
+ {
+ loader: require.resolve('postcss-loader'),
+ options: {
+ ident: 'postcss', // https://webpack.js.org/guides/migrating/#complex-options
+ plugins: () => [
+ require('postcss-flexbugs-fixes'), // eslint-disable-line
+ autoprefixer({
+ browsers: [
+ '>1%',
+ 'last 4 versions',
+ 'Firefox ESR',
+ 'not ie < 9', // React doesn't support IE8 anyway
+ ],
+ flexbox: 'no-2009',
+ }),
+ ],
+ },
+ },
+ ],
+ },
+ {
+ test: /\.json$/,
+ include: includePaths,
+ loader: require.resolve('json-loader'),
+ },
+ {
+ test: /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2)(\?.*)?$/,
+ include: includePaths,
+ loader: require.resolve('file-loader'),
+ query: {
+ name: 'static/media/[name].[hash:8].[ext]',
+ },
+ },
+ {
+ test: /\.(mp4|webm|wav|mp3|m4a|aac|oga)(\?.*)?$/,
+ include: includePaths,
+ loader: require.resolve('url-loader'),
+ query: {
+ limit: 10000,
+ name: 'static/media/[name].[hash:8].[ext]',
+ },
+ },
+ ];
+
+ newConfig.resolve.alias = {
+ ...storybookBaseConfig.resolve.alias,
+ // This is to support NPM2
+ 'babel-runtime/regenerator': require.resolve('babel-runtime/regenerator'),
+ };
+
+ // Return the altered config
+ return newConfig;
+};
diff --git a/app/polymer/src/server/config/globals.js b/app/polymer/src/server/config/globals.js
new file mode 100644
index 00000000000..94892efef4f
--- /dev/null
+++ b/app/polymer/src/server/config/globals.js
@@ -0,0 +1,4 @@
+/* globals window */
+
+window.STORYBOOK_REACT_CLASSES = {};
+window.STORYBOOK_ENV = 'polymer';
diff --git a/app/polymer/src/server/config/polyfills.js b/app/polymer/src/server/config/polyfills.js
new file mode 100644
index 00000000000..859cf64f3d7
--- /dev/null
+++ b/app/polymer/src/server/config/polyfills.js
@@ -0,0 +1,4 @@
+import 'core-js/es6/symbol';
+import 'core-js/fn/array/iterator';
+import 'airbnb-js-shims';
+import 'babel-polyfill';
diff --git a/app/polymer/src/server/config/utils.js b/app/polymer/src/server/config/utils.js
new file mode 100644
index 00000000000..0236481efd7
--- /dev/null
+++ b/app/polymer/src/server/config/utils.js
@@ -0,0 +1,37 @@
+import path from 'path';
+
+export const includePaths = [path.resolve('./')];
+
+export const excludePaths = [path.resolve('node_modules')];
+
+export const nodeModulesPaths = path.resolve('./node_modules');
+
+export const nodePaths = (process.env.NODE_PATH || '')
+ .split(process.platform === 'win32' ? ';' : ':')
+ .filter(Boolean)
+ .map(p => path.resolve('./', p));
+
+// Load environment variables starts with STORYBOOK_ to the client side.
+export function loadEnv(options = {}) {
+ const defaultNodeEnv = options.production ? 'production' : 'development';
+ const env = {
+ NODE_ENV: JSON.stringify(process.env.NODE_ENV || defaultNodeEnv),
+ // This is to support CRA's public folder feature.
+ // In production we set this to dot(.) to allow the browser to access these assests
+ // even when deployed inside a subpath. (like in GitHub pages)
+ // In development this is just empty as we always serves from the root.
+ PUBLIC_URL: JSON.stringify(options.production ? '.' : ''),
+ };
+
+ Object.keys(process.env)
+ .filter(name => /^STORYBOOK_/.test(name))
+ .forEach(name => {
+ env[name] = JSON.stringify(process.env[name]);
+ });
+
+ return {
+ 'process.env': env,
+ };
+}
+
+export const getConfigDir = () => process.env.SBCONFIG_CONFIG_DIR || './.storybook';
diff --git a/app/polymer/src/server/config/webpack.config.js b/app/polymer/src/server/config/webpack.config.js
new file mode 100644
index 00000000000..7ae0745582e
--- /dev/null
+++ b/app/polymer/src/server/config/webpack.config.js
@@ -0,0 +1,105 @@
+import path from 'path';
+import webpack from 'webpack';
+import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
+import HtmlWebpackPlugin from 'html-webpack-plugin';
+import CopyWebpackPlugin from 'copy-webpack-plugin';
+import WatchMissingNodeModulesPlugin from './WatchMissingNodeModulesPlugin';
+import {
+ getConfigDir,
+ includePaths,
+ excludePaths,
+ nodeModulesPaths,
+ loadEnv,
+ nodePaths,
+} from './utils';
+import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
+import babelLoaderConfig from './babel';
+import { version } from '../../../package.json';
+
+export default function() {
+ const config = {
+ devtool: 'cheap-module-source-map',
+ entry: {
+ manager: [require.resolve('./polyfills'), require.resolve('../../client/manager')],
+ preview: [
+ require.resolve('./polyfills'),
+ require.resolve('./globals'),
+ `${require.resolve('webpack-hot-middleware/client')}?reload=true`,
+ ],
+ },
+ output: {
+ path: path.join(__dirname, 'dist'),
+ filename: 'static/[name].bundle.js',
+ publicPath: '/',
+ },
+ plugins: [
+ new HtmlWebpackPlugin({
+ filename: 'index.html',
+ chunks: ['manager'],
+ data: {
+ managerHead: getManagerHeadHtml(getConfigDir()),
+ version,
+ },
+ template: require.resolve('../index.html.ejs'),
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'iframe.html',
+ excludeChunks: ['manager'],
+ data: {
+ previewHead: getPreviewHeadHtml(getConfigDir()),
+ },
+ template: require.resolve('../iframe.html.ejs'),
+ }),
+ new CopyWebpackPlugin([
+ { from: require.resolve('@webcomponents/webcomponentsjs/webcomponents-lite.js') },
+ { from: require.resolve('@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js') },
+ ]),
+ new webpack.DefinePlugin(loadEnv()),
+ new webpack.HotModuleReplacementPlugin(),
+ new CaseSensitivePathsPlugin(),
+ new WatchMissingNodeModulesPlugin(nodeModulesPaths),
+ new webpack.ProgressPlugin(),
+ ],
+ module: {
+ rules: [
+ {
+ test: /\.jsx?$/,
+ loader: require.resolve('babel-loader'),
+ query: babelLoaderConfig,
+ include: includePaths,
+ exclude: excludePaths,
+ },
+ {
+ test: /\.html$/,
+ use: [
+ {
+ loader: require.resolve('babel-loader'),
+ query: babelLoaderConfig,
+ },
+ {
+ loader: require.resolve('polymer-webpack-loader'),
+ options: { processStyleLinks: true },
+ },
+ ],
+ },
+ ],
+ },
+ resolve: {
+ // Since we ship with json-loader always, it's better to move extensions to here
+ // from the default config.
+ extensions: ['.js', '.json', '.jsx'],
+ // Add support to NODE_PATH. With this we could avoid relative path imports.
+ // Based on this CRA feature: https://github.com/facebookincubator/create-react-app/issues/253
+ modules: ['node_modules'].concat(nodePaths),
+ alias: {
+ react$: require.resolve('react'),
+ 'react-dom$': require.resolve('react-dom'),
+ },
+ },
+ performance: {
+ hints: false,
+ },
+ };
+
+ return config;
+}
diff --git a/app/polymer/src/server/config/webpack.config.prod.js b/app/polymer/src/server/config/webpack.config.prod.js
new file mode 100644
index 00000000000..3a77c169ab6
--- /dev/null
+++ b/app/polymer/src/server/config/webpack.config.prod.js
@@ -0,0 +1,103 @@
+import path from 'path';
+import webpack from 'webpack';
+import HtmlWebpackPlugin from 'html-webpack-plugin';
+import CopyWebpackPlugin from 'copy-webpack-plugin';
+import babelLoaderConfig from './babel.prod';
+import { getConfigDir, includePaths, excludePaths, loadEnv, nodePaths } from './utils';
+import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
+import { version } from '../../../package.json';
+
+export default function() {
+ const entries = {
+ preview: [require.resolve('./polyfills'), require.resolve('./globals')],
+ manager: [require.resolve('./polyfills'), path.resolve(__dirname, '../../client/manager')],
+ };
+
+ const config = {
+ bail: true,
+ devtool: '#cheap-module-source-map',
+ entry: entries,
+ output: {
+ filename: 'static/[name].[chunkhash].bundle.js',
+ // Here we set the publicPath to ''.
+ // This allows us to deploy storybook into subpaths like GitHub pages.
+ // This works with css and image loaders too.
+ // This is working for storybook since, we don't use pushState urls and
+ // relative URLs works always.
+ publicPath: '',
+ },
+ plugins: [
+ new HtmlWebpackPlugin({
+ filename: 'index.html',
+ chunks: ['manager'],
+ data: {
+ managerHead: getManagerHeadHtml(getConfigDir()),
+ version,
+ },
+ template: require.resolve('../index.html.ejs'),
+ }),
+ new HtmlWebpackPlugin({
+ filename: 'iframe.html',
+ excludeChunks: ['manager'],
+ data: {
+ previewHead: getPreviewHeadHtml(getConfigDir()),
+ },
+ template: require.resolve('../iframe.html.ejs'),
+ }),
+ new CopyWebpackPlugin([
+ { from: require.resolve('@webcomponents/webcomponentsjs/webcomponents-lite.js') },
+ { from: require.resolve('@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js') },
+ ]),
+ new webpack.DefinePlugin(loadEnv({ production: true })),
+ new webpack.optimize.UglifyJsPlugin({
+ compress: {
+ screw_ie8: true,
+ warnings: false,
+ },
+ mangle: false,
+ output: {
+ comments: false,
+ screw_ie8: true,
+ },
+ }),
+ ],
+ module: {
+ rules: [
+ {
+ test: /\.jsx?$/,
+ loader: require.resolve('babel-loader'),
+ query: babelLoaderConfig,
+ include: includePaths,
+ exclude: excludePaths,
+ },
+ {
+ test: /\.html$/,
+ use: [
+ {
+ loader: require.resolve('babel-loader'),
+ query: babelLoaderConfig,
+ },
+ {
+ loader: require.resolve('polymer-webpack-loader'),
+ options: { processStyleLinks: true },
+ },
+ ],
+ },
+ ],
+ },
+ resolve: {
+ // Since we ship with json-loader always, it's better to move extensions to here
+ // from the default config.
+ extensions: ['.js', '.json', '.jsx'],
+ // Add support to NODE_PATH. With this we could avoid relative path imports.
+ // Based on this CRA feature: https://github.com/facebookincubator/create-react-app/issues/253
+ modules: ['node_modules'].concat(nodePaths),
+ alias: {
+ react$: require.resolve('react'),
+ 'react-dom$': require.resolve('react-dom'),
+ },
+ },
+ };
+
+ return config;
+}
diff --git a/app/polymer/src/server/iframe.html.ejs b/app/polymer/src/server/iframe.html.ejs
new file mode 100644
index 00000000000..0a687eb6e13
--- /dev/null
+++ b/app/polymer/src/server/iframe.html.ejs
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ Storybook
+
+
+ <%= htmlWebpackPlugin.options.data.previewHead %>
+
+
+
+
+
+
diff --git a/app/polymer/src/server/index.html.ejs b/app/polymer/src/server/index.html.ejs
new file mode 100644
index 00000000000..397aaf41d52
--- /dev/null
+++ b/app/polymer/src/server/index.html.ejs
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+ Storybook
+
+ <%= htmlWebpackPlugin.options.data.managerHead %>
+
+
+
+
+
+
diff --git a/app/polymer/src/server/index.js b/app/polymer/src/server/index.js
new file mode 100755
index 00000000000..2ad1a01122b
--- /dev/null
+++ b/app/polymer/src/server/index.js
@@ -0,0 +1,166 @@
+import express from 'express';
+import https from 'https';
+import favicon from 'serve-favicon';
+import program from 'commander';
+import path from 'path';
+import fs from 'fs';
+import chalk from 'chalk';
+import shelljs from 'shelljs';
+import { logger } from '@storybook/node-logger';
+import storybook, { webpackValid } from './middleware';
+import packageJson from '../../package.json';
+import { parseList, getEnvConfig } from './utils';
+
+process.env.NODE_ENV = process.env.NODE_ENV || 'development';
+
+program
+ .version(packageJson.version)
+ .option('-p, --port [number]', 'Port to run Storybook (Required)', str => parseInt(str, 10))
+ .option('-h, --host [string]', 'Host to run Storybook')
+ .option('-s, --static-dir ', 'Directory where to load static files from')
+ .option('-c, --config-dir [dir-name]', 'Directory where to load Storybook configurations from')
+ .option(
+ '--https',
+ 'Serve Storybook over HTTPS. Note: You must provide your own certificate information.'
+ )
+ .option(
+ '--ssl-ca ',
+ 'Provide an SSL certificate authority. (Optional with --https, required if using a self-signed certificate)',
+ parseList
+ )
+ .option('--ssl-cert ', 'Provide an SSL certificate. (Required with --https)')
+ .option('--ssl-key ', 'Provide an SSL key. (Required with --https)')
+ .option('--smoke-test', 'Exit after successful start')
+ .option('-d, --db-path [db-file]', 'DEPRECATED!')
+ .option('--enable-db', 'DEPRECATED!')
+ .parse(process.argv);
+
+logger.info(chalk.bold(`${packageJson.name} v${packageJson.version}`) + chalk.reset('\n'));
+
+if (program.enableDb || program.dbPath) {
+ logger.error(
+ [
+ 'Error: the experimental local database addon is no longer bundled with',
+ 'react-storybook. Please remove these flags (-d,--db-path,--enable-db)',
+ 'from the command or npm script and try again.',
+ ].join(' ')
+ );
+ process.exit(1);
+}
+
+// The key is the field created in `program` variable for
+// each command line argument. Value is the env variable.
+getEnvConfig(program, {
+ port: 'SBCONFIG_PORT',
+ host: 'SBCONFIG_HOSTNAME',
+ staticDir: 'SBCONFIG_STATIC_DIR',
+ configDir: 'SBCONFIG_CONFIG_DIR',
+});
+
+if (!program.port) {
+ logger.error('Error: port to run Storybook is required!\n');
+ program.help();
+ process.exit(-1);
+}
+
+// Used with `app.listen` below
+const listenAddr = [program.port];
+
+if (program.host) {
+ listenAddr.push(program.host);
+}
+
+const app = express();
+let server = app;
+
+if (program.https) {
+ if (!program.sslCert) {
+ logger.error('Error: --ssl-cert is required with --https');
+ process.exit(-1);
+ }
+ if (!program.sslKey) {
+ logger.error('Error: --ssl-key is required with --https');
+ process.exit(-1);
+ }
+
+ const sslOptions = {
+ ca: (program.sslCa || []).map(ca => fs.readFileSync(ca, 'utf-8')),
+ cert: fs.readFileSync(program.sslCert, 'utf-8'),
+ key: fs.readFileSync(program.sslKey, 'utf-8'),
+ };
+
+ server = https.createServer(sslOptions, app);
+}
+
+let hasCustomFavicon = false;
+
+if (program.staticDir) {
+ program.staticDir = parseList(program.staticDir);
+ program.staticDir.forEach(dir => {
+ const staticPath = path.resolve(dir);
+ if (!fs.existsSync(staticPath)) {
+ logger.error(`Error: no such directory to load static files: ${staticPath}`);
+ process.exit(-1);
+ }
+ logger.log(`=> Loading static files from: ${staticPath} .`);
+ app.use(express.static(staticPath, { index: false }));
+
+ const faviconPath = path.resolve(staticPath, 'favicon.ico');
+ if (fs.existsSync(faviconPath)) {
+ hasCustomFavicon = true;
+ app.use(favicon(faviconPath));
+ }
+ });
+}
+
+if (!hasCustomFavicon) {
+ app.use(favicon(path.resolve(__dirname, 'public/favicon.ico')));
+}
+
+// Build the webpack configuration using the `baseConfig`
+// custom `.babelrc` file and `webpack.config.js` files
+const configDir = program.configDir || './.storybook';
+
+// The repository info is sent to the storybook while running on
+// development mode so it'll be easier for tools to integrate.
+const exec = cmd => shelljs.exec(cmd, { silent: true }).stdout.trim();
+process.env.STORYBOOK_GIT_ORIGIN =
+ process.env.STORYBOOK_GIT_ORIGIN || exec('git remote get-url origin');
+process.env.STORYBOOK_GIT_BRANCH =
+ process.env.STORYBOOK_GIT_BRANCH || exec('git symbolic-ref HEAD --short');
+
+// NOTE changes to env should be done before calling `getBaseConfig`
+// `getBaseConfig` function which is called inside the middleware
+app.use(storybook(configDir));
+
+let serverResolve = () => {};
+let serverReject = () => {};
+const serverListening = new Promise((resolve, reject) => {
+ serverResolve = resolve;
+ serverReject = reject;
+});
+server.listen(...listenAddr, error => {
+ if (error) {
+ serverReject(error);
+ } else {
+ serverResolve();
+ }
+});
+
+Promise.all([webpackValid, serverListening])
+ .then(() => {
+ const proto = program.https ? 'https' : 'http';
+ const address = `${proto}://${program.host || 'localhost'}:${program.port}/`;
+ logger.info(`Storybook started on => ${chalk.cyan(address)}\n`);
+ if (program.smokeTest) {
+ process.exit(0);
+ }
+ })
+ .catch(error => {
+ if (error instanceof Error) {
+ logger.error(error);
+ }
+ if (program.smokeTest) {
+ process.exit(1);
+ }
+ });
diff --git a/app/polymer/src/server/middleware.js b/app/polymer/src/server/middleware.js
new file mode 100644
index 00000000000..1dd6fa775b1
--- /dev/null
+++ b/app/polymer/src/server/middleware.js
@@ -0,0 +1,64 @@
+import { Router } from 'express';
+import webpack from 'webpack';
+import path from 'path';
+import webpackDevMiddleware from 'webpack-dev-middleware';
+import webpackHotMiddleware from 'webpack-hot-middleware';
+import getBaseConfig from './config/webpack.config';
+import loadConfig from './config';
+import { getMiddleware } from './utils';
+
+let webpackResolve = () => {};
+let webpackReject = () => {};
+export const webpackValid = new Promise((resolve, reject) => {
+ webpackResolve = resolve;
+ webpackReject = reject;
+});
+
+export default function(configDir) {
+ // Build the webpack configuration using the `getBaseConfig`
+ // custom `.babelrc` file and `webpack.config.js` files
+ const config = loadConfig('DEVELOPMENT', getBaseConfig(), configDir);
+ const middlewareFn = getMiddleware(configDir);
+
+ // remove the leading '/'
+ let { publicPath } = config.output;
+ if (publicPath[0] === '/') {
+ publicPath = publicPath.slice(1);
+ }
+
+ const compiler = webpack(config);
+ const devMiddlewareOptions = {
+ noInfo: true,
+ publicPath: config.output.publicPath,
+ watchOptions: config.watchOptions || {},
+ ...config.devServer,
+ };
+
+ const router = new Router();
+ const webpackDevMiddlewareInstance = webpackDevMiddleware(compiler, devMiddlewareOptions);
+ router.use(webpackDevMiddlewareInstance);
+ router.use(webpackHotMiddleware(compiler));
+
+ // custom middleware
+ middlewareFn(router);
+
+ webpackDevMiddlewareInstance.waitUntilValid(stats => {
+ router.get('/', (req, res) => {
+ res.set('Content-Type', 'text/html');
+ res.sendFile(path.join(`${__dirname}/public/index.html`));
+ });
+
+ router.get('/iframe.html', (req, res) => {
+ res.set('Content-Type', 'text/html');
+ res.sendFile(path.join(`${__dirname}/public/iframe.html`));
+ });
+
+ if (stats.toJson().errors.length) {
+ webpackReject(stats);
+ } else {
+ webpackResolve(stats);
+ }
+ });
+
+ return router;
+}
diff --git a/app/polymer/src/server/public/favicon.ico b/app/polymer/src/server/public/favicon.ico
new file mode 100755
index 00000000000..e1cf7f1c59f
Binary files /dev/null and b/app/polymer/src/server/public/favicon.ico differ
diff --git a/app/polymer/src/server/utils.js b/app/polymer/src/server/utils.js
new file mode 100644
index 00000000000..71396437a03
--- /dev/null
+++ b/app/polymer/src/server/utils.js
@@ -0,0 +1,56 @@
+import path from 'path';
+import fs from 'fs';
+import deprecate from 'util-deprecate';
+
+const fallbackHeadUsage = deprecate(() => {},
+'Usage of head.html has been deprecated. Please rename head.html to preview-head.html');
+
+export function parseList(str) {
+ return str.split(',');
+}
+
+export function getPreviewHeadHtml(configDirPath) {
+ const headHtmlPath = path.resolve(configDirPath, 'preview-head.html');
+ const fallbackHtmlPath = path.resolve(configDirPath, 'head.html');
+ let headHtml = '';
+ if (fs.existsSync(headHtmlPath)) {
+ headHtml = fs.readFileSync(headHtmlPath, 'utf8');
+ } else if (fs.existsSync(fallbackHtmlPath)) {
+ headHtml = fs.readFileSync(fallbackHtmlPath, 'utf8');
+ fallbackHeadUsage();
+ }
+
+ return headHtml;
+}
+
+export function getManagerHeadHtml(configDirPath) {
+ const scriptPath = path.resolve(configDirPath, 'manager-head.html');
+ let scriptHtml = '';
+ if (fs.existsSync(scriptPath)) {
+ scriptHtml = fs.readFileSync(scriptPath, 'utf8');
+ }
+
+ return scriptHtml;
+}
+
+export function getEnvConfig(program, configEnv) {
+ Object.keys(configEnv).forEach(fieldName => {
+ const envVarName = configEnv[fieldName];
+ const envVarValue = process.env[envVarName];
+ if (envVarValue) {
+ program[fieldName] = envVarValue; // eslint-disable-line
+ }
+ });
+}
+
+export function getMiddleware(configDir) {
+ const middlewarePath = path.resolve(configDir, 'middleware.js');
+ if (fs.existsSync(middlewarePath)) {
+ let middlewareModule = require(middlewarePath); // eslint-disable-line
+ if (middlewareModule.__esModule) { // eslint-disable-line
+ middlewareModule = middlewareModule.default;
+ }
+ return middlewareModule;
+ }
+ return () => {};
+}
diff --git a/app/polymer/src/server/utils.test.js b/app/polymer/src/server/utils.test.js
new file mode 100644
index 00000000000..a8db3b65a21
--- /dev/null
+++ b/app/polymer/src/server/utils.test.js
@@ -0,0 +1,69 @@
+import { getPreviewHeadHtml, getManagerHeadHtml } from './utils';
+
+// eslint-disable-next-line global-require
+jest.mock('fs', () => require('../../../../__mocks__/fs'));
+jest.mock('path', () => ({
+ resolve: (a, p) => p,
+}));
+
+const setup = ({ files }) => {
+ // eslint-disable-next-line no-underscore-dangle, global-require
+ require('fs').__setMockFiles(files);
+};
+
+const HEAD_HTML_CONTENTS = 'UNITTEST_HEAD_HTML_CONTENTS';
+
+describe('getPreviewHeadHtml', () => {
+ it('returns an empty string without head.html present', () => {
+ setup({
+ files: {},
+ });
+
+ const result = getPreviewHeadHtml('first');
+ expect(result).toEqual('');
+ });
+
+ it('return contents of head.html when present', () => {
+ setup({
+ files: {
+ 'head.html': HEAD_HTML_CONTENTS,
+ },
+ });
+
+ const result = getPreviewHeadHtml('second');
+ expect(result).toEqual(HEAD_HTML_CONTENTS);
+ });
+
+ it('returns contents of preview-head.html when present', () => {
+ setup({
+ files: {
+ 'preview-head.html': HEAD_HTML_CONTENTS,
+ },
+ });
+
+ const result = getPreviewHeadHtml('second');
+ expect(result).toEqual(HEAD_HTML_CONTENTS);
+ });
+});
+
+describe('getManagerHeadHtml', () => {
+ it('returns an empty string without manager-head.html present', () => {
+ setup({
+ files: {},
+ });
+
+ const result = getManagerHeadHtml('first');
+ expect(result).toEqual('');
+ });
+
+ it('returns contents of manager-head.html when present', () => {
+ setup({
+ files: {
+ 'manager-head.html': HEAD_HTML_CONTENTS,
+ },
+ });
+
+ const result = getManagerHeadHtml('second');
+ expect(result).toEqual(HEAD_HTML_CONTENTS);
+ });
+});
diff --git a/app/react-native/.npmignore b/app/react-native/.npmignore
index 329fc8d67ad..6d236e2ff68 100644
--- a/app/react-native/.npmignore
+++ b/app/react-native/.npmignore
@@ -1,3 +1,2 @@
docs
-src
.babelrc
diff --git a/app/react-native/package.json b/app/react-native/package.json
index 1236b9c5cfa..da5e21615f8 100644
--- a/app/react-native/package.json
+++ b/app/react-native/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/react-native",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "A better way to develop React Native Components for your app",
"keywords": [
"react",
@@ -25,13 +25,13 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/channel-websocket": "^3.3.3",
- "@storybook/core": "^3.3.3",
- "@storybook/ui": "^3.3.3",
- "autoprefixer": "^7.2.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/channel-websocket": "^3.4.0-alpha.4",
+ "@storybook/core": "^3.4.0-alpha.4",
+ "@storybook/ui": "^3.4.0-alpha.4",
+ "autoprefixer": "^7.2.5",
"babel-loader": "^7.1.2",
"babel-plugin-syntax-async-functions": "^6.13.0",
"babel-plugin-syntax-trailing-function-commas": "^6.22.0",
@@ -47,7 +47,7 @@
"babel-preset-stage-0": "^6.24.1",
"babel-runtime": "^6.26.0",
"case-sensitive-paths-webpack-plugin": "^2.1.1",
- "commander": "^2.12.2",
+ "commander": "^2.13.0",
"css-loader": "^0.28.8",
"express": "^4.16.2",
"file-loader": "^1.1.6",
@@ -60,7 +60,7 @@
"prop-types": "^15.6.0",
"react-native-compat": "^1.0.0",
"react-native-iphone-x-helper": "^1.0.1",
- "shelljs": "^0.7.8",
+ "shelljs": "^0.8.0",
"style-loader": "^0.19.1",
"uglifyjs-webpack-plugin": "^1.1.6",
"url-loader": "^0.6.2",
@@ -73,11 +73,11 @@
"ws": "^3.3.3"
},
"devDependencies": {
- "react-native": "^0.51.0"
+ "react-native": "^0.52.0"
},
"peerDependencies": {
"babel-core": "^6.26.0 || ^7.0.0-0",
"react": "*",
- "react-native": ">=0.27.0"
+ "react-native": "0.52.0"
}
}
diff --git a/app/react-native/src/bin/storybook-start.js b/app/react-native/src/bin/storybook-start.js
index b4c11330cf8..5f432d3e02d 100644
--- a/app/react-native/src/bin/storybook-start.js
+++ b/app/react-native/src/bin/storybook-start.js
@@ -75,12 +75,10 @@ if (!program.skipPackager) {
);
}
- let cliCommand = 'node node_modules/react-native/local-cli/cli.js start';
+ let cliCommand = 'react-native start';
if (program.haul) {
const platform = program.platform || 'all';
- cliCommand = `node node_modules/haul/bin/cli.js start --config ${
- program.haul
- } --platform ${platform}`;
+ cliCommand = `haul start --config ${program.haul} --platform ${platform}`;
}
// RN packager
shelljs.exec(
diff --git a/app/react-native/src/server/config/webpack.config.prod.js b/app/react-native/src/server/config/webpack.config.prod.js
index e0e2cdb1598..3244608ac28 100644
--- a/app/react-native/src/server/config/webpack.config.prod.js
+++ b/app/react-native/src/server/config/webpack.config.prod.js
@@ -37,6 +37,9 @@ const getConfig = options => {
ie8: false,
mangle: false,
warnings: false,
+ compress: {
+ keep_fnames: true,
+ },
output: {
comments: false,
},
diff --git a/app/react/.npmignore b/app/react/.npmignore
index 329fc8d67ad..6d236e2ff68 100644
--- a/app/react/.npmignore
+++ b/app/react/.npmignore
@@ -1,3 +1,2 @@
docs
-src
.babelrc
diff --git a/app/react/package.json b/app/react/package.json
index d6b19e43982..3dcd9ac201a 100644
--- a/app/react/package.json
+++ b/app/react/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/react",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook for React: Develop React Component in isolation with Hot Reloading.",
"homepage": "https://github.com/storybooks/storybook/tree/master/app/react",
"bugs": {
@@ -23,16 +23,16 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/channel-postmessage": "^3.3.3",
- "@storybook/client-logger": "^3.3.3",
- "@storybook/core": "^3.3.3",
- "@storybook/node-logger": "^3.3.3",
- "@storybook/ui": "^3.3.3",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/channel-postmessage": "^3.4.0-alpha.4",
+ "@storybook/client-logger": "^3.4.0-alpha.4",
+ "@storybook/core": "^3.4.0-alpha.4",
+ "@storybook/node-logger": "^3.4.0-alpha.4",
+ "@storybook/ui": "^3.4.0-alpha.4",
"airbnb-js-shims": "^1.4.0",
- "autoprefixer": "^7.2.4",
+ "autoprefixer": "^7.2.5",
"babel-loader": "^7.1.2",
"babel-plugin-react-docgen": "^1.8.0",
"babel-plugin-transform-regenerator": "^6.26.0",
@@ -45,8 +45,8 @@
"babel-runtime": "^6.26.0",
"case-sensitive-paths-webpack-plugin": "^2.1.1",
"chalk": "^2.3.0",
- "commander": "^2.12.2",
- "common-tags": "^1.6.0",
+ "commander": "^2.13.0",
+ "common-tags": "^1.7.2",
"configstore": "^3.1.1",
"core-js": "^2.5.3",
"css-loader": "^0.28.8",
@@ -63,7 +63,7 @@
"json-stringify-safe": "^5.0.1",
"json5": "^0.5.1",
"lodash.flattendeep": "^4.4.0",
- "markdown-loader": "^2.0.1",
+ "markdown-loader": "^2.0.2",
"npmlog": "^4.1.2",
"postcss-flexbugs-fixes": "^3.2.0",
"postcss-loader": "^2.0.10",
@@ -72,7 +72,7 @@
"redux": "^3.7.2",
"request": "^2.83.0",
"serve-favicon": "^2.4.5",
- "shelljs": "^0.7.8",
+ "shelljs": "^0.8.0",
"style-loader": "^0.19.1",
"uglifyjs-webpack-plugin": "^1.1.6",
"url-loader": "^0.6.2",
@@ -83,7 +83,7 @@
"webpack-hot-middleware": "^2.21.0"
},
"devDependencies": {
- "nodemon": "^1.14.7"
+ "nodemon": "^1.14.11"
},
"peerDependencies": {
"babel-core": "^6.26.0 || ^7.0.0-0",
diff --git a/app/react/src/server/build.js b/app/react/src/server/build.js
index 9c6a4689e33..a6a9635a00d 100755
--- a/app/react/src/server/build.js
+++ b/app/react/src/server/build.js
@@ -54,7 +54,7 @@ shelljs.cp(path.resolve(__dirname, 'public/favicon.ico'), outputDir);
// Build the webpack configuration using the `baseConfig`
// custom `.babelrc` file and `webpack.config.js` files
// NOTE changes to env should be done before calling `getBaseConfig`
-const config = loadConfig('PRODUCTION', getBaseConfig(), configDir);
+const config = loadConfig('PRODUCTION', getBaseConfig(configDir), configDir);
config.output.path = path.resolve(outputDir);
// copy all static files
diff --git a/app/react/src/server/config/utils.js b/app/react/src/server/config/utils.js
index 0236481efd7..fc73c38a37f 100644
--- a/app/react/src/server/config/utils.js
+++ b/app/react/src/server/config/utils.js
@@ -33,5 +33,3 @@ export function loadEnv(options = {}) {
'process.env': env,
};
}
-
-export const getConfigDir = () => process.env.SBCONFIG_CONFIG_DIR || './.storybook';
diff --git a/app/react/src/server/config/webpack.config.js b/app/react/src/server/config/webpack.config.js
index c9b354cc120..49f32d9a82a 100644
--- a/app/react/src/server/config/webpack.config.js
+++ b/app/react/src/server/config/webpack.config.js
@@ -5,19 +5,12 @@ import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import WatchMissingNodeModulesPlugin from './WatchMissingNodeModulesPlugin';
-import {
- getConfigDir,
- includePaths,
- excludePaths,
- nodeModulesPaths,
- loadEnv,
- nodePaths,
-} from './utils';
+import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils';
import babelLoaderConfig from './babel';
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
import { version } from '../../../package.json';
-export default function() {
+export default function(configDir) {
const config = {
devtool: 'cheap-module-source-map',
entry: {
@@ -38,7 +31,7 @@ export default function() {
filename: 'index.html',
chunks: ['manager'],
data: {
- managerHead: getManagerHeadHtml(getConfigDir()),
+ managerHead: getManagerHeadHtml(configDir),
version,
},
template: require.resolve('../index.html.ejs'),
@@ -47,7 +40,7 @@ export default function() {
filename: 'iframe.html',
excludeChunks: ['manager'],
data: {
- previewHead: getPreviewHeadHtml(getConfigDir()),
+ previewHead: getPreviewHeadHtml(configDir),
},
template: require.resolve('../iframe.html.ejs'),
}),
diff --git a/app/react/src/server/config/webpack.config.prod.js b/app/react/src/server/config/webpack.config.prod.js
index a651c42b9a3..597caaa43bb 100644
--- a/app/react/src/server/config/webpack.config.prod.js
+++ b/app/react/src/server/config/webpack.config.prod.js
@@ -4,11 +4,11 @@ import UglifyJsPlugin from 'uglifyjs-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import babelLoaderConfig from './babel.prod';
-import { getConfigDir, includePaths, excludePaths, loadEnv, nodePaths } from './utils';
+import { includePaths, excludePaths, loadEnv, nodePaths } from './utils';
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
import { version } from '../../../package.json';
-export default function() {
+export default function(configDir) {
const entries = {
preview: [require.resolve('./polyfills'), require.resolve('./globals')],
manager: [require.resolve('./polyfills'), path.resolve(__dirname, '../../client/manager')],
@@ -32,7 +32,7 @@ export default function() {
filename: 'index.html',
chunks: ['manager'],
data: {
- managerHead: getManagerHeadHtml(getConfigDir()),
+ managerHead: getManagerHeadHtml(configDir),
version,
},
template: require.resolve('../index.html.ejs'),
@@ -41,7 +41,7 @@ export default function() {
filename: 'iframe.html',
excludeChunks: ['manager'],
data: {
- previewHead: getPreviewHeadHtml(getConfigDir()),
+ previewHead: getPreviewHeadHtml(configDir),
},
template: require.resolve('../iframe.html.ejs'),
}),
@@ -52,6 +52,9 @@ export default function() {
ie8: false,
mangle: false,
warnings: false,
+ compress: {
+ keep_fnames: true,
+ },
output: {
comments: false,
},
diff --git a/app/react/src/server/middleware.js b/app/react/src/server/middleware.js
index 7b84bc34349..28e8554bccf 100644
--- a/app/react/src/server/middleware.js
+++ b/app/react/src/server/middleware.js
@@ -17,7 +17,7 @@ export const webpackValid = new Promise((resolve, reject) => {
export default function(configDir) {
// Build the webpack configuration using the `getBaseConfig`
// custom `.babelrc` file and `webpack.config.js` files
- const config = loadConfig('DEVELOPMENT', getBaseConfig(), configDir);
+ const config = loadConfig('DEVELOPMENT', getBaseConfig(configDir), configDir);
const middlewareFn = getMiddleware(configDir);
// remove the leading '/'
diff --git a/app/vue/.npmignore b/app/vue/.npmignore
index 329fc8d67ad..6d236e2ff68 100644
--- a/app/vue/.npmignore
+++ b/app/vue/.npmignore
@@ -1,3 +1,2 @@
docs
-src
.babelrc
diff --git a/app/vue/package.json b/app/vue/package.json
index 64a7ee9dd58..b3f518b15d5 100644
--- a/app/vue/package.json
+++ b/app/vue/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/vue",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook for Vue: Develop Vue Component in isolation with Hot Reloading.",
"homepage": "https://github.com/storybooks/storybook/tree/master/apps/vue",
"bugs": {
@@ -23,14 +23,14 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/channel-postmessage": "^3.3.3",
- "@storybook/core": "^3.3.3",
- "@storybook/ui": "^3.3.3",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/channel-postmessage": "^3.4.0-alpha.4",
+ "@storybook/core": "^3.4.0-alpha.4",
+ "@storybook/ui": "^3.4.0-alpha.4",
"airbnb-js-shims": "^1.4.0",
- "autoprefixer": "^7.2.4",
+ "autoprefixer": "^7.2.5",
"babel-loader": "^7.1.2",
"babel-plugin-react-docgen": "^1.8.0",
"babel-plugin-transform-regenerator": "^6.26.0",
@@ -43,8 +43,8 @@
"babel-runtime": "^6.26.0",
"case-sensitive-paths-webpack-plugin": "^2.1.1",
"chalk": "^2.3.0",
- "commander": "^2.12.2",
- "common-tags": "^1.6.0",
+ "commander": "^2.13.0",
+ "common-tags": "^1.7.2",
"configstore": "^3.1.1",
"core-js": "^2.5.3",
"css-loader": "^0.28.8",
@@ -53,10 +53,12 @@
"file-loader": "^1.1.6",
"find-cache-dir": "^1.0.0",
"global": "^4.3.2",
+ "html-loader": "^0.5.4",
"html-webpack-plugin": "^2.30.1",
"json-loader": "^0.5.7",
"json-stringify-safe": "^5.0.1",
"json5": "^0.5.1",
+ "markdown-loader": "^2.0.2",
"postcss-flexbugs-fixes": "^3.2.0",
"postcss-loader": "^2.0.10",
"prop-types": "^15.6.0",
@@ -66,7 +68,7 @@
"redux": "^3.7.2",
"request": "^2.83.0",
"serve-favicon": "^2.4.5",
- "shelljs": "^0.7.8",
+ "shelljs": "^0.8.0",
"style-loader": "^0.19.1",
"uglifyjs-webpack-plugin": "^1.1.6",
"url-loader": "^0.6.2",
@@ -79,15 +81,15 @@
"webpack-hot-middleware": "^2.21.0"
},
"devDependencies": {
- "nodemon": "^1.14.7",
+ "nodemon": "^1.14.11",
"vue": "^2.5.13",
- "vue-loader": "^13.6.2",
+ "vue-loader": "^13.7.0",
"vue-template-compiler": "^2.5.13"
},
"peerDependencies": {
"babel-core": "^6.26.0 || ^7.0.0-0",
"vue": "2.5.13",
- "vue-loader": "13.6.2",
+ "vue-loader": "13.7.0",
"vue-template-compiler": "2.5.13"
}
}
diff --git a/app/vue/src/server/build.js b/app/vue/src/server/build.js
index 74fc769d1a5..ea488da6a0e 100755
--- a/app/vue/src/server/build.js
+++ b/app/vue/src/server/build.js
@@ -56,7 +56,7 @@ shelljs.cp(path.resolve(__dirname, 'public/favicon.ico'), outputDir);
// Build the webpack configuration using the `baseConfig`
// custom `.babelrc` file and `webpack.config.js` files
// NOTE changes to env should be done before calling `getBaseConfig`
-const config = loadConfig('PRODUCTION', getBaseConfig(), configDir);
+const config = loadConfig('PRODUCTION', getBaseConfig(configDir), configDir);
config.output.path = path.resolve(outputDir);
// copy all static files
diff --git a/app/vue/src/server/config/utils.js b/app/vue/src/server/config/utils.js
index 0236481efd7..fc73c38a37f 100644
--- a/app/vue/src/server/config/utils.js
+++ b/app/vue/src/server/config/utils.js
@@ -33,5 +33,3 @@ export function loadEnv(options = {}) {
'process.env': env,
};
}
-
-export const getConfigDir = () => process.env.SBCONFIG_CONFIG_DIR || './.storybook';
diff --git a/app/vue/src/server/config/webpack.config.js b/app/vue/src/server/config/webpack.config.js
index faee281da18..7b82c774ec9 100644
--- a/app/vue/src/server/config/webpack.config.js
+++ b/app/vue/src/server/config/webpack.config.js
@@ -4,19 +4,12 @@ import Dotenv from 'dotenv-webpack';
import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import WatchMissingNodeModulesPlugin from './WatchMissingNodeModulesPlugin';
-import {
- getConfigDir,
- includePaths,
- excludePaths,
- nodeModulesPaths,
- loadEnv,
- nodePaths,
-} from './utils';
+import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils';
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
import babelLoaderConfig from './babel';
import { version } from '../../../package.json';
-export default function() {
+export default function(configDir) {
const config = {
devtool: 'cheap-module-source-map',
entry: {
@@ -37,7 +30,7 @@ export default function() {
filename: 'index.html',
chunks: ['manager'],
data: {
- managerHead: getManagerHeadHtml(getConfigDir()),
+ managerHead: getManagerHeadHtml(configDir),
version,
},
template: require.resolve('../index.html.ejs'),
@@ -46,7 +39,7 @@ export default function() {
filename: 'iframe.html',
excludeChunks: ['manager'],
data: {
- previewHead: getPreviewHeadHtml(getConfigDir()),
+ previewHead: getPreviewHeadHtml(configDir),
},
template: require.resolve('../iframe.html.ejs'),
}),
diff --git a/app/vue/src/server/config/webpack.config.prod.js b/app/vue/src/server/config/webpack.config.prod.js
index d8e3b93d29f..6610afe8c19 100644
--- a/app/vue/src/server/config/webpack.config.prod.js
+++ b/app/vue/src/server/config/webpack.config.prod.js
@@ -4,11 +4,11 @@ import UglifyJsPlugin from 'uglifyjs-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import babelLoaderConfig from './babel.prod';
-import { getConfigDir, includePaths, excludePaths, loadEnv, nodePaths } from './utils';
+import { includePaths, excludePaths, loadEnv, nodePaths } from './utils';
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
import { version } from '../../../package.json';
-export default function() {
+export default function(configDir) {
const entries = {
preview: [require.resolve('./polyfills'), require.resolve('./globals')],
manager: [require.resolve('./polyfills'), path.resolve(__dirname, '../../client/manager')],
@@ -32,7 +32,7 @@ export default function() {
filename: 'index.html',
chunks: ['manager'],
data: {
- managerHead: getManagerHeadHtml(getConfigDir()),
+ managerHead: getManagerHeadHtml(configDir),
version,
},
template: require.resolve('../index.html.ejs'),
@@ -41,7 +41,7 @@ export default function() {
filename: 'iframe.html',
excludeChunks: ['manager'],
data: {
- previewHead: getPreviewHeadHtml(getConfigDir()),
+ previewHead: getPreviewHeadHtml(configDir),
},
template: require.resolve('../iframe.html.ejs'),
}),
@@ -52,6 +52,9 @@ export default function() {
ie8: false,
mangle: false,
warnings: false,
+ compress: {
+ keep_fnames: true,
+ },
output: {
comments: false,
},
diff --git a/app/vue/src/server/middleware.js b/app/vue/src/server/middleware.js
index 1dd6fa775b1..3921bf4733f 100644
--- a/app/vue/src/server/middleware.js
+++ b/app/vue/src/server/middleware.js
@@ -17,7 +17,7 @@ export const webpackValid = new Promise((resolve, reject) => {
export default function(configDir) {
// Build the webpack configuration using the `getBaseConfig`
// custom `.babelrc` file and `webpack.config.js` files
- const config = loadConfig('DEVELOPMENT', getBaseConfig(), configDir);
+ const config = loadConfig('DEVELOPMENT', getBaseConfig(configDir), configDir);
const middlewareFn = getMiddleware(configDir);
// remove the leading '/'
diff --git a/docs/README.md b/docs/README.md
index 83af3b1d7f8..58da5e7675d 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -12,4 +12,4 @@ yarn storybook
### Edit Documentation
-Documentation is written in Markdown and located inside the [`pages/`](pages/) directory.
+Documentation is written in Markdown and located inside the [`docs/src/pages`](https://github.com/storybooks/storybook/tree/master/docs/src/pages) directory.
diff --git a/docs/package.json b/docs/package.json
index d66ccf87d85..204687c8098 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -18,10 +18,10 @@
"storybook": "start-storybook -p 9009 -s src/pages"
},
"dependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/react": "^3.3.3",
+ "@storybook/addon-actions": "^3.3.9",
+ "@storybook/addon-links": "^3.3.9",
+ "@storybook/addons": "^3.3.9",
+ "@storybook/react": "^3.3.9",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
"babel-loader": "^6.4.1",
@@ -31,27 +31,27 @@
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"bootstrap": "^3.3.7",
- "gatsby": "^1.9.149",
- "gatsby-link": "^1.6.32",
+ "gatsby": "^1.9.155",
+ "gatsby-link": "^1.6.34",
"gatsby-plugin-sharp": "^1.6.24",
"gatsby-remark-autolink-headers": "^1.4.11",
"gatsby-remark-copy-linked-files": "^1.5.25",
"gatsby-remark-images": "^1.5.36",
"gatsby-remark-smartypants": "^1.4.10",
"gatsby-source-filesystem": "^1.5.11",
- "gatsby-transformer-remark": "^1.7.26",
+ "gatsby-transformer-remark": "^1.7.28",
"gh-pages": "^1.1.0",
"global": "^4.3.2",
"highlight.js": "^9.12.0",
"lodash": "^4.17.2",
- "marked": "^0.3.7",
+ "marked": "^0.3.12",
"prop-types": "^15.6.0",
"react": "^15.6.1",
"react-document-title": "^2.0.3",
"react-dom": "^15.6.1",
"react-helmet": "^5.0.3",
"react-router": "^4.2.0",
- "react-stack-grid": "^0.7.0",
+ "react-stack-grid": "^0.7.1",
"sitemap": "^1.12.0"
},
"private": true
diff --git a/docs/src/pages/addons/addon-gallery/index.md b/docs/src/pages/addons/addon-gallery/index.md
index 08cb51bd086..00939415a95 100644
--- a/docs/src/pages/addons/addon-gallery/index.md
+++ b/docs/src/pages/addons/addon-gallery/index.md
@@ -1,8 +1,7 @@
-* * *
-
+---
id: 'addon-gallery'
-
-## title: 'Addon Gallery'
+title: 'Addon Gallery'
+---
This is a list of available addons for Storybook.
diff --git a/docs/src/pages/addons/api/index.md b/docs/src/pages/addons/api/index.md
index 923562a8583..40bb16a7b56 100644
--- a/docs/src/pages/addons/api/index.md
+++ b/docs/src/pages/addons/api/index.md
@@ -1,8 +1,7 @@
-* * *
-
+---
id: 'api'
-
-## title: 'API'
+title: 'API'
+---
## Core Addon API
diff --git a/docs/src/pages/addons/using-addons/index.md b/docs/src/pages/addons/using-addons/index.md
index 095a005ba2a..835af5d889a 100644
--- a/docs/src/pages/addons/using-addons/index.md
+++ b/docs/src/pages/addons/using-addons/index.md
@@ -12,7 +12,7 @@ We are going to use an addon called [Notes](https://github.com/storybooks/storyb
First, we need to install the addons:
```sh
-npm i --save-dev @storybook/addon-actions @storybook/addon-links @storybook/addon-notes
+npm i --save-dev @storybook-addons @storybook/addon-actions @storybook/addon-links @storybook/addon-notes
```
Then, we need to create a file called `addons.js` inside the storybook config directory and add the following content:
diff --git a/docs/src/pages/basics/guide-angular/index.md b/docs/src/pages/basics/guide-angular/index.md
index 95e72f6fb90..cd65bca8327 100644
--- a/docs/src/pages/basics/guide-angular/index.md
+++ b/docs/src/pages/basics/guide-angular/index.md
@@ -17,7 +17,7 @@ In this guide, we are trying to set up Storybook for your Angular project.
## Table of contents
- [Create Angular project](#create-angular-project)
-- [Add @storybook/angular](#add-storybookangular)
+- [Add @storybook/angular and babel-core](#add-storybookangular-and-babel-core)
- [Create the config file](#create-the-config-file)
- [Write your stories](#write-your-stories)
- [Run your Storybook](#run-your-storybook)
@@ -32,12 +32,12 @@ ng new your-angular-prj
cd your-angular-prj
```
-## Add @storybook/angular
+## Add @storybook/angular and babel-core
-Next, install `@storybook/angular` to your project:
+Next, install `@storybook/angular` and `babel-core` (it's a peerDependency) to your project:
```sh
-npm i --save-dev @storybook/angular
+npm i --save-dev @storybook/angular babel-core
```
Then add the following NPM script to your package json in order to start the storybook later in this guide:
@@ -63,19 +63,19 @@ To do that, simply create a file at `.storybook/config.js` with the following co
import { configure } from '@storybook/angular';
function loadStories() {
- require('../stories/index.ts');
+ require('../src/stories/index.ts');
}
configure(loadStories, module);
```
-That'll load stories in `../stories/index.ts`.
+That'll load stories in `../src/stories/index.ts`.
Just like that, you can load stories from wherever you want to.
## Write your stories
-Now you can write some stories inside the `../stories/index.ts` file, like this:
+Now you can write some stories inside the `../src/stories/index.ts` file, like this:
```js
import { storiesOf } from '@storybook/angular';
diff --git a/docs/src/pages/basics/guide-react/index.md b/docs/src/pages/basics/guide-react/index.md
index 4f9202ac419..10f81f2fcf6 100644
--- a/docs/src/pages/basics/guide-react/index.md
+++ b/docs/src/pages/basics/guide-react/index.md
@@ -16,7 +16,7 @@ In this guide, we are trying to set up Storybook for your React project.
## Table of contents
- [Add @storybook/react](#add-storybookreact)
-- [Add react and react-dom](#add-react-and-react-dom)
+- [Add react, react-dom, and babel-core](#add-react-react-dom-and-babel-core)
- [Create the config file](#create-the-config-file)
- [Write your stories](#write-your-stories)
- [Run your Storybook](#run-your-storybook)
@@ -29,12 +29,13 @@ First of all, you need to add `@storybook/react` to your project. To do that, si
npm i --save-dev @storybook/react
```
-## Add react and react-dom
+## Add react, react-dom, and babel-core
-Make sure that you have `react` and `react-dom` in your dependencies as well because we list these as a peerDependency:
+Make sure that you have `react`, `react-dom`, and `babel-core` in your dependencies as well because we list these as a peerDependency:
```sh
npm i --save react react-dom
+npm i --save-dev babel-core
```
Then add the following NPM script to your package json in order to start the storybook later in this guide:
diff --git a/docs/src/pages/basics/guide-vue/index.md b/docs/src/pages/basics/guide-vue/index.md
index d3adada5fc4..9ccc4905bfa 100644
--- a/docs/src/pages/basics/guide-vue/index.md
+++ b/docs/src/pages/basics/guide-vue/index.md
@@ -1,8 +1,7 @@
-* * *
-
+---
id: 'guide-vue'
-
-## title: 'Storybook for Vue'
+title: 'Storybook for Vue'
+---
You may have tried to use our quick start guide to setup your project for Storybook. If you want to set up Storybook manually, this is the guide for you.
@@ -18,7 +17,7 @@ In this guide, we are trying to set up Storybook for your Vue project.
## Table of contents
- [Add @storybook/vue](#add-storybookvue)
-- [Add vue](#add-vue)
+- [Add vue and babel-core](#add-vue-and-babel-core)
- [Create the NPM script](#create-the-npm-script)
- [Create the config file](#create-the-config-file)
- [Write your stories](#write-your-stories)
@@ -32,12 +31,13 @@ First of all, you need to add `@storybook/vue` to your project. To do that, simp
npm i --save-dev @storybook/vue
```
-## Add vue
+## Add vue and babel-core
-Make sure that you have `vue` in your dependencies as well because we list is as a peerDependency:
+Make sure that you have `vue` and `babel-core` in your dependencies as well because we list is as a peerDependency:
```sh
npm i --save vue
+npm i --save-dev babel-core
```
## Create the NPM script
diff --git a/docs/src/pages/examples/_examples.yml b/docs/src/pages/examples/_examples.yml
index a57cc7a56a6..be65a08cf00 100644
--- a/docs/src/pages/examples/_examples.yml
+++ b/docs/src/pages/examples/_examples.yml
@@ -139,3 +139,9 @@ fyndiq-ui:
description: Fyndiq UI Component library
source: https://github.com/fyndiq/fyndiq-ui
demo: https://fyndiq.github.io/fyndiq-ui/
+gumgum:
+ thumbnail: ./thumbnails/gumgum.png
+ title: GumGum
+ description: GumGum (Computer Vision Company) Component library
+ demo: https://storybook.gumgum.com
+ site: https://gumgum.com
diff --git a/docs/src/pages/examples/thumbnails/gumgum.png b/docs/src/pages/examples/thumbnails/gumgum.png
new file mode 100644
index 00000000000..e770c0bc809
Binary files /dev/null and b/docs/src/pages/examples/thumbnails/gumgum.png differ
diff --git a/docs/src/pages/testing/css-style-testing/index.md b/docs/src/pages/testing/css-style-testing/index.md
index 0e6a485c3fa..4b9e7d2d3e5 100644
--- a/docs/src/pages/testing/css-style-testing/index.md
+++ b/docs/src/pages/testing/css-style-testing/index.md
@@ -27,4 +27,6 @@ Just like that, you can access all of the stories in your Storybook.
It will be hard to use all the frameworks we've [mentioned](/testing/react-ui-testing#3-css-style-testing), but we'll be able to use frameworks which are based on URL as the input source. (Such as [BackstopJS](https://github.com/garris/BackstopJS) and [Gemini](https://github.com/gemini-testing/gemini))
+- [Loki](https://loki.js.org/): Is a great tool for visual regression testing.
+
> In the future we are also planning to smooth this process with the help of [StoryShots](https://github.com/storybooks/storybook/tree/master/addons/storyshots).
diff --git a/docs/yarn.lock b/docs/yarn.lock
index 288d5aea0a2..ea559e67098 100644
--- a/docs/yarn.lock
+++ b/docs/yarn.lock
@@ -2,9 +2,9 @@
# yarn lockfile v1
-"@storybook/addon-actions@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.3.3.tgz#468e3426eb8f109825d9b41bf77f206711fa74b3"
+"@storybook/addon-actions@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.3.9.tgz#2b191548928467fe1dd26dcba606feafbf182d36"
dependencies:
deep-equal "^1.0.1"
global "^4.3.2"
@@ -13,37 +13,37 @@
react-inspector "^2.2.2"
uuid "^3.1.0"
-"@storybook/addon-links@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.3.3.tgz#b5fe29f3aa3d5fe812aa9d47240846bf4d040ad1"
+"@storybook/addon-links@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.3.9.tgz#13781ac1c21ddfe347ece6ceab8518c8d1f98a0f"
dependencies:
- "@storybook/components" "^3.3.3"
+ "@storybook/components" "^3.3.9"
global "^4.3.2"
prop-types "^15.5.10"
-"@storybook/addons@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.3.3.tgz#968d98a61957bc30db642b43924c3332dbaec40e"
+"@storybook/addons@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.3.9.tgz#356ce7f1de892d88ca4bc5f686d06e07dd8c2108"
-"@storybook/channel-postmessage@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.3.3.tgz#d3c1a6da0b9bb111eb410419788d2609924f894b"
+"@storybook/channel-postmessage@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.3.9.tgz#a59220f9ecbdbe05deac6ac4339715aa587d41dd"
dependencies:
- "@storybook/channels" "^3.3.3"
+ "@storybook/channels" "^3.3.9"
global "^4.3.2"
json-stringify-safe "^5.0.1"
-"@storybook/channels@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.3.3.tgz#ee9a496f984a41c0b12b523a1375d21e1f05eb7d"
+"@storybook/channels@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.3.9.tgz#3116a6c5e441fd057558870b254c34fe3a9fbfb0"
-"@storybook/client-logger@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.3.3.tgz#3fd2a8dc243d9d3d2f171f7a02f58c805c409385"
+"@storybook/client-logger@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.3.9.tgz#a73e382c383c1bfa6d2ff7fa5cae77cd09efa524"
-"@storybook/components@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.3.3.tgz#a01adb8eb065a9e9627d85d7268deb270b57d2de"
+"@storybook/components@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.3.9.tgz#1f7ced8b10a0e405c1d3fd6fe7ef7b8957ddf89f"
dependencies:
glamor "^2.20.40"
glamorous "^4.11.2"
@@ -57,9 +57,9 @@
"@storybook/react-simple-di" "^1.2.1"
babel-runtime "6.x.x"
-"@storybook/node-logger@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.3.3.tgz#e22e29a27fc440ea58134e36a85d5a38eca2ee6e"
+"@storybook/node-logger@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.3.9.tgz#c070ef5ced91b1b1aa7bb3e402855db277ed426b"
dependencies:
chalk "^2.3.0"
npmlog "^4.1.2"
@@ -87,17 +87,17 @@
dependencies:
babel-runtime "^6.5.0"
-"@storybook/react@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.3.3.tgz#fd7f41fa897b82af09bb4026cfbad9684901cbe1"
+"@storybook/react@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.3.9.tgz#2bd203a5b3c5e5fad4a756ca41d78e62cd49b160"
dependencies:
- "@storybook/addon-actions" "^3.3.3"
- "@storybook/addon-links" "^3.3.3"
- "@storybook/addons" "^3.3.3"
- "@storybook/channel-postmessage" "^3.3.3"
- "@storybook/client-logger" "^3.3.3"
- "@storybook/node-logger" "^3.3.3"
- "@storybook/ui" "^3.3.3"
+ "@storybook/addon-actions" "^3.3.9"
+ "@storybook/addon-links" "^3.3.9"
+ "@storybook/addons" "^3.3.9"
+ "@storybook/channel-postmessage" "^3.3.9"
+ "@storybook/client-logger" "^3.3.9"
+ "@storybook/node-logger" "^3.3.9"
+ "@storybook/ui" "^3.3.9"
airbnb-js-shims "^1.4.0"
autoprefixer "^7.2.3"
babel-loader "^7.1.2"
@@ -116,7 +116,7 @@
common-tags "^1.6.0"
configstore "^3.1.1"
core-js "^2.5.3"
- css-loader "^0.28.7"
+ css-loader "^0.28.8"
dotenv-webpack "^1.5.4"
express "^4.16.2"
file-loader "^1.1.6"
@@ -124,7 +124,7 @@
glamor "^2.20.40"
glamorous "^4.11.2"
global "^4.3.2"
- html-loader "^0.5.1"
+ html-loader "^0.5.4"
html-webpack-plugin "^2.30.1"
json-loader "^0.5.7"
json-stringify-safe "^5.0.1"
@@ -141,7 +141,7 @@
serve-favicon "^2.4.5"
shelljs "^0.7.8"
style-loader "^0.19.1"
- uglifyjs-webpack-plugin "^1.1.5"
+ uglifyjs-webpack-plugin "^1.1.6"
url-loader "^0.6.2"
util-deprecate "^1.0.2"
uuid "^3.1.0"
@@ -149,11 +149,11 @@
webpack-dev-middleware "^1.12.2"
webpack-hot-middleware "^2.21.0"
-"@storybook/ui@^3.3.3":
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.3.3.tgz#c8eb95a1734c654e082d3909f665ae00ad472d94"
+"@storybook/ui@^3.3.9":
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.3.9.tgz#abb1df557131b174bf3c0879863a309ee85de8e3"
dependencies:
- "@storybook/components" "^3.3.3"
+ "@storybook/components" "^3.3.9"
"@storybook/mantra-core" "^1.7.2"
"@storybook/react-komposer" "^2.0.3"
babel-runtime "^6.26.0"
@@ -254,6 +254,10 @@ ajv-keywords@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0"
+ajv-keywords@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+
ajv@^4.9.1:
version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
@@ -300,12 +304,6 @@ ansi-html@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
-ansi-red@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c"
- dependencies:
- ansi-wrap "0.1.0"
-
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
@@ -324,10 +322,6 @@ ansi-styles@^3.1.0:
dependencies:
color-convert "^1.9.0"
-ansi-wrap@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
-
ansi@^0.3.0, ansi@~0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21"
@@ -2100,9 +2094,9 @@ bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
-cacache@^10.0.0:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.1.tgz#3e05f6e616117d9b54665b1b20c8aeb93ea5d36f"
+cacache@^10.0.1:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.2.tgz#105a93a162bbedf3a25da42e1939ed99ffb145f8"
dependencies:
bluebird "^3.5.0"
chownr "^1.0.1"
@@ -2446,10 +2440,6 @@ code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-coffee-script@^1.12.4:
- version "1.12.7"
- resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53"
-
collapse-white-space@^1.0.0, collapse-white-space@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c"
@@ -2876,22 +2866,22 @@ css-loader@^0.26.1:
postcss-modules-values "^1.1.0"
source-list-map "^0.1.7"
-css-loader@^0.28.7:
- version "0.28.7"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
+css-loader@^0.28.8:
+ version "0.28.8"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.8.tgz#ff36381464dea18fe60f2601a060ba6445886bd5"
dependencies:
- babel-code-frame "^6.11.0"
+ babel-code-frame "^6.26.0"
css-selector-tokenizer "^0.7.0"
- cssnano ">=2.6.1 <4"
+ cssnano "^3.10.0"
icss-utils "^2.1.0"
loader-utils "^1.0.2"
lodash.camelcase "^4.3.0"
- object-assign "^4.0.1"
+ object-assign "^4.1.1"
postcss "^5.0.6"
- postcss-modules-extract-imports "^1.0.0"
- postcss-modules-local-by-default "^1.0.1"
- postcss-modules-scope "^1.0.0"
- postcss-modules-values "^1.1.0"
+ postcss-modules-extract-imports "^1.1.0"
+ postcss-modules-local-by-default "^1.2.0"
+ postcss-modules-scope "^1.1.0"
+ postcss-modules-values "^1.3.0"
postcss-value-parser "^3.3.0"
source-list-map "^2.0.0"
@@ -2924,7 +2914,7 @@ cssesc@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
-"cssnano@>=2.6.1 <4":
+"cssnano@>=2.6.1 <4", cssnano@^3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
dependencies:
@@ -3613,7 +3603,7 @@ es6-template-strings@^2.0.0:
es5-ext "^0.10.12"
esniff "^1.1"
-es6-templates@^0.2.2:
+es6-templates@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4"
dependencies:
@@ -4357,9 +4347,9 @@ gatsby-cli@^1.1.28:
yargs "^8.0.2"
yurnalist "^0.2.1"
-gatsby-link@^1.6.30, gatsby-link@^1.6.32:
- version "1.6.32"
- resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-1.6.32.tgz#49114e5fc649f274254953e06bfaafebb296ccb8"
+gatsby-link@^1.6.34:
+ version "1.6.34"
+ resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-1.6.34.tgz#c1ce57cfcb2f693128b2a7d0eff3dde0c6cefec4"
dependencies:
babel-runtime "^6.26.0"
prop-types "^15.5.8"
@@ -4389,9 +4379,9 @@ gatsby-plugin-sharp@^1.6.24:
sharp "^0.17.3"
svgo "^0.7.2"
-gatsby-react-router-scroll@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-1.0.7.tgz#50be2d6d3857625eb087c14f2a6789672fd73219"
+gatsby-react-router-scroll@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-1.0.8.tgz#6cc9d80c139e58ed5189dd35146ac37b46846cd5"
dependencies:
babel-runtime "^6.26.0"
scroll-behavior "^0.9.1"
@@ -4456,13 +4446,13 @@ gatsby-source-filesystem@^1.5.11:
slash "^1.0.0"
valid-url "^1.0.9"
-gatsby-transformer-remark@^1.7.26:
- version "1.7.26"
- resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-1.7.26.tgz#58c273517b6039489b183fc4194ad07ee46e71ff"
+gatsby-transformer-remark@^1.7.28:
+ version "1.7.28"
+ resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-1.7.28.tgz#c99df9cf9d5fdb8a802168c1d49e32ce8be5895b"
dependencies:
babel-runtime "^6.26.0"
bluebird "^3.5.0"
- gray-matter "^2.1.0"
+ gray-matter "^3.0.0"
hast-util-to-html "^3.0.0"
lodash "^4.17.4"
mdast-util-to-hast "^2.4.0"
@@ -4478,9 +4468,9 @@ gatsby-transformer-remark@^1.7.26:
unist-util-select "^1.5.0"
unist-util-visit "^1.1.1"
-gatsby@^1.9.149:
- version "1.9.149"
- resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.149.tgz#4c0f776b634a8c291254abedae22e6265bfbcde4"
+gatsby@^1.9.155:
+ version "1.9.155"
+ resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.155.tgz#49fe4063fa2d19279f90b4a1019dcf20ce94d08a"
dependencies:
async "^2.1.2"
babel-code-frame "^6.22.0"
@@ -4521,9 +4511,9 @@ gatsby@^1.9.149:
fs-extra "^4.0.1"
gatsby-1-config-css-modules "^1.0.8"
gatsby-cli "^1.1.28"
- gatsby-link "^1.6.30"
+ gatsby-link "^1.6.34"
gatsby-module-loader "^1.0.9"
- gatsby-react-router-scroll "^1.0.7"
+ gatsby-react-router-scroll "^1.0.8"
glob "^7.1.1"
graphql "^0.11.7"
graphql-relay "^0.5.1"
@@ -4577,6 +4567,7 @@ gatsby@^1.9.149:
style-loader "^0.13.0"
type-of "^2.0.1"
url-loader "^0.5.7"
+ v8-compile-cache "^1.1.0"
webpack "^1.13.3"
webpack-configurator "^0.3.0"
webpack-dev-middleware "^1.8.4"
@@ -4903,15 +4894,14 @@ graphql@^0.11.3, graphql@^0.11.7:
dependencies:
iterall "1.1.3"
-gray-matter@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-2.1.1.tgz#3042d9adec2a1ded6a7707a9ed2380f8a17a430e"
+gray-matter@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-3.1.1.tgz#101f80d9e69eeca6765cdce437705b18f40876ac"
dependencies:
- ansi-red "^0.1.1"
- coffee-script "^1.12.4"
extend-shallow "^2.0.1"
- js-yaml "^3.8.1"
- toml "^2.3.2"
+ js-yaml "^3.10.0"
+ kind-of "^5.0.2"
+ strip-bom-string "^1.0.0"
gulp-decompress@^1.2.0:
version "1.2.0"
@@ -5213,17 +5203,17 @@ html-entities@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
-html-loader@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.1.tgz#4f1e8396a1ea6ab42bedc987dfac058070861ebe"
+html-loader@^0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.4.tgz#70f36e30a923cc52536fdc812cec6f556aeb47a4"
dependencies:
- es6-templates "^0.2.2"
+ es6-templates "^0.2.3"
fastparse "^1.1.1"
- html-minifier "^3.0.1"
- loader-utils "^1.0.2"
- object-assign "^4.1.0"
+ html-minifier "^3.5.8"
+ loader-utils "^1.1.0"
+ object-assign "^4.1.1"
-html-minifier@^3.0.1, html-minifier@^3.2.3:
+html-minifier@^3.2.3, html-minifier@^3.5.8:
version "3.5.8"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.8.tgz#5ccdb1f73a0d654e6090147511f6e6b2ee312700"
dependencies:
@@ -5993,7 +5983,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.2, js-yaml@^3.8.1:
+js-yaml@^3.10.0, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.2:
version "3.10.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
dependencies:
@@ -6630,14 +6620,14 @@ markdown-table@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c"
+marked@^0.3.12:
+ version "0.3.12"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519"
+
marked@^0.3.6:
version "0.3.9"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.9.tgz#54ce6a57e720c3ac6098374ec625fcbcc97ff290"
-marked@^0.3.7:
- version "0.3.7"
- resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.7.tgz#80ef3bbf1bd00d1c9cfebe42ba1b8c85da258d0d"
-
math-expression-evaluator@^1.2.14:
version "1.2.17"
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
@@ -8159,21 +8149,27 @@ postcss-modules-extract-imports@^1.0.0:
dependencies:
postcss "^6.0.1"
-postcss-modules-local-by-default@^1.0.1:
+postcss-modules-extract-imports@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb"
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-modules-local-by-default@^1.0.1, postcss-modules-local-by-default@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
dependencies:
css-selector-tokenizer "^0.7.0"
postcss "^6.0.1"
-postcss-modules-scope@^1.0.0:
+postcss-modules-scope@^1.0.0, postcss-modules-scope@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
dependencies:
css-selector-tokenizer "^0.7.0"
postcss "^6.0.1"
-postcss-modules-values@^1.1.0:
+postcss-modules-values@^1.1.0, postcss-modules-values@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
dependencies:
@@ -8763,9 +8759,9 @@ react-split-pane@^0.1.74:
prop-types "^15.5.10"
react-style-proptype "^3.0.0"
-react-stack-grid@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/react-stack-grid/-/react-stack-grid-0.7.0.tgz#396109b811ae8a43920ce8b67421ed9978a8b677"
+react-stack-grid@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/react-stack-grid/-/react-stack-grid-0.7.1.tgz#cbf7353ce6c2acf712b827c36b0be234af84bee9"
dependencies:
easy-css-transform-builder "^0.0.2"
exenv "^1.2.1"
@@ -9543,6 +9539,13 @@ schema-utils@^0.3.0:
dependencies:
ajv "^5.0.0"
+schema-utils@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.3.tgz#e2a594d3395834d5e15da22b48be13517859458e"
+ dependencies:
+ ajv "^5.0.0"
+ ajv-keywords "^2.1.0"
+
scroll-behavior@^0.9.1:
version "0.9.4"
resolved "https://registry.yarnpkg.com/scroll-behavior/-/scroll-behavior-0.9.4.tgz#73b4a0eae3e59c0b8f3b6fc1ff78f054a513e79c"
@@ -10257,6 +10260,10 @@ strip-bom-stream@^1.0.0:
first-chunk-stream "^1.0.0"
strip-bom "^2.0.0"
+strip-bom-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
+
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@@ -10564,10 +10571,6 @@ to-regex@^3.0.1:
extend-shallow "^2.0.1"
regex-not "^1.0.0"
-toml@^2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.3.tgz#8d683d729577cb286231dfc7a8affe58d31728fb"
-
topo@2.x.x:
version "2.0.2"
resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182"
@@ -10661,9 +10664,9 @@ ua-parser-js@^0.7.9:
version "0.7.17"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
-uglify-es@3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.2.tgz#15c62b7775002c81b7987a1c49ecd3f126cace73"
+uglify-es@^3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.4.tgz#2d592678791e5310456bbc95e952139e3b13167a"
dependencies:
commander "~2.12.1"
source-map "~0.6.1"
@@ -10705,18 +10708,18 @@ uglifyjs-webpack-plugin@^0.4.6:
uglify-js "^2.8.29"
webpack-sources "^1.0.1"
-uglifyjs-webpack-plugin@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.5.tgz#5ec4a16da0fd10c96538f715caed10dbdb180875"
+uglifyjs-webpack-plugin@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.6.tgz#f4ba8449edcf17835c18ba6ae99b9d610857fb19"
dependencies:
- cacache "^10.0.0"
+ cacache "^10.0.1"
find-cache-dir "^1.0.0"
- schema-utils "^0.3.0"
+ schema-utils "^0.4.2"
serialize-javascript "^1.4.0"
source-map "^0.6.1"
- uglify-es "3.2.2"
- webpack-sources "^1.0.1"
- worker-farm "^1.4.1"
+ uglify-es "^3.3.4"
+ webpack-sources "^1.1.0"
+ worker-farm "^1.5.2"
uid-number@^0.0.6:
version "0.0.6"
@@ -11025,6 +11028,10 @@ uws@~0.14.4:
version "0.14.5"
resolved "https://registry.yarnpkg.com/uws/-/uws-0.14.5.tgz#67aaf33c46b2a587a5f6666d00f7691328f149dc"
+v8-compile-cache@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.0.tgz#1dc2a340fb8e5f800a32bcdbfb8c23cd747021b9"
+
v8flags@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
@@ -11293,6 +11300,13 @@ webpack-sources@^1.0.1:
source-list-map "^2.0.0"
source-map "~0.5.3"
+webpack-sources@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
webpack-stats-plugin@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.1.5.tgz#29e5f12ebfd53158d31d656a113ac1f7b86179d9"
@@ -11421,7 +11435,7 @@ wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-worker-farm@^1.4.1:
+worker-farm@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae"
dependencies:
diff --git a/examples/angular-cli/.storybook/config.js b/examples/angular-cli/.storybook/config.js
index 2da8e2e77ee..bebedffc753 100644
--- a/examples/angular-cli/.storybook/config.js
+++ b/examples/angular-cli/.storybook/config.js
@@ -1,6 +1,8 @@
-/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */
-
import { configure } from '@storybook/angular';
+import addCssWarning from '../src/cssWarning';
+import '../src/assets/common.css'
+
+addCssWarning();
function loadStories() {
// put welcome screen at the top of the list so it's the first one displayed
diff --git a/examples/angular-cli/.storybook/tsconfig.json b/examples/angular-cli/.storybook/tsconfig.json
new file mode 100644
index 00000000000..de9e409b5fb
--- /dev/null
+++ b/examples/angular-cli/.storybook/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../tsconfig.json",
+ "exclude": [
+ "../src/test.ts",
+ "../src/**/*.spec.ts"
+ ],
+ "include": [
+ "../src/**/*"
+ ]
+}
diff --git a/examples/angular-cli/e2e/app.e2e-spec.ts b/examples/angular-cli/e2e/app.e2e-spec.ts
index 626e67bd1b3..a62d4d0620f 100644
--- a/examples/angular-cli/e2e/app.e2e-spec.ts
+++ b/examples/angular-cli/e2e/app.e2e-spec.ts
@@ -10,6 +10,6 @@ describe('ng5test App', () => {
it('should display welcome message', () => {
page.navigateTo();
- expect((page.getParagraphText())).toEqual('Welcome to app!');
+ expect(page.getParagraphText()).toEqual('Welcome to app!');
});
});
diff --git a/examples/angular-cli/package.json b/examples/angular-cli/package.json
index 709c9c9fe06..2a34ee7fd86 100644
--- a/examples/angular-cli/package.json
+++ b/examples/angular-cli/package.json
@@ -1,13 +1,12 @@
{
"name": "angular-cli",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
- "lint": "ng lint",
"e2e": "ng e2e",
"storybook": "start-storybook -p 9008 -s src/assets",
"build-storybook": "build-storybook -s src"
@@ -25,20 +24,20 @@
"@angular/router": "^5.1.3",
"core-js": "^2.4.1",
"rxjs": "^5.4.2",
- "zone.js": "^0.8.19"
+ "zone.js": "^0.8.20"
},
"devDependencies": {
- "@angular/cli": "1.6.3",
+ "@angular/cli": "1.6.4",
"@angular/compiler-cli": "^5.1.3",
"@angular/language-service": "^5.1.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addon-notes": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/angular": "^3.3.3",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addon-notes": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/angular": "^3.4.0-alpha.4",
"@types/jasmine": "~2.8.3",
"@types/node": "~6.0.96",
- "codelyzer": "^3.1.2",
+ "global": "^4.3.2",
"jasmine-core": "~2.8.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~1.7.0",
@@ -49,7 +48,6 @@
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.2.2",
"ts-node": "~3.3.0",
- "tslint": "~5.8.0",
"typescript": "^2.4.0"
}
}
diff --git a/examples/angular-cli/src/app/app.component.css b/examples/angular-cli/src/app/app.component.css
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/examples/angular-cli/src/app/app.component.html b/examples/angular-cli/src/app/app.component.html
index 230f4edc068..6fc3931e8da 100644
--- a/examples/angular-cli/src/app/app.component.html
+++ b/examples/angular-cli/src/app/app.component.html
@@ -1,4 +1,7 @@
+
+ This should be hidden, if not - scss is not loaded as needed.
+
Welcome to {{title}}!
diff --git a/examples/angular-cli/src/app/app.component.scss b/examples/angular-cli/src/app/app.component.scss
new file mode 100644
index 00000000000..8b20dbe44d7
--- /dev/null
+++ b/examples/angular-cli/src/app/app.component.scss
@@ -0,0 +1,5 @@
+$display: none;
+
+.hide {
+ display: $display;
+}
diff --git a/examples/angular-cli/src/app/app.component.spec.ts b/examples/angular-cli/src/app/app.component.spec.ts
index fe5d07ecaf8..32ab9b0638a 100644
--- a/examples/angular-cli/src/app/app.component.spec.ts
+++ b/examples/angular-cli/src/app/app.component.spec.ts
@@ -4,30 +4,39 @@ import 'jasmine';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
- beforeEach(async(() => {
- TestBed.configureTestingModule({
- declarations: [
- AppComponent
- ],
- }).compileComponents();
- }));
+ beforeEach(
+ async(() => {
+ TestBed.configureTestingModule({
+ declarations: [AppComponent],
+ }).compileComponents();
+ })
+ );
- it('should create the app', async(() => {
- const fixture = TestBed.createComponent(AppComponent);
- const app = fixture.debugElement.componentInstance;
- expect(app).toBeTruthy();
- }));
+ it(
+ 'should create the app',
+ async(() => {
+ const fixture = TestBed.createComponent(AppComponent);
+ const app = fixture.debugElement.componentInstance;
+ expect(app).toBeTruthy();
+ })
+ );
- it(`should have as title 'app'`, async(() => {
- const fixture = TestBed.createComponent(AppComponent);
- const app = fixture.debugElement.componentInstance;
- expect(app.title).toEqual('app');
- }));
+ it(
+ `should have as title 'app'`,
+ async(() => {
+ const fixture = TestBed.createComponent(AppComponent);
+ const app = fixture.debugElement.componentInstance;
+ expect(app.title).toEqual('app');
+ })
+ );
- it('should render title in a h1 tag', async(() => {
- const fixture = TestBed.createComponent(AppComponent);
- fixture.detectChanges();
- const compiled = fixture.debugElement.nativeElement;
- expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
- }));
+ it(
+ 'should render title in a h1 tag',
+ async(() => {
+ const fixture = TestBed.createComponent(AppComponent);
+ fixture.detectChanges();
+ const compiled = fixture.debugElement.nativeElement;
+ expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
+ })
+ );
});
diff --git a/examples/angular-cli/src/app/app.component.ts b/examples/angular-cli/src/app/app.component.ts
index 7b0f6728315..2b61cd26dcb 100644
--- a/examples/angular-cli/src/app/app.component.ts
+++ b/examples/angular-cli/src/app/app.component.ts
@@ -1,9 +1,9 @@
import { Component } from '@angular/core';
@Component({
- selector: 'app-root',
+ selector: 'storybook-app-root',
templateUrl: './app.component.html',
- styleUrls: ['./app.component.css']
+ styleUrls: ['./app.component.scss'],
})
export class AppComponent {
title = 'app';
diff --git a/examples/angular-cli/src/app/app.module.ts b/examples/angular-cli/src/app/app.module.ts
index f65716351aa..5ce7811a4c0 100644
--- a/examples/angular-cli/src/app/app.module.ts
+++ b/examples/angular-cli/src/app/app.module.ts
@@ -4,13 +4,9 @@ import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
@NgModule({
- declarations: [
- AppComponent
- ],
- imports: [
- BrowserModule
- ],
+ declarations: [AppComponent],
+ imports: [BrowserModule],
providers: [],
- bootstrap: [AppComponent]
+ bootstrap: [AppComponent],
})
-export class AppModule { }
+export class AppModule {}
diff --git a/examples/angular-cli/src/assets/common.css b/examples/angular-cli/src/assets/common.css
new file mode 100644
index 00000000000..a0c44908ff2
--- /dev/null
+++ b/examples/angular-cli/src/assets/common.css
@@ -0,0 +1,3 @@
+.css-rules-warning {
+ display: none;
+}
diff --git a/examples/angular-cli/src/cssWarning.js b/examples/angular-cli/src/cssWarning.js
new file mode 100644
index 00000000000..924b2698233
--- /dev/null
+++ b/examples/angular-cli/src/cssWarning.js
@@ -0,0 +1,10 @@
+import { document } from 'global';
+
+export default function addCssWarning() {
+ const warning = document.createElement('h1');
+ warning.textContent = 'CSS rules are not configured as needed';
+ warning.className = 'css-rules-warning';
+ warning.style.color = 'red';
+
+ document.body.insertBefore(warning, document.body.firstChild);
+}
diff --git a/examples/angular-cli/src/environments/environment.prod.ts b/examples/angular-cli/src/environments/environment.prod.ts
index 3612073bc31..c9669790be1 100644
--- a/examples/angular-cli/src/environments/environment.prod.ts
+++ b/examples/angular-cli/src/environments/environment.prod.ts
@@ -1,3 +1,3 @@
export const environment = {
- production: true
+ production: true,
};
diff --git a/examples/angular-cli/src/environments/environment.ts b/examples/angular-cli/src/environments/environment.ts
index b7f639aecac..cf6bba0df38 100644
--- a/examples/angular-cli/src/environments/environment.ts
+++ b/examples/angular-cli/src/environments/environment.ts
@@ -4,5 +4,5 @@
// The list of which env maps to which file can be found in `.angular-cli.json`.
export const environment = {
- production: false
+ production: false,
};
diff --git a/examples/angular-cli/src/polyfills.ts b/examples/angular-cli/src/polyfills.ts
index 7831e97b79a..fbd11b81851 100644
--- a/examples/angular-cli/src/polyfills.ts
+++ b/examples/angular-cli/src/polyfills.ts
@@ -41,21 +41,16 @@
import 'core-js/es6/reflect';
import 'core-js/es7/reflect';
-
/**
* Required to support Web Animations `@angular/animation`.
* Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
**/
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
-
-
/***************************************************************************************************
* Zone JS is required by Angular itself.
*/
-import 'zone.js/dist/zone'; // Included with Angular CLI.
-
-
+import 'zone.js/dist/zone'; // Included with Angular CLI.
/***************************************************************************************************
* APPLICATION IMPORTS
diff --git a/examples/angular-cli/src/stories/addon-actions.stories.ts b/examples/angular-cli/src/stories/addon-actions.stories.ts
index 8154940d723..6820b38ce4c 100644
--- a/examples/angular-cli/src/stories/addon-actions.stories.ts
+++ b/examples/angular-cli/src/stories/addon-actions.stories.ts
@@ -7,8 +7,8 @@ storiesOf('Addon Actions', module)
component: Button,
props: {
text: 'Action only',
- onClick: action('log 1')
- }
+ onClick: action('log 1'),
+ },
}))
.add('Action and method', () => ({
component: Button,
@@ -18,6 +18,6 @@ storiesOf('Addon Actions', module)
console.log(e);
e.preventDefault();
action('log2')(e.target);
- }
- }
+ },
+ },
}));
diff --git a/examples/angular-cli/src/stories/addon-knobs.stories.ts b/examples/angular-cli/src/stories/addon-knobs.stories.ts
index 7f18bf98584..9671aa8fc1f 100644
--- a/examples/angular-cli/src/stories/addon-knobs.stories.ts
+++ b/examples/angular-cli/src/stories/addon-knobs.stories.ts
@@ -28,8 +28,8 @@ storiesOf('Addon Knobs', module)
props: {
name,
age,
- phoneNumber
- }
+ phoneNumber,
+ },
};
})
.add('All knobs', () => {
@@ -64,7 +64,7 @@ storiesOf('Addon Knobs', module)
border,
today,
items,
- nice
- }
+ nice,
+ },
};
});
diff --git a/examples/angular-cli/src/stories/addon-notes.stories.ts b/examples/angular-cli/src/stories/addon-notes.stories.ts
index bee7284d04e..64468bb5e25 100644
--- a/examples/angular-cli/src/stories/addon-notes.stories.ts
+++ b/examples/angular-cli/src/stories/addon-notes.stories.ts
@@ -10,7 +10,7 @@ storiesOf('Addon Notes', module)
props: {
text: 'Notes on some Button',
onClick: () => {},
- }
+ },
}))
)
.add(
@@ -28,6 +28,6 @@ storiesOf('Addon Notes', module)
props: {
text: 'Notes with HTML',
onClick: () => {},
- }
+ },
}))
);
diff --git a/examples/angular-cli/src/stories/all-knobs.component.ts b/examples/angular-cli/src/stories/all-knobs.component.ts
index 52c4976b694..56574f00447 100644
--- a/examples/angular-cli/src/stories/all-knobs.component.ts
+++ b/examples/angular-cli/src/stories/all-knobs.component.ts
@@ -1,8 +1,7 @@
-import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
-import { NgStyle } from '@angular/common';
+import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';
@Component({
- selector: 'simple-knobs-component',
+ selector: 'storybook-simple-knobs-component',
template: `
My name is {{ name }},
@@ -18,15 +17,9 @@ import { NgStyle } from '@angular/common';
Nice to meet you!
Leave me alone!
- `
+ `,
})
export class AllKnobsComponent implements OnChanges, OnInit {
- ngOnInit(): void {
- console.log('on init, user component');
- }
- ngOnChanges(changes: SimpleChanges): void {
- console.log(changes);
- }
@Input() price;
@Input() border;
@Input() fruit;
@@ -39,4 +32,11 @@ export class AllKnobsComponent implements OnChanges, OnInit {
constructor() {
console.log('constructor');
}
+
+ ngOnInit(): void {
+ console.log('on init, user component');
+ }
+ ngOnChanges(changes: SimpleChanges): void {
+ console.log(changes);
+ }
}
diff --git a/examples/angular-cli/src/stories/component-with-di/di.component.stories.ts b/examples/angular-cli/src/stories/component-with-di/di.component.stories.ts
index e3bb1396b8a..e17f46d47c2 100644
--- a/examples/angular-cli/src/stories/component-with-di/di.component.stories.ts
+++ b/examples/angular-cli/src/stories/component-with-di/di.component.stories.ts
@@ -6,14 +6,13 @@ storiesOf('Component dependencies', module)
.add('inputs and inject dependencies', () => ({
component: DiComponent,
props: {
- title: 'Component dependencies'
- }
+ title: 'Component dependencies',
+ },
}))
.addDecorator(withKnobs)
.add('inputs and inject dependencies with knobs', () => ({
component: DiComponent,
props: {
- title: text('title', 'Component dependencies')
- }
+ title: text('title', 'Component dependencies'),
+ },
}));
-
diff --git a/examples/angular-cli/src/stories/component-with-di/di.component.ts b/examples/angular-cli/src/stories/component-with-di/di.component.ts
index e3bb5df5dec..2c96f1b107b 100644
--- a/examples/angular-cli/src/stories/component-with-di/di.component.ts
+++ b/examples/angular-cli/src/stories/component-with-di/di.component.ts
@@ -3,11 +3,9 @@ import { Component, Input, InjectionToken, Injector, ElementRef, Inject } from '
export const TEST_TOKEN = new InjectionToken('test');
@Component({
- selector: 'di-component',
+ selector: 'storybook-di-component',
templateUrl: './di.component.html',
- providers: [
- { provide: TEST_TOKEN, useValue: 123}
- ]
+ providers: [{ provide: TEST_TOKEN, useValue: 123 }],
})
export class DiComponent {
@Input() title: string;
diff --git a/examples/angular-cli/src/stories/custom-metadata.stories.ts b/examples/angular-cli/src/stories/custom-metadata.stories.ts
index 80e014205ae..9b146c1e91c 100644
--- a/examples/angular-cli/src/stories/custom-metadata.stories.ts
+++ b/examples/angular-cli/src/stories/custom-metadata.stories.ts
@@ -4,21 +4,20 @@ import { withKnobs, text } from '@storybook/addon-knobs/angular';
import { NameComponent } from './name.component';
import { CustomPipePipe } from './custom.pipe';
import { DummyService } from './moduleMetadata/dummy.service';
-import { ServiceComponent } from './moduleMetadata/service.component'
+import { ServiceComponent } from './moduleMetadata/service.component';
-storiesOf('Custom Pipe', module)
- .add('Default', () => ({
- component: NameComponent,
- props: {
- field: 'foobar',
- },
- moduleMetadata: {
- imports: [],
- schemas: [],
- declarations: [CustomPipePipe],
- providers: []
- }
- }));
+storiesOf('Custom Pipe', module).add('Default', () => ({
+ component: NameComponent,
+ props: {
+ field: 'foobar',
+ },
+ moduleMetadata: {
+ imports: [],
+ schemas: [],
+ declarations: [CustomPipePipe],
+ providers: [],
+ },
+}));
storiesOf('Custom Pipe/With Knobs', module)
.addDecorator(withKnobs)
@@ -31,37 +30,37 @@ storiesOf('Custom Pipe/With Knobs', module)
imports: [],
schemas: [],
declarations: [CustomPipePipe],
- providers: []
- }
+ providers: [],
+ },
}));
storiesOf('Custom ngModule metadata', module)
.add('simple', () => ({
component: ServiceComponent,
props: {
- name: 'Static name'
+ name: 'Static name',
},
moduleMetadata: {
imports: [],
schemas: [],
declarations: [],
- providers: [DummyService]
- }
+ providers: [DummyService],
+ },
}))
.addDecorator(withKnobs)
.add('with knobs', () => {
- const name = text('Name', 'Dynamic knob');
+ const name = text('name', 'Dynamic knob');
return {
component: ServiceComponent,
props: {
- name
+ name,
},
moduleMetadata: {
imports: [],
schemas: [],
declarations: [],
- providers: [DummyService]
- }
+ providers: [DummyService],
+ },
};
});
diff --git a/examples/angular-cli/src/stories/custom.pipe.ts b/examples/angular-cli/src/stories/custom.pipe.ts
index 7c72cbc89bd..0e55d112c41 100644
--- a/examples/angular-cli/src/stories/custom.pipe.ts
+++ b/examples/angular-cli/src/stories/custom.pipe.ts
@@ -1,7 +1,7 @@
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
- name: 'customPipe'
+ name: 'customPipe',
})
export class CustomPipePipe implements PipeTransform {
transform(value: any, args?: any): any {
diff --git a/examples/angular-cli/src/stories/customControlValueAccessor/custom-cva-component.stories.ts b/examples/angular-cli/src/stories/customControlValueAccessor/custom-cva-component.stories.ts
index 214235d7be1..441aa4459ed 100644
--- a/examples/angular-cli/src/stories/customControlValueAccessor/custom-cva-component.stories.ts
+++ b/examples/angular-cli/src/stories/customControlValueAccessor/custom-cva-component.stories.ts
@@ -1,17 +1,19 @@
-import {storiesOf} from '@storybook/angular';
-import {action} from '@storybook/addon-actions';
-import {withNotes} from '@storybook/addon-notes';
-import {CustomCvaComponent} from './custom-cva.component';
+import { storiesOf } from '@storybook/angular';
+import { action } from '@storybook/addon-actions';
+import { withNotes } from '@storybook/addon-notes';
+import { CustomCvaComponent } from './custom-cva.component';
-const description = `
+const description = `
This is an example of component that implements ControlValueAccessor interface
`;
-storiesOf('ngModel', module)
- .add('custom ControlValueAccessor', withNotes(description)(() => ({
+storiesOf('ngModel', module).add(
+ 'custom ControlValueAccessor',
+ withNotes(description)(() => ({
component: CustomCvaComponent,
props: {
ngModel: 'Type anything',
- ngModelChange: action('ngModelChnange')
- }
- })));
\ No newline at end of file
+ ngModelChange: action('ngModelChnange'),
+ },
+ }))
+);
diff --git a/examples/angular-cli/src/stories/customControlValueAccessor/custom-cva.component.ts b/examples/angular-cli/src/stories/customControlValueAccessor/custom-cva.component.ts
index 095c5254938..48a959aa474 100644
--- a/examples/angular-cli/src/stories/customControlValueAccessor/custom-cva.component.ts
+++ b/examples/angular-cli/src/stories/customControlValueAccessor/custom-cva.component.ts
@@ -4,7 +4,7 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
const NOOP = () => {};
@Component({
- selector: 'custom-cva-component',
+ selector: 'storybook-custom-cva-component',
template: `
{{value}}
@@ -14,8 +14,8 @@ const NOOP = () => {};
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CustomCvaComponent),
multi: true,
- }
- ]
+ },
+ ],
})
export class CustomCvaComponent implements ControlValueAccessor {
disabled: boolean;
diff --git a/examples/angular-cli/src/stories/index.ts b/examples/angular-cli/src/stories/index.ts
index 08847b24574..0a5a42b402e 100644
--- a/examples/angular-cli/src/stories/index.ts
+++ b/examples/angular-cli/src/stories/index.ts
@@ -4,40 +4,47 @@ import { linkTo } from '@storybook/addon-links';
import { Welcome, Button } from '@storybook/angular/demo';
import { AppComponent } from '../app/app.component';
-storiesOf('Welcome', module)
- .add('to Storybook', () => ({
- component: Welcome,
- props: {}
- }));
+storiesOf('Welcome', module).add('to Storybook', () => ({
+ component: Welcome,
+ props: {},
+}));
storiesOf('Button', module)
.add('with text', () => ({
- component: Button,
+ moduleMetadata: {
+ entryComponents: [Button, Welcome],
+ declarations: [Button, Welcome],
+ },
props: {
text: 'Hello Button',
- onClick: () => {}
- }
+ onClick: event => {
+ console.log('some bindings work');
+ console.log(event);
+ },
+ },
+ template: `
+ This is a template
+
+
+ `,
}))
.add('with some emoji', () => ({
component: Button,
props: {
text: '😀 😎 👍 💯',
- onClick: () => {}
- }
+ onClick: () => {},
+ },
}));
-storiesOf('Another Button', module)
- .add('button with link to another story', () => ({
- component: Button,
- props: {
- text: 'Go to Welcome Story',
- onClick: linkTo('Welcome')
- }
- }));
-
-storiesOf('App Component', module)
- .add('Component with separate template', () => ({
- component: AppComponent,
- props: {}
- }));
+storiesOf('Another Button', module).add('button with link to another story', () => ({
+ component: Button,
+ props: {
+ text: 'Go to Welcome Story',
+ onClick: linkTo('Welcome'),
+ },
+}));
+storiesOf('App Component', module).add('Component with separate template', () => ({
+ component: AppComponent,
+ props: {},
+}));
diff --git a/examples/angular-cli/src/stories/knobs.component.ts b/examples/angular-cli/src/stories/knobs.component.ts
index 922f552b309..170137c965c 100644
--- a/examples/angular-cli/src/stories/knobs.component.ts
+++ b/examples/angular-cli/src/stories/knobs.component.ts
@@ -1,14 +1,14 @@
-import { Component, Input, Output, EventEmitter } from '@angular/core';
+import { Component, Input } from '@angular/core';
@Component({
- selector: 'simple-knobs-component',
+ selector: 'storybook-simple-knobs-component',
template: `
I am {{ name }} and I'm {{ age }} years old.
Phone Number: {{ phoneNumber }}
- `
+ `,
})
export class SimpleKnobsComponent {
- @Input() name;
- @Input() age;
- @Input() phoneNumber;
+ @Input() name;
+ @Input() age;
+ @Input() phoneNumber;
}
diff --git a/examples/angular-cli/src/stories/moduleMetadata/dummy.service.ts b/examples/angular-cli/src/stories/moduleMetadata/dummy.service.ts
index 2bc0173e0d9..fb2c3e894b1 100644
--- a/examples/angular-cli/src/stories/moduleMetadata/dummy.service.ts
+++ b/examples/angular-cli/src/stories/moduleMetadata/dummy.service.ts
@@ -2,16 +2,13 @@ import { Injectable } from '@angular/core';
@Injectable()
export class DummyService {
- constructor() { }
+ constructor() {}
getItems() {
- return new Promise((resolve) => {
+ return new Promise(resolve => {
setTimeout(() => {
- resolve([
- "Joe",
- "Jane"
- ])
- }, 2000)
- })
+ resolve(['Joe', 'Jane']);
+ }, 2000);
+ });
}
}
diff --git a/examples/angular-cli/src/stories/moduleMetadata/service.component.ts b/examples/angular-cli/src/stories/moduleMetadata/service.component.ts
index 78c02750fdd..d9a8b931e14 100644
--- a/examples/angular-cli/src/stories/moduleMetadata/service.component.ts
+++ b/examples/angular-cli/src/stories/moduleMetadata/service.component.ts
@@ -1,8 +1,8 @@
-import { Component, Input, Output, EventEmitter } from '@angular/core';
+import { Component, Input, OnInit } from '@angular/core';
import { DummyService } from './dummy.service';
@Component({
- selector: 'simple-service-component',
+ selector: 'storybook-simple-service-component',
template: `
{{ name }}:
@@ -10,9 +10,9 @@ import { DummyService } from './dummy.service';
{{ item }}
- `
+ `,
})
-export class ServiceComponent {
+export class ServiceComponent implements OnInit {
items;
@Input() name;
diff --git a/examples/angular-cli/src/stories/name.component.ts b/examples/angular-cli/src/stories/name.component.ts
index 79a6e95e21e..b357d8612b9 100644
--- a/examples/angular-cli/src/stories/name.component.ts
+++ b/examples/angular-cli/src/stories/name.component.ts
@@ -1,8 +1,8 @@
import { Component, Input } from '@angular/core';
@Component({
- selector: 'name',
- template: `{{ field | customPipe }} `
+ selector: 'storybook-name',
+ template: `{{ field | customPipe }} `,
})
export class NameComponent {
@Input() field;
diff --git a/examples/angular-cli/src/test.ts b/examples/angular-cli/src/test.ts
index cd612eeb0e2..fe4ee8c6c32 100644
--- a/examples/angular-cli/src/test.ts
+++ b/examples/angular-cli/src/test.ts
@@ -9,7 +9,7 @@ import 'zone.js/dist/fake-async-test';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
- platformBrowserDynamicTesting
+ platformBrowserDynamicTesting,
} from '@angular/platform-browser-dynamic/testing';
// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
@@ -17,13 +17,10 @@ declare const __karma__: any;
declare const require: any;
// Prevent Karma from running prematurely.
-__karma__.loaded = function () {};
+__karma__.loaded = function() {};
// First, initialize the Angular testing environment.
-getTestBed().initTestEnvironment(
- BrowserDynamicTestingModule,
- platformBrowserDynamicTesting()
-);
+getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
diff --git a/examples/angular-cli/tslint.json b/examples/angular-cli/tslint.json
deleted file mode 100644
index 0db5751c784..00000000000
--- a/examples/angular-cli/tslint.json
+++ /dev/null
@@ -1,142 +0,0 @@
-{
- "rulesDirectory": [
- "node_modules/codelyzer"
- ],
- "rules": {
- "arrow-return-shorthand": true,
- "callable-types": true,
- "class-name": true,
- "comment-format": [
- true,
- "check-space"
- ],
- "curly": true,
- "eofline": true,
- "forin": true,
- "import-blacklist": [
- true,
- "rxjs"
- ],
- "import-spacing": true,
- "indent": [
- true,
- "spaces"
- ],
- "interface-over-type-literal": true,
- "label-position": true,
- "max-line-length": [
- true,
- 140
- ],
- "member-access": false,
- "member-ordering": [
- true,
- {
- "order": [
- "static-field",
- "instance-field",
- "static-method",
- "instance-method"
- ]
- }
- ],
- "no-arg": true,
- "no-bitwise": true,
- "no-console": [
- true,
- "debug",
- "info",
- "time",
- "timeEnd",
- "trace"
- ],
- "no-construct": true,
- "no-debugger": true,
- "no-duplicate-super": true,
- "no-empty": false,
- "no-empty-interface": true,
- "no-eval": true,
- "no-inferrable-types": [
- true,
- "ignore-params"
- ],
- "no-misused-new": true,
- "no-non-null-assertion": true,
- "no-shadowed-variable": true,
- "no-string-literal": false,
- "no-string-throw": true,
- "no-switch-case-fall-through": true,
- "no-trailing-whitespace": true,
- "no-unnecessary-initializer": true,
- "no-unused-expression": true,
- "no-use-before-declare": true,
- "no-var-keyword": true,
- "object-literal-sort-keys": false,
- "one-line": [
- true,
- "check-open-brace",
- "check-catch",
- "check-else",
- "check-whitespace"
- ],
- "prefer-const": true,
- "quotemark": [
- true,
- "single"
- ],
- "radix": true,
- "semicolon": [
- true,
- "always"
- ],
- "triple-equals": [
- true,
- "allow-null-check"
- ],
- "typedef-whitespace": [
- true,
- {
- "call-signature": "nospace",
- "index-signature": "nospace",
- "parameter": "nospace",
- "property-declaration": "nospace",
- "variable-declaration": "nospace"
- }
- ],
- "typeof-compare": true,
- "unified-signatures": true,
- "variable-name": false,
- "whitespace": [
- true,
- "check-branch",
- "check-decl",
- "check-operator",
- "check-separator",
- "check-type"
- ],
- "directive-selector": [
- true,
- "attribute",
- "app",
- "camelCase"
- ],
- "component-selector": [
- true,
- "element",
- "app",
- "kebab-case"
- ],
- "use-input-property-decorator": true,
- "use-output-property-decorator": true,
- "use-host-property-decorator": true,
- "no-input-rename": true,
- "no-output-rename": true,
- "use-life-cycle-interface": true,
- "use-pipe-transform-interface": true,
- "component-class-suffix": true,
- "directive-class-suffix": true,
- "no-access-missing-member": true,
- "templates-use-public": true,
- "invoke-injectable": true
- }
-}
diff --git a/examples/cra-kitchen-sink/README.md b/examples/cra-kitchen-sink/README.md
deleted file mode 100644
index 8b137891791..00000000000
--- a/examples/cra-kitchen-sink/README.md
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/examples/cra-kitchen-sink/__mocks__/fileMock.js b/examples/cra-kitchen-sink/__mocks__/fileMock.js
deleted file mode 100644
index 105ff49748f..00000000000
--- a/examples/cra-kitchen-sink/__mocks__/fileMock.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = 'file-stub';
diff --git a/examples/cra-kitchen-sink/__mocks__/styleMock.js b/examples/cra-kitchen-sink/__mocks__/styleMock.js
deleted file mode 100644
index f053ebf7976..00000000000
--- a/examples/cra-kitchen-sink/__mocks__/styleMock.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = {};
diff --git a/examples/cra-kitchen-sink/config-addon-jest.json b/examples/cra-kitchen-sink/config-addon-jest.json
deleted file mode 100644
index f6ff7522b01..00000000000
--- a/examples/cra-kitchen-sink/config-addon-jest.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "verbose": true,
- "coverageDirectory": "coverage/",
- "notify": true,
- "transform": {
- ".*": "babel-jest"
- },
- "snapshotSerializers": [
- "enzyme-to-json/serializer"
- ],
- "setupFiles": [
- "/src/enzyme.js"
- ],
- "moduleNameMapper": {
- "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js",
- "\\.s?css$": "/__mocks__/styleMock.js"
- },
- "collectCoverage": true,
- "collectCoverageFrom": [
- "src/**/*.js",
- "src/*.js",
- "!src/.*",
- "!src/__test__/*",
- "!src/**/__test__/*",
- "!src/**/index.js",
- "!src/**/story.js"
- ]
-}
diff --git a/examples/cra-kitchen-sink/package.json b/examples/cra-kitchen-sink/package.json
index 2e1409277ae..dbd27519c56 100644
--- a/examples/cra-kitchen-sink/package.json
+++ b/examples/cra-kitchen-sink/package.json
@@ -1,11 +1,10 @@
{
"name": "cra-kitchen-sink",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"scripts": {
"build": "react-scripts build",
"build-storybook": "build-storybook -s public",
"eject": "react-scripts eject",
- "generate-addon-jest-testresults": "jest src/stories/addon-jest.test.js --config=config-addon-jest.json --env=jsdom --json --outputFile=src/stories/addon-jest.testresults.json",
"start": "react-scripts start",
"storybook": "start-storybook -p 9010 -s public",
"test": "react-scripts test --env=jsdom"
@@ -19,28 +18,28 @@
"react-dom": "^16.2.0"
},
"devDependencies": {
- "@storybook/addon-a11y": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-backgrounds": "^3.3.3",
- "@storybook/addon-centered": "^3.3.3",
- "@storybook/addon-events": "^3.3.3",
- "@storybook/addon-info": "^3.3.3",
- "@storybook/addon-jest": "^3.3.3",
- "@storybook/addon-knobs": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addon-notes": "^3.3.3",
- "@storybook/addon-options": "^3.3.3",
- "@storybook/addon-storyshots": "^3.3.3",
- "@storybook/addon-viewport": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/client-logger": "^3.3.3",
- "@storybook/components": "^3.3.3",
- "@storybook/react": "^3.3.3",
- "babel-jest": "^22.0.4",
+ "@storybook/addon-a11y": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-backgrounds": "^3.4.0-alpha.4",
+ "@storybook/addon-centered": "^3.4.0-alpha.4",
+ "@storybook/addon-events": "^3.4.0-alpha.4",
+ "@storybook/addon-info": "^3.4.0-alpha.4",
+ "@storybook/addon-jest": "^3.4.0-alpha.4",
+ "@storybook/addon-knobs": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addon-notes": "^3.4.0-alpha.4",
+ "@storybook/addon-options": "^3.4.0-alpha.4",
+ "@storybook/addon-storyshots": "^3.4.0-alpha.4",
+ "@storybook/addon-viewport": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/client-logger": "^3.4.0-alpha.4",
+ "@storybook/components": "^3.4.0-alpha.4",
+ "@storybook/react": "^3.4.0-alpha.4",
+ "babel-jest": "^22.0.6",
"enzyme": "^3.3.0",
"enzyme-adapter-react-16": "^1.1.0",
"enzyme-to-json": "^3.2.2",
- "jest": "^22.0.4",
+ "jest": "^22.0.6",
"react-scripts": "^1.0.17"
},
"private": true
diff --git a/examples/cra-kitchen-sink/src/enzyme.js b/examples/cra-kitchen-sink/src/enzyme.js
deleted file mode 100644
index fc7b0dce1f5..00000000000
--- a/examples/cra-kitchen-sink/src/enzyme.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import Enzyme from 'enzyme';
-import Adapter from 'enzyme-adapter-react-16';
-
-Enzyme.configure({ adapter: new Adapter() });
diff --git a/examples/cra-kitchen-sink/src/stories/__snapshots__/index.stories.storyshot b/examples/cra-kitchen-sink/src/stories/__snapshots__/index.stories.storyshot
index a45e4d7aba3..f16b77e5688 100644
--- a/examples/cra-kitchen-sink/src/stories/__snapshots__/index.stories.storyshot
+++ b/examples/cra-kitchen-sink/src/stories/__snapshots__/index.stories.storyshot
@@ -92,92 +92,110 @@ exports[`Storyshots Button addons composition 1`] = `
Story Source
-
-
+
- <div
-
-
-
+ <div
+
+
+
+ >
+
+
+
- >
-
-
-
-
-
-
-
+
+
- click the
-
-
-
-
+ click the
+
+
+
- <InfoButton
-
-
-
+ <InfoButton
+
+
+
+ />
+
+
+
- />
-
-
-
-
+ label in top right for info about "
+
+
+
- label in top right for info about "
-
-
-
-
+ addons composition
+
+
+
- addons composition
-
-
-
-
+ "
+
+
+
- "
-
-
-
-
- </div>
-
+
+ </div>
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -278,92 +296,110 @@ exports[`Storyshots Button with new info 1`] = `
Story Source
-
-
+
- <Container
-
-
-
+ <Container
+
+
+
+ >
+
+
+
- >
-
-
-
-
-
-
-
+
+
- click the
-
-
-
-
+ click the
+
+
+
- <InfoButton
-
-
-
+ <InfoButton
+
+
+
+ />
+
+
+
- />
-
-
-
-
+ label in top right for info about "
+
+
+
- label in top right for info about "
-
-
-
-
+ with new info
+
+
+
- with new info
-
-
-
-
+ "
+
+
+
- "
-
-
-
-
- </Container>
-
+
+ </Container>
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -674,85 +710,103 @@ exports[`Storyshots Button with some info 1`] = `
Story Source
-
-
+
- <Container
-
-
-
+ <Container
+
+
+
+ >
+
+
+
- >
-
-
-
-
+ click the
+
+
+
- click the
-
-
-
-
+ <InfoButton
+
+
+
+ />
+
+
+
- <InfoButton
-
-
-
+ label in top right for info about "
+
+
+
- />
-
-
-
-
+ with some info
+
+
+
- label in top right for info about "
-
-
-
-
+ "
+
+
+
- with some info
-
-
-
-
- "
-
-
-
-
- </Container>
-
+
+ </Container>
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
diff --git a/examples/official-storybook/addons.js b/examples/official-storybook/addons.js
index 44ceaf69216..008791934a2 100644
--- a/examples/official-storybook/addons.js
+++ b/examples/official-storybook/addons.js
@@ -1,5 +1,4 @@
/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */
-
import '@storybook/addon-actions/register';
import '@storybook/addon-links/register';
import '@storybook/addon-events/register';
@@ -9,3 +8,7 @@ import '@storybook/addon-knobs/register';
import '@storybook/addon-backgrounds/register';
import '@storybook/addon-a11y/register';
import '@storybook/addon-jest/register';
+
+import addHeadWarning from './head-warning';
+
+addHeadWarning('Manager');
diff --git a/examples/official-storybook/components/DelayedRender.js b/examples/official-storybook/components/DelayedRender.js
new file mode 100644
index 00000000000..4ee7c0b2950
--- /dev/null
+++ b/examples/official-storybook/components/DelayedRender.js
@@ -0,0 +1,22 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class DelayedRender extends Component {
+ static propTypes = {
+ children: PropTypes.node.isRequired,
+ };
+ state = {
+ show: false,
+ };
+
+ componentDidMount() {
+ setTimeout(() => {
+ this.setState({
+ show: true,
+ });
+ }, 1000);
+ }
+ render() {
+ return this.state.show ? this.props.children :
;
+ }
+}
diff --git a/examples/official-storybook/config-addon-jest.json b/examples/official-storybook/config-addon-jest.json
deleted file mode 100644
index 6d698c6201a..00000000000
--- a/examples/official-storybook/config-addon-jest.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "verbose": true,
- "coverageDirectory": "coverage/",
- "notify": true,
- "transform": {
- ".*": "babel-jest"
- },
- "snapshotSerializers": [
- "enzyme-to-json/serializer"
- ],
- "setupFiles": [
- "
/src/enzyme.js"
- ],
- "moduleNameMapper": {
- "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js",
- "\\.s?css$": "/__mocks__/styleMock.js"
- },
- "collectCoverage": true,
- "collectCoverageFrom": [
- "**/*.js",
- "*.js",
- "!.*",
- "!__test__/*",
- "!**/__test__/*",
- "!**/index.js",
- "!**/story.js"
- ]
-}
diff --git a/examples/official-storybook/config.js b/examples/official-storybook/config.js
index b013ea08ee2..e0a9c368c68 100644
--- a/examples/official-storybook/config.js
+++ b/examples/official-storybook/config.js
@@ -2,6 +2,9 @@
import { configure } from '@storybook/react';
import { setOptions } from '@storybook/addon-options';
import 'react-chromatic/storybook-addon';
+import addHeadWarning from './head-warning';
+
+addHeadWarning('Preview');
setOptions({
hierarchySeparator: /\/|\./,
diff --git a/examples/official-storybook/head-warning.js b/examples/official-storybook/head-warning.js
new file mode 100644
index 00000000000..9e89c5ba3da
--- /dev/null
+++ b/examples/official-storybook/head-warning.js
@@ -0,0 +1,10 @@
+import { document } from 'global';
+
+export default function addHeadWarning(bundle) {
+ const warning = document.createElement('h1');
+ warning.textContent = `${bundle} head not loaded`;
+ warning.className = `${bundle.toLowerCase()}-head-not-loaded`;
+ warning.style.color = 'red';
+
+ document.body.insertBefore(warning, document.body.firstChild);
+}
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-default-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-default-1-snap.png
new file mode 100644
index 00000000000..fbbe84900d1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-default-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-disabled-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-disabled-1-snap.png
new file mode 100644
index 00000000000..70dd2bc2f3a
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-disabled-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-invalid-contrast-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-invalid-contrast-1-snap.png
new file mode 100644
index 00000000000..2460839263f
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-invalid-contrast-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-label-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-label-1-snap.png
new file mode 100644
index 00000000000..1ee7b54e1be
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-a-11-y-label-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-all-types-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-all-types-1-snap.png
new file mode 100644
index 00000000000..a9df16b04af
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-all-types-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-circular-payload-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-circular-payload-1-snap.png
new file mode 100644
index 00000000000..218526a01d1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-circular-payload-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-decorated-action-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-decorated-action-1-snap.png
new file mode 100644
index 00000000000..9c9166296ce
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-decorated-action-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-function-name-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-function-name-1-snap.png
new file mode 100644
index 00000000000..0d4aaa0bc99
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-function-name-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-hello-world-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-hello-world-1-snap.png
new file mode 100644
index 00000000000..ecc7b4ddc0b
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-hello-world-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-reserved-keyword-as-name-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-reserved-keyword-as-name-1-snap.png
new file mode 100644
index 00000000000..9238344914e
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-actions-reserved-keyword-as-name-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-backgrounds-story-1-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-backgrounds-story-1-1-snap.png
new file mode 100644
index 00000000000..86597bb247d
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-backgrounds-story-1-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-backgrounds-story-2-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-backgrounds-story-2-1-snap.png
new file mode 100644
index 00000000000..0cf150013c4
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-backgrounds-story-2-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-events-logger-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-events-logger-1-snap.png
new file mode 100644
index 00000000000..1014aa61ab3
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-events-logger-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-decorator-use-info-as-story-decorator-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-decorator-use-info-as-story-decorator-1-snap.png
new file mode 100644
index 00000000000..3355d198fe1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-decorator-use-info-as-story-decorator-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-git-hub-issues-1814-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-git-hub-issues-1814-1-snap.png
new file mode 100644
index 00000000000..ddf2a0f8517
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-git-hub-issues-1814-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-markdown-displays-markdown-in-description-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-markdown-displays-markdown-in-description-1-snap.png
new file mode 100644
index 00000000000..3355d198fe1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-markdown-displays-markdown-in-description-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-header-shows-or-hides-info-addon-header-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-header-shows-or-hides-info-addon-header-1-snap.png
new file mode 100644
index 00000000000..3355d198fe1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-header-shows-or-hides-info-addon-header-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-inline-inlines-component-inside-story-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-inline-inlines-component-inside-story-1-snap.png
new file mode 100644
index 00000000000..611ec161493
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-inline-inlines-component-inside-story-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-prop-tables-exclude-exclude-component-from-prop-tables-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-prop-tables-exclude-exclude-component-from-prop-tables-1-snap.png
new file mode 100644
index 00000000000..7c1918ad162
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-prop-tables-exclude-exclude-component-from-prop-tables-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-prop-tables-shows-additional-component-prop-tables-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-prop-tables-shows-additional-component-prop-tables-1-snap.png
new file mode 100644
index 00000000000..3355d198fe1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-prop-tables-shows-additional-component-prop-tables-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-source-shows-or-hides-info-addon-source-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-source-shows-or-hides-info-addon-source-1-snap.png
new file mode 100644
index 00000000000..3355d198fe1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-source-shows-or-hides-info-addon-source-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-styles-extend-info-styles-with-an-object-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-styles-extend-info-styles-with-an-object-1-snap.png
new file mode 100644
index 00000000000..04ceac1031d
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-styles-extend-info-styles-with-an-object-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-styles-full-control-over-styles-using-a-function-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-styles-full-control-over-styles-using-a-function-1-snap.png
new file mode 100644
index 00000000000..3355d198fe1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-styles-full-control-over-styles-using-a-function-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-table-component-use-a-custom-component-for-the-table-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-table-component-use-a-custom-component-for-the-table-1-snap.png
new file mode 100644
index 00000000000..3355d198fe1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-options-table-component-use-a-custom-component-for-the-table-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-component-declaration-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-component-declaration-1-snap.png
new file mode 100644
index 00000000000..3355d198fe1
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-component-declaration-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-flow-declarations-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-flow-declarations-1-snap.png
new file mode 100644
index 00000000000..36fe51848ca
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-flow-declarations-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-prop-type-declarations-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-prop-type-declarations-1-snap.png
new file mode 100644
index 00000000000..db190e2f66a
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-info-react-docgen-comments-from-prop-type-declarations-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-jest-with-tests-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-jest-with-tests-1-snap.png
new file mode 100644
index 00000000000..4258b441e48
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-jest-with-tests-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-options-triggers-actions-via-button-with-debounce-delay-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-options-triggers-actions-via-button-with-debounce-delay-1-snap.png
new file mode 100644
index 00000000000..430b9fb5162
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-options-triggers-actions-via-button-with-debounce-delay-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-options-tweaks-static-values-with-debounce-delay-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-options-tweaks-static-values-with-debounce-delay-1-snap.png
new file mode 100644
index 00000000000..660f33b6256
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-options-tweaks-static-values-with-debounce-delay-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-triggers-actions-via-button-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-triggers-actions-via-button-1-snap.png
new file mode 100644
index 00000000000..430b9fb5162
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-triggers-actions-via-button-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-tweaks-static-values-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-tweaks-static-values-1-snap.png
new file mode 100644
index 00000000000..04a2658a761
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-knobs-with-knobs-tweaks-static-values-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-button-first-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-button-first-1-snap.png
new file mode 100644
index 00000000000..fb40b5db16b
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-button-first-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-button-second-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-button-second-1-snap.png
new file mode 100644
index 00000000000..6d087d53b2f
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-button-second-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-href-log-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-href-log-1-snap.png
new file mode 100644
index 00000000000..70565dbf129
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-href-log-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-link-first-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-link-first-1-snap.png
new file mode 100644
index 00000000000..a922d737e4c
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-link-first-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-link-second-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-link-second-1-snap.png
new file mode 100644
index 00000000000..8d6ebf31f0f
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-link-second-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-first-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-first-1-snap.png
new file mode 100644
index 00000000000..ef0b8750873
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-first-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-index-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-index-1-snap.png
new file mode 100644
index 00000000000..7c41d128e94
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-index-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-second-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-second-1-snap.png
new file mode 100644
index 00000000000..ef0b8750873
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-second-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-third-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-third-1-snap.png
new file mode 100644
index 00000000000..ef0b8750873
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-links-select-third-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-using-deprecated-api-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-using-deprecated-api-1-snap.png
new file mode 100644
index 00000000000..81f71fcab19
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-using-deprecated-api-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-with-notes-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-with-notes-1-snap.png
new file mode 100644
index 00000000000..f80197300e3
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-with-notes-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-with-notes-rendering-imported-markdown-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-with-notes-rendering-imported-markdown-1-snap.png
new file mode 100644
index 00000000000..f80197300e3
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-addon-notes-with-notes-rendering-imported-markdown-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-active-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-active-1-snap.png
new file mode 100644
index 00000000000..6d7daa5b12e
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-active-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-default-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-default-1-snap.png
new file mode 100644
index 00000000000..1bf514db90a
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-default-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-with-knobs-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-with-knobs-1-snap.png
new file mode 100644
index 00000000000..0f1839e46dc
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-menu-link-with-knobs-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-routed-link-w-href-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-routed-link-w-href-1-snap.png
new file mode 100644
index 00000000000..1073dd466f9
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-routed-link-w-href-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-routed-link-w-on-click-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-routed-link-w-on-click-1-snap.png
new file mode 100644
index 00000000000..59f351f2de3
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-components-routed-link-w-on-click-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-addon-panel-default-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-addon-panel-default-1-snap.png
new file mode 100644
index 00000000000..0c853d1a739
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-addon-panel-default-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-addon-panel-no-panels-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-addon-panel-no-panels-1-snap.png
new file mode 100644
index 00000000000..e192208fbff
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-addon-panel-no-panels-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-addon-panel-in-right-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-addon-panel-in-right-1-snap.png
new file mode 100644
index 00000000000..fe08a2acc01
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-addon-panel-in-right-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-default-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-default-1-snap.png
new file mode 100644
index 00000000000..98162d02802
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-default-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-full-screen-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-full-screen-1-snap.png
new file mode 100644
index 00000000000..f4e95060892
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-full-screen-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-no-addon-panel-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-no-addon-panel-1-snap.png
new file mode 100644
index 00000000000..aed2590447b
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-no-addon-panel-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-no-stories-panel-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-no-stories-panel-1-snap.png
new file mode 100644
index 00000000000..65b1173b8f8
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-layout-no-stories-panel-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-menu-item-default-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-menu-item-default-1-snap.png
new file mode 100644
index 00000000000..4af5b57351e
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-menu-item-default-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-header-simple-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-header-simple-1-snap.png
new file mode 100644
index 00000000000..687f6471da2
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-header-simple-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-empty-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-empty-1-snap.png
new file mode 100644
index 00000000000..113fea49283
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-empty-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-default-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-default-1-snap.png
new file mode 100644
index 00000000000..71c07f6497b
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-default-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-stories-hierarchy-exists-but-is-empty-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-stories-hierarchy-exists-but-is-empty-1-snap.png
new file mode 100644
index 00000000000..71c07f6497b
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-stories-hierarchy-exists-but-is-empty-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-with-stories-hierarchy-prop-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-with-stories-hierarchy-prop-1-snap.png
new file mode 100644
index 00000000000..46b67cd3938
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-panel-with-stories-hierarchy-prop-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-simple-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-simple-1-snap.png
new file mode 100644
index 00000000000..e331492ac0c
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-simple-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-with-hierarchy-hierarchy-separator-is-defined-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-with-hierarchy-hierarchy-separator-is-defined-1-snap.png
new file mode 100644
index 00000000000..27c04088a14
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-with-hierarchy-hierarchy-separator-is-defined-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-with-highlighting-when-stories-filter-is-provided-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-with-highlighting-when-stories-filter-is-provided-1-snap.png
new file mode 100644
index 00000000000..321ad79ff22
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-with-highlighting-when-stories-filter-is-provided-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-without-hierarchy-hierarchy-separator-is-defined-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-without-hierarchy-hierarchy-separator-is-defined-1-snap.png
new file mode 100644
index 00000000000..ef78d042821
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-stories-without-hierarchy-hierarchy-separator-is-defined-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-text-filter-with-filter-text-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-text-filter-with-filter-text-1-snap.png
new file mode 100644
index 00000000000..1a22876113e
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-text-filter-with-filter-text-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-text-filter-without-filter-text-1-snap.png b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-text-filter-without-filter-text-1-snap.png
new file mode 100644
index 00000000000..affbf41598e
Binary files /dev/null and b/examples/official-storybook/image-snapshots/__image_snapshots__/storyshots-image-runner-js-image-snapshots-ui-stories-text-filter-without-filter-text-1-snap.png differ
diff --git a/examples/official-storybook/image-snapshots/jest.config.js b/examples/official-storybook/image-snapshots/jest.config.js
new file mode 100644
index 00000000000..abf5ab79117
--- /dev/null
+++ b/examples/official-storybook/image-snapshots/jest.config.js
@@ -0,0 +1,11 @@
+const path = require('path');
+const globalJestConfig = require('../../../jest.config');
+
+const finalJestConfig = globalJestConfig;
+
+finalJestConfig.rootDir = path.join(__dirname, '../../..');
+finalJestConfig.testMatch = [
+ '/examples/official-storybook/image-snapshots/storyshots-image.runner.js',
+];
+
+module.exports = finalJestConfig;
diff --git a/examples/official-storybook/image-snapshots/storyshots-image.runner.js b/examples/official-storybook/image-snapshots/storyshots-image.runner.js
new file mode 100644
index 00000000000..6fd4a399d95
--- /dev/null
+++ b/examples/official-storybook/image-snapshots/storyshots-image.runner.js
@@ -0,0 +1,31 @@
+/* This file is not suffixed by ".test.js" to not being run with all other test files.
+* This test needs the static build of the storybook to run.
+* `yarn run image-snapshots` generates the static build & uses the image snapshots behavior of storyshots.
+* */
+import path from 'path';
+import fs from 'fs';
+import initStoryshots, { imageSnapshot } from '../../../addons/storyshots/src/index';
+
+// Image snapshots
+// We do screenshots against the static build of the storybook.
+// For this test to be meaningful, you must build the static version of the storybook *before* running this test suite.
+const pathToStorybookStatic = path.join(__dirname, '../', 'storybook-static');
+
+if (!fs.existsSync(pathToStorybookStatic)) {
+ console.error(
+ 'You are running image snapshots without having the static build of storybook. Please run "yarn run build-storybook" before running tests.'
+ );
+} else {
+ initStoryshots({
+ suite: 'Image snapshots',
+ framework: 'react',
+ configPath: path.join(__dirname, '..'),
+ test: imageSnapshot({
+ storybookUrl: `file://${pathToStorybookStatic}`,
+ getMatchOptions: () => ({
+ failureThreshold: 0.01, // 1% threshold,
+ failureThresholdType: 'percent',
+ }),
+ }),
+ });
+}
diff --git a/examples/official-storybook/manager-head.html b/examples/official-storybook/manager-head.html
new file mode 100644
index 00000000000..5a965218ffe
--- /dev/null
+++ b/examples/official-storybook/manager-head.html
@@ -0,0 +1,5 @@
+
diff --git a/examples/official-storybook/package.json b/examples/official-storybook/package.json
index 5b45b48a5ae..287e9a51dc1 100644
--- a/examples/official-storybook/package.json
+++ b/examples/official-storybook/package.json
@@ -1,28 +1,30 @@
{
"name": "official-storybook",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"scripts": {
"build-storybook": "build-storybook -c ./",
"storybook": "start-storybook -p 9010 -c ./",
- "chromatic": "chromatic test --storybook-addon --exit-zero-on-changes --app-code ab7m45tp9p"
+ "chromatic": "chromatic test --storybook-addon --exit-zero-on-changes --app-code ab7m45tp9p",
+ "generate-addon-jest-testresults": "jest --config=tests/addon-jest.config.json --json --outputFile=stories/addon-jest.testresults.json",
+ "image-snapshots": "yarn run build-storybook && jest --projects=./image-snapshots"
},
"devDependencies": {
- "@storybook/addon-a11y": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-backgrounds": "^3.3.3",
- "@storybook/addon-centered": "^3.3.3",
- "@storybook/addon-events": "^3.3.3",
- "@storybook/addon-info": "^3.3.3",
- "@storybook/addon-jest": "^3.3.3",
- "@storybook/addon-knobs": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addon-notes": "^3.3.3",
- "@storybook/addon-options": "^3.3.3",
- "@storybook/addon-storyshots": "^3.3.3",
- "@storybook/addon-viewport": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/components": "^3.3.3",
- "@storybook/react": "^3.3.3",
+ "@storybook/addon-a11y": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-backgrounds": "^3.4.0-alpha.4",
+ "@storybook/addon-centered": "^3.4.0-alpha.4",
+ "@storybook/addon-events": "^3.4.0-alpha.4",
+ "@storybook/addon-info": "^3.4.0-alpha.4",
+ "@storybook/addon-jest": "^3.4.0-alpha.4",
+ "@storybook/addon-knobs": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addon-notes": "^3.4.0-alpha.4",
+ "@storybook/addon-options": "^3.4.0-alpha.4",
+ "@storybook/addon-storyshots": "^3.4.0-alpha.4",
+ "@storybook/addon-viewport": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/components": "^3.4.0-alpha.4",
+ "@storybook/react": "^3.4.0-alpha.4",
"babel-jest": "^21.2.0",
"enzyme": "^3.3.0",
"enzyme-adapter-react-16": "^1.1.0",
diff --git a/examples/official-storybook/preview-head.html b/examples/official-storybook/preview-head.html
new file mode 100644
index 00000000000..ba4ac189b7f
--- /dev/null
+++ b/examples/official-storybook/preview-head.html
@@ -0,0 +1,5 @@
+
diff --git a/examples/official-storybook/stories/__snapshots__/addon-a11y.stories.storyshot b/examples/official-storybook/stories/__snapshots__/addon-a11y.stories.storyshot
index 40a2739f499..bc7f67110b4 100644
--- a/examples/official-storybook/stories/__snapshots__/addon-a11y.stories.storyshot
+++ b/examples/official-storybook/stories/__snapshots__/addon-a11y.stories.storyshot
@@ -23,3 +23,5 @@ exports[`Storyshots Addons|a11y Label 1`] = `
Testing the a11y addon
`;
+
+exports[`Storyshots Addons|a11y delayed render 1`] = `
`;
diff --git a/examples/official-storybook/stories/__snapshots__/addon-backgrounds.stories.storyshot b/examples/official-storybook/stories/__snapshots__/addon-backgrounds.stories.storyshot
index 1d884b6c1c4..7c24fd31103 100644
--- a/examples/official-storybook/stories/__snapshots__/addon-backgrounds.stories.storyshot
+++ b/examples/official-storybook/stories/__snapshots__/addon-backgrounds.stories.storyshot
@@ -2,7 +2,7 @@
exports[`Storyshots Addons|Backgrounds story 1 1`] = `
You should be able to switch backgrounds for this story
@@ -12,7 +12,7 @@ exports[`Storyshots Addons|Backgrounds story 1 1`] = `
exports[`Storyshots Addons|Backgrounds story 2 1`] = `
This one too!
diff --git a/examples/official-storybook/stories/__snapshots__/addon-info.stories.storyshot b/examples/official-storybook/stories/__snapshots__/addon-info.stories.storyshot
index 7a57c1477b5..4c177fc5dcf 100644
--- a/examples/official-storybook/stories/__snapshots__/addon-info.stories.storyshot
+++ b/examples/official-storybook/stories/__snapshots__/addon-info.stories.storyshot
@@ -58,41 +58,59 @@ exports[`Storyshots Addons|Info.Decorator Use Info as story decorator 1`] = `
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -335,64 +353,82 @@ exports[`Storyshots Addons|Info.GitHub issues #1814 1`] = `
Story Source
-
-
+
- <div
-
-
-
+ <div
+
+
+
+ >
+
+
+
- >
-
-
-
-
+ <Unknown
+
+
+
+ />
+
+
+
- <Unknown
-
-
-
+ <Unknown
+
+
+
+ />
+
+
+
- />
-
-
-
-
- <Unknown
-
-
-
- />
-
-
-
-
- </div>
-
+
+ </div>
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -517,61 +553,79 @@ exports[`Storyshots Addons|Info.Markdown Displays Markdown in description 1`] =
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- onClick
-
-
- =
+
+ onClick
+
+
+ =
- {
-
- clicked()
+
+ {
+
+ clicked()
+
+ }
- }
-
-
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -802,41 +856,59 @@ exports[`Storyshots Addons|Info.Options.TableComponent Use a custom component fo
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -964,41 +1036,59 @@ exports[`Storyshots Addons|Info.Options.header Shows or hides Info Addon header
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -1227,41 +1317,59 @@ exports[`Storyshots Addons|Info.Options.inline Inlines component inside story 1`
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -1500,41 +1608,59 @@ exports[`Storyshots Addons|Info.Options.propTables Shows additional component pr
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -1891,100 +2017,118 @@ exports[`Storyshots Addons|Info.Options.propTablesExclude Exclude component from
Story Source
-
-
+
- <div
-
-
-
+ <div
+
+
+
+ >
+
+
+
- >
-
-
-
-
- <BaseButton
-
-
+
+ <BaseButton
+
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
+ />
+
+
+
- />
-
-
-
-
- <FlowTypeButton
-
-
+
+ <FlowTypeButton
+
-
- label
-
-
- =
+
-
- "Flow Typed Button"
+ label
+
+
+ =
+
+
+ "Flow Typed Button"
+
+
-
-
-
+ />
+
+
+
- />
-
-
-
-
- </div>
-
+
+ </div>
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -2445,41 +2589,59 @@ exports[`Storyshots Addons|Info.Options.styles Extend info styles with an object
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -2710,41 +2872,59 @@ exports[`Storyshots Addons|Info.Options.styles Full control over styles using a
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -2984,61 +3164,79 @@ exports[`Storyshots Addons|Info.React Docgen Comments from Flow declarations 1`]
Story Source
-
-
+
- <FlowTypeButton
-
-
+
+ <FlowTypeButton
+
-
- onClick
-
-
- =
+
+ onClick
+
+
+ =
- {
-
- clicked()
+
+ {
+
+ clicked()
+
+ }
- }
-
-
-
- label
-
-
- =
+
-
- "Flow Typed Button"
+ label
+
+
+ =
+
+
+ "Flow Typed Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -3224,61 +3422,79 @@ exports[`Storyshots Addons|Info.React Docgen Comments from PropType declarations
Story Source
-
-
+
- <DocgenButton
-
-
+
+ <DocgenButton
+
-
- onClick
-
-
- =
+
+ onClick
+
+
+ =
- {
-
- clicked()
+
+ {
+
+ clicked()
+
+ }
- }
-
-
-
- label
-
-
- =
+
-
- "Docgen Button"
+ label
+
+
+ =
+
+
+ "Docgen Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
@@ -3685,61 +3901,79 @@ exports[`Storyshots Addons|Info.React Docgen Comments from component declaration
Story Source
-
-
+
- <BaseButton
-
-
+
+ <BaseButton
+
-
- onClick
-
-
- =
+
+ onClick
+
+
+ =
- {
-
- clicked()
+
+ {
+
+ clicked()
+
+ }
- }
-
-
-
- label
-
-
- =
+
-
- "Button"
+ label
+
+
+ =
+
+
+ "Button"
+
+
-
-
-
- />
-
+
+ />
+
+
+
+
+
+ Copied!
+
+
+ Copy
+
+
+
diff --git a/examples/official-storybook/stories/addon-a11y.stories.js b/examples/official-storybook/stories/addon-a11y.stories.js
index 18ea68caad6..6980bb1b3df 100644
--- a/examples/official-storybook/stories/addon-a11y.stories.js
+++ b/examples/official-storybook/stories/addon-a11y.stories.js
@@ -1,17 +1,28 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
+import { setOptions } from '@storybook/addon-options';
import { checkA11y } from '@storybook/addon-a11y';
import BaseButton from '../components/BaseButton';
+import DelayedRender from '../components/DelayedRender';
const text = 'Testing the a11y addon';
storiesOf('Addons|a11y', module)
.addDecorator(checkA11y)
+ .addDecorator(fn => {
+ setOptions({ selectedAddonPanel: '@storybook/addon-a11y/panel' });
+ return fn();
+ })
.add('Default', () =>
)
.add('Label', () =>
)
.add('Disabled', () =>
)
.add('Invalid contrast', () => (
// FIXME has no effect on score
+ ))
+ .add('delayed render', () => (
+
+
+
));
diff --git a/examples/official-storybook/stories/addon-jest.testresults.json b/examples/official-storybook/stories/addon-jest.testresults.json
index 3747c382125..a65ffeb6232 100644
--- a/examples/official-storybook/stories/addon-jest.testresults.json
+++ b/examples/official-storybook/stories/addon-jest.testresults.json
@@ -1 +1 @@
-{"numFailedTestSuites":1,"numFailedTests":4,"numPassedTestSuites":0,"numPassedTests":3,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTotalTestSuites":1,"numTotalTests":7,"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"unmatched":0,"updated":0},"startTime":1510879394442,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":[],"failureMessages":[],"fullName":"true should be true","status":"passed","title":"true should be true"},{"ancestorTitles":["In a describe: "],"failureMessages":[],"fullName":"In a describe: true should still be true","status":"passed","title":"true should still be true"},{"ancestorTitles":["In a describe: "],"failureMessages":[],"fullName":"In a describe: a list should contain 3 items","status":"passed","title":"a list should contain 3 items"},{"ancestorTitles":["In a describe: "],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).toEqual(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected value to equal:\n \u001b[32m\"everything is awesome\"\u001b[39m\nReceived:\n \u001b[31m\"everything is all right\"\u001b[39m\n at Object.
(/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-jest.test.js:15:39)\n at Object.asyncFn (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/jasmine_async.js:124:345)\n at resolve (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:46:12)\n at new Promise ()\n at mapper (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:34:499)\n at promise.then (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:74:39)\n at \n at process._tickCallback (internal/process/next_tick.js:188:7)"],"fullName":"In a describe: everything is awesome","status":"failed","title":"everything is awesome"},{"ancestorTitles":["A bunch of failing tests: "],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).toBe(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected value to be (using ===):\n \u001b[32mfalse\u001b[39m\nReceived:\n \u001b[31mtrue\u001b[39m\n at Object. (/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-jest.test.js:21:18)\n at Object.asyncFn (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/jasmine_async.js:124:345)\n at resolve (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:46:12)\n at new Promise ()\n at mapper (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:34:499)\n at promise.then (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:74:39)\n at \n at process._tickCallback (internal/process/next_tick.js:188:7)"],"fullName":"A bunch of failing tests: true should still be true","status":"failed","title":"true should still be true"},{"ancestorTitles":["A bunch of failing tests: "],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31marray\u001b[39m\u001b[2m).toContain(\u001b[22m\u001b[32mvalue\u001b[39m\u001b[2m)\u001b[22m\n\nExpected array:\n \u001b[31m[\"a\", \"b\", \"3\"]\u001b[39m\nTo contain value:\n \u001b[32m301\u001b[39m\n at Object. (/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-jest.test.js:25:29)\n at Object.asyncFn (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/jasmine_async.js:124:345)\n at resolve (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:46:12)\n at new Promise ()\n at mapper (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:34:499)\n at promise.then (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:74:39)\n at \n at process._tickCallback (internal/process/next_tick.js:188:7)"],"fullName":"A bunch of failing tests: a list should contain 3 items","status":"failed","title":"a list should contain 3 items"},{"ancestorTitles":["A bunch of failing tests: "],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mfunction\u001b[39m\u001b[2m).toThrow(\u001b[22m\u001b[32mundefined\u001b[39m\u001b[2m)\u001b[22m\n\nExpected the function to throw an error.\nBut it didn't throw anything.\n at Object. (/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-jest.test.js:29:28)\n at Object.asyncFn (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/jasmine_async.js:124:345)\n at resolve (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:46:12)\n at new Promise ()\n at mapper (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:34:499)\n at promise.then (/Users/dev/Projects/GitHub/storybook/core/node_modules/jest-config/node_modules/jest-jasmine2/build/queue_runner.js:74:39)\n at \n at process._tickCallback (internal/process/next_tick.js:188:7)"],"fullName":"A bunch of failing tests: should work","status":"failed","title":"should work"}],"endTime":1510879395550,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[1mIn a describe: › everything is awesome\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).toEqual(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n \n Expected value to equal:\n \u001b[32m\"everything is awesome\"\u001b[39m\n Received:\n \u001b[31m\"everything is all right\"\u001b[39m\n\u001b[2m \u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[2m\u001b[0m\u001b[36msrc/stories/addon-jest.test.js\u001b[39m\u001b[0m\u001b[2m:15:39)\u001b[2m\u001b[22m\n\u001b[2m at new Promise ()\u001b[22m\n\u001b[2m at \u001b[22m\n\u001b[2m \u001b[2mat process._tickCallback (\u001b[2m\u001b[0m\u001b[36minternal/process/next_tick.js\u001b[39m\u001b[0m\u001b[2m:188:7)\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[1mA bunch of failing tests: › true should still be true\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).toBe(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n \n Expected value to be (using ===):\n \u001b[32mfalse\u001b[39m\n Received:\n \u001b[31mtrue\u001b[39m\n\u001b[2m \u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[2m\u001b[0m\u001b[36msrc/stories/addon-jest.test.js\u001b[39m\u001b[0m\u001b[2m:21:18)\u001b[2m\u001b[22m\n\u001b[2m at new Promise ()\u001b[22m\n\u001b[2m at \u001b[22m\n\u001b[2m \u001b[2mat process._tickCallback (\u001b[2m\u001b[0m\u001b[36minternal/process/next_tick.js\u001b[39m\u001b[0m\u001b[2m:188:7)\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[1mA bunch of failing tests: › a list should contain 3 items\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31marray\u001b[39m\u001b[2m).toContain(\u001b[22m\u001b[32mvalue\u001b[39m\u001b[2m)\u001b[22m\n \n Expected array:\n \u001b[31m[\"a\", \"b\", \"3\"]\u001b[39m\n To contain value:\n \u001b[32m301\u001b[39m\n\u001b[2m \u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[2m\u001b[0m\u001b[36msrc/stories/addon-jest.test.js\u001b[39m\u001b[0m\u001b[2m:25:29)\u001b[2m\u001b[22m\n\u001b[2m at new Promise ()\u001b[22m\n\u001b[2m at \u001b[22m\n\u001b[2m \u001b[2mat process._tickCallback (\u001b[2m\u001b[0m\u001b[36minternal/process/next_tick.js\u001b[39m\u001b[0m\u001b[2m:188:7)\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[1mA bunch of failing tests: › should work\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mfunction\u001b[39m\u001b[2m).toThrow(\u001b[22m\u001b[32mundefined\u001b[39m\u001b[2m)\u001b[22m\n \n Expected the function to throw an error.\n But it didn't throw anything.\n\u001b[2m \u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[2m\u001b[0m\u001b[36msrc/stories/addon-jest.test.js\u001b[39m\u001b[0m\u001b[2m:29:28)\u001b[2m\u001b[22m\n\u001b[2m at new Promise ()\u001b[22m\n\u001b[2m at \u001b[22m\n\u001b[2m \u001b[2mat process._tickCallback (\u001b[2m\u001b[0m\u001b[36minternal/process/next_tick.js\u001b[39m\u001b[0m\u001b[2m:188:7)\u001b[2m\u001b[22m\n","name":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-jest.test.js","startTime":1510879395035,"status":"failed","summary":""}],"wasInterrupted":false,"coverageMap":{"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-jest.stories.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-jest.stories.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":1,"column":42}},"1":{"start":{"line":1,"column":57},"end":{"line":1,"column":87}},"2":{"start":{"line":2,"column":14},"end":{"line":2,"column":41}},"3":{"start":{"line":4,"column":17},"end":{"line":4,"column":49}},"4":{"start":{"line":5,"column":28},"end":{"line":5,"column":68}},"5":{"start":{"line":5,"column":98},"end":{"line":5,"column":143}},"6":{"start":{"line":5,"column":182},"end":{"line":5,"column":236}},"7":{"start":{"line":7,"column":21},"end":{"line":8,"column":44}},"8":{"start":{"line":11,"column":0},"end":{"line":15,"column":61}},"9":{"start":{"line":13,"column":30},"end":{"line":15,"column":58}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":5,"column":153},"end":{"line":5,"column":175}},"loc":{"start":{"line":5,"column":181},"end":{"line":5,"column":237}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":13,"column":17},"end":{"line":13,"column":18}},"loc":{"start":{"line":13,"column":29},"end":{"line":15,"column":59}},"line":13}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":189},"end":{"line":5,"column":235}},"type":"cond-expr","locations":[{"start":{"line":5,"column":213},"end":{"line":5,"column":216}},{"start":{"line":5,"column":219},"end":{"line":5,"column":235}}],"line":5},"1":{"loc":{"start":{"line":5,"column":189},"end":{"line":5,"column":210}},"type":"binary-expr","locations":[{"start":{"line":5,"column":189},"end":{"line":5,"column":192}},{"start":{"line":5,"column":196},"end":{"line":5,"column":210}}],"line":5}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/welcome.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/welcome.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":1,"column":42}},"1":{"start":{"line":1,"column":57},"end":{"line":1,"column":87}},"2":{"start":{"line":2,"column":12},"end":{"line":2,"column":44}},"3":{"start":{"line":3,"column":14},"end":{"line":3,"column":41}},"4":{"start":{"line":4,"column":18},"end":{"line":4,"column":51}},"5":{"start":{"line":4,"column":90},"end":{"line":4,"column":144}},"6":{"start":{"line":6,"column":0},"end":{"line":6,"column":178}},"7":{"start":{"line":6,"column":75},"end":{"line":6,"column":175}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":4,"column":61},"end":{"line":4,"column":83}},"loc":{"start":{"line":4,"column":89},"end":{"line":4,"column":145}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":62},"end":{"line":6,"column":63}},"loc":{"start":{"line":6,"column":74},"end":{"line":6,"column":176}},"line":6}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":97},"end":{"line":4,"column":143}},"type":"cond-expr","locations":[{"start":{"line":4,"column":121},"end":{"line":4,"column":124}},{"start":{"line":4,"column":127},"end":{"line":4,"column":143}}],"line":4},"1":{"loc":{"start":{"line":4,"column":97},"end":{"line":4,"column":118}},"type":"binary-expr","locations":[{"start":{"line":4,"column":97},"end":{"line":4,"column":100}},{"start":{"line":4,"column":104},"end":{"line":4,"column":118}}],"line":4}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/components/SimpleList.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/components/SimpleList.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":75}},"1":{"start":{"line":1,"column":88},"end":{"line":1,"column":104}},"2":{"start":{"line":1,"column":119},"end":{"line":1,"column":149}},"3":{"start":{"line":2,"column":17},"end":{"line":2,"column":38}},"4":{"start":{"line":2,"column":57},"end":{"line":2,"column":91}},"5":{"start":{"line":2,"column":130},"end":{"line":2,"column":184}},"6":{"start":{"line":4,"column":11},"end":{"line":6,"column":103}},"7":{"start":{"line":4,"column":44},"end":{"line":4,"column":54}},"8":{"start":{"line":4,"column":55},"end":{"line":6,"column":102}},"9":{"start":{"line":6,"column":33},"end":{"line":6,"column":97}},"10":{"start":{"line":10,"column":0},"end":{"line":11,"column":78}},"11":{"start":{"line":11,"column":78},"end":{"line":14,"column":5}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":2,"column":101},"end":{"line":2,"column":123}},"loc":{"start":{"line":2,"column":129},"end":{"line":2,"column":185}},"line":2},"1":{"name":"List","decl":{"start":{"line":4,"column":20},"end":{"line":4,"column":24}},"loc":{"start":{"line":4,"column":31},"end":{"line":6,"column":103}},"line":4},"2":{"name":"(anonymous_2)","decl":{"start":{"line":6,"column":16},"end":{"line":6,"column":17}},"loc":{"start":{"line":6,"column":32},"end":{"line":6,"column":98}},"line":6}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":137},"end":{"line":2,"column":183}},"type":"cond-expr","locations":[{"start":{"line":2,"column":161},"end":{"line":2,"column":164}},{"start":{"line":2,"column":167},"end":{"line":2,"column":183}}],"line":2},"1":{"loc":{"start":{"line":2,"column":137},"end":{"line":2,"column":158}},"type":"binary-expr","locations":[{"start":{"line":2,"column":137},"end":{"line":2,"column":140}},{"start":{"line":2,"column":144},"end":{"line":2,"column":158}}],"line":2}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/components/BaseButton.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/components/BaseButton.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":75}},"1":{"start":{"line":1,"column":88},"end":{"line":1,"column":104}},"2":{"start":{"line":1,"column":119},"end":{"line":1,"column":149}},"3":{"start":{"line":2,"column":17},"end":{"line":2,"column":38}},"4":{"start":{"line":2,"column":57},"end":{"line":2,"column":91}},"5":{"start":{"line":2,"column":130},"end":{"line":2,"column":184}},"6":{"start":{"line":5,"column":17},"end":{"line":7,"column":15}},"7":{"start":{"line":5,"column":59},"end":{"line":5,"column":72}},"8":{"start":{"line":5,"column":81},"end":{"line":5,"column":91}},"9":{"start":{"line":5,"column":102},"end":{"line":5,"column":114}},"10":{"start":{"line":5,"column":123},"end":{"line":5,"column":133}},"11":{"start":{"line":5,"column":134},"end":{"line":7,"column":14}},"12":{"start":{"line":11,"column":0},"end":{"line":14,"column":14}},"13":{"start":{"line":17,"column":0},"end":{"line":25,"column":41}},"14":{"start":{"line":25,"column":41},"end":{"line":28,"column":11}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":2,"column":101},"end":{"line":2,"column":123}},"loc":{"start":{"line":2,"column":129},"end":{"line":2,"column":185}},"line":2},"1":{"name":"BaseButton","decl":{"start":{"line":5,"column":26},"end":{"line":5,"column":36}},"loc":{"start":{"line":5,"column":43},"end":{"line":7,"column":15}},"line":5},"2":{"name":"onClick","decl":{"start":{"line":13,"column":20},"end":{"line":13,"column":27}},"loc":{"start":{"line":13,"column":30},"end":{"line":13,"column":32}},"line":13}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":137},"end":{"line":2,"column":183}},"type":"cond-expr","locations":[{"start":{"line":2,"column":161},"end":{"line":2,"column":164}},{"start":{"line":2,"column":167},"end":{"line":2,"column":183}}],"line":2},"1":{"loc":{"start":{"line":2,"column":137},"end":{"line":2,"column":158}},"type":"binary-expr","locations":[{"start":{"line":2,"column":137},"end":{"line":2,"column":140}},{"start":{"line":2,"column":144},"end":{"line":2,"column":158}}],"line":2}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/storybook-components.stories.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/storybook-components.stories.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":1,"column":42}},"1":{"start":{"line":1,"column":57},"end":{"line":1,"column":87}},"2":{"start":{"line":2,"column":14},"end":{"line":2,"column":31}},"3":{"start":{"line":3,"column":17},"end":{"line":3,"column":37}},"4":{"start":{"line":5,"column":14},"end":{"line":5,"column":41}},"5":{"start":{"line":6,"column":20},"end":{"line":6,"column":55}},"6":{"start":{"line":7,"column":18},"end":{"line":7,"column":51}},"7":{"start":{"line":9,"column":18},"end":{"line":9,"column":50}},"8":{"start":{"line":9,"column":89},"end":{"line":9,"column":143}},"9":{"start":{"line":11,"column":0},"end":{"line":11,"column":50}},"10":{"start":{"line":13,"column":0},"end":{"line":23,"column":62}},"11":{"start":{"line":14,"column":32},"end":{"line":15,"column":218}},"12":{"start":{"line":20,"column":30},"end":{"line":23,"column":59}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":9,"column":60},"end":{"line":9,"column":82}},"loc":{"start":{"line":9,"column":88},"end":{"line":9,"column":144}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":14,"column":19},"end":{"line":14,"column":20}},"loc":{"start":{"line":14,"column":31},"end":{"line":15,"column":219}},"line":14},"2":{"name":"(anonymous_2)","decl":{"start":{"line":20,"column":17},"end":{"line":20,"column":18}},"loc":{"start":{"line":20,"column":29},"end":{"line":23,"column":60}},"line":20}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":96},"end":{"line":9,"column":142}},"type":"cond-expr","locations":[{"start":{"line":9,"column":120},"end":{"line":9,"column":123}},{"start":{"line":9,"column":126},"end":{"line":9,"column":142}}],"line":9},"1":{"loc":{"start":{"line":9,"column":96},"end":{"line":9,"column":117}},"type":"binary-expr","locations":[{"start":{"line":9,"column":96},"end":{"line":9,"column":99}},{"start":{"line":9,"column":103},"end":{"line":9,"column":117}}],"line":9}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/components/FlowTypeButton.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/components/FlowTypeButton.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":75}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":29}},"2":{"start":{"line":2,"column":44},"end":{"line":2,"column":74}},"3":{"start":{"line":2,"column":113},"end":{"line":2,"column":167}},"4":{"start":{"line":14,"column":21},"end":{"line":16,"column":15}},"5":{"start":{"line":14,"column":64},"end":{"line":14,"column":74}},"6":{"start":{"line":14,"column":85},"end":{"line":14,"column":97}},"7":{"start":{"line":14,"column":109},"end":{"line":14,"column":122}},"8":{"start":{"line":14,"column":123},"end":{"line":16,"column":14}},"9":{"start":{"line":20,"column":0},"end":{"line":22,"column":35}},"10":{"start":{"line":22,"column":35},"end":{"line":25,"column":15}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":2,"column":84},"end":{"line":2,"column":106}},"loc":{"start":{"line":2,"column":112},"end":{"line":2,"column":168}},"line":2},"1":{"name":"FlowTypeButton","decl":{"start":{"line":14,"column":30},"end":{"line":14,"column":44}},"loc":{"start":{"line":14,"column":51},"end":{"line":16,"column":15}},"line":14},"2":{"name":"onClick","decl":{"start":{"line":22,"column":20},"end":{"line":22,"column":27}},"loc":{"start":{"line":22,"column":30},"end":{"line":22,"column":32}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":120},"end":{"line":2,"column":166}},"type":"cond-expr","locations":[{"start":{"line":2,"column":144},"end":{"line":2,"column":147}},{"start":{"line":2,"column":150},"end":{"line":2,"column":166}}],"line":2},"1":{"loc":{"start":{"line":2,"column":120},"end":{"line":2,"column":141}},"type":"binary-expr","locations":[{"start":{"line":2,"column":120},"end":{"line":2,"column":123}},{"start":{"line":2,"column":127},"end":{"line":2,"column":141}}],"line":2}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/Container.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/Container.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":75}},"1":{"start":{"line":1,"column":88},"end":{"line":1,"column":104}},"2":{"start":{"line":1,"column":119},"end":{"line":1,"column":149}},"3":{"start":{"line":2,"column":17},"end":{"line":2,"column":38}},"4":{"start":{"line":2,"column":57},"end":{"line":2,"column":91}},"5":{"start":{"line":2,"column":130},"end":{"line":2,"column":184}},"6":{"start":{"line":4,"column":16},"end":{"line":8,"column":80}},"7":{"start":{"line":4,"column":57},"end":{"line":4,"column":70}},"8":{"start":{"line":4,"column":79},"end":{"line":4,"column":89}},"9":{"start":{"line":4,"column":96},"end":{"line":4,"column":104}},"10":{"start":{"line":4,"column":117},"end":{"line":4,"column":131}},"11":{"start":{"line":4,"column":132},"end":{"line":8,"column":79}},"12":{"start":{"line":12,"column":0},"end":{"line":16,"column":38}},"13":{"start":{"line":18,"column":0},"end":{"line":21,"column":37}},"14":{"start":{"line":21,"column":37},"end":{"line":24,"column":10}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":2,"column":101},"end":{"line":2,"column":123}},"loc":{"start":{"line":2,"column":129},"end":{"line":2,"column":185}},"line":2},"1":{"name":"Container","decl":{"start":{"line":4,"column":25},"end":{"line":4,"column":34}},"loc":{"start":{"line":4,"column":41},"end":{"line":8,"column":80}},"line":4}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":137},"end":{"line":2,"column":183}},"type":"cond-expr","locations":[{"start":{"line":2,"column":161},"end":{"line":2,"column":164}},{"start":{"line":2,"column":167},"end":{"line":2,"column":183}}],"line":2},"1":{"loc":{"start":{"line":2,"column":137},"end":{"line":2,"column":158}},"type":"binary-expr","locations":[{"start":{"line":2,"column":137},"end":{"line":2,"column":140}},{"start":{"line":2,"column":144},"end":{"line":2,"column":158}}],"line":2},"2":{"loc":{"start":{"line":7,"column":6},"end":{"line":7,"column":28}},"type":"cond-expr","locations":[{"start":{"line":7,"column":18},"end":{"line":7,"column":23}},{"start":{"line":7,"column":26},"end":{"line":7,"column":28}}],"line":7},"3":{"loc":{"start":{"line":8,"column":6},"end":{"line":8,"column":76}},"type":"cond-expr","locations":[{"start":{"line":8,"column":12},"end":{"line":8,"column":69}},{"start":{"line":8,"column":72},"end":{"line":8,"column":76}}],"line":8}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/components/DocgenButton.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/components/DocgenButton.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":75}},"1":{"start":{"line":1,"column":88},"end":{"line":1,"column":104}},"2":{"start":{"line":1,"column":119},"end":{"line":1,"column":149}},"3":{"start":{"line":2,"column":17},"end":{"line":2,"column":38}},"4":{"start":{"line":2,"column":57},"end":{"line":2,"column":91}},"5":{"start":{"line":2,"column":130},"end":{"line":2,"column":184}},"6":{"start":{"line":5,"column":19},"end":{"line":7,"column":15}},"7":{"start":{"line":5,"column":63},"end":{"line":5,"column":76}},"8":{"start":{"line":5,"column":85},"end":{"line":5,"column":95}},"9":{"start":{"line":5,"column":106},"end":{"line":5,"column":118}},"10":{"start":{"line":5,"column":119},"end":{"line":7,"column":14}},"11":{"start":{"line":11,"column":0},"end":{"line":13,"column":35}},"12":{"start":{"line":18,"column":14},"end":{"line":18,"column":16}},"13":{"start":{"line":20,"column":0},"end":{"line":69,"column":112}},"14":{"start":{"line":69,"column":112},"end":{"line":72,"column":13}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":2,"column":101},"end":{"line":2,"column":123}},"loc":{"start":{"line":2,"column":129},"end":{"line":2,"column":185}},"line":2},"1":{"name":"DocgenButton","decl":{"start":{"line":5,"column":28},"end":{"line":5,"column":40}},"loc":{"start":{"line":5,"column":47},"end":{"line":7,"column":15}},"line":5},"2":{"name":"onClick","decl":{"start":{"line":13,"column":20},"end":{"line":13,"column":27}},"loc":{"start":{"line":13,"column":30},"end":{"line":13,"column":32}},"line":13}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":137},"end":{"line":2,"column":183}},"type":"cond-expr","locations":[{"start":{"line":2,"column":161},"end":{"line":2,"column":164}},{"start":{"line":2,"column":167},"end":{"line":2,"column":183}}],"line":2},"1":{"loc":{"start":{"line":2,"column":137},"end":{"line":2,"column":158}},"type":"binary-expr","locations":[{"start":{"line":2,"column":137},"end":{"line":2,"column":140}},{"start":{"line":2,"column":144},"end":{"line":2,"column":158}}],"line":2}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-notes.stories.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-notes.stories.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":1,"column":42}},"1":{"start":{"line":1,"column":57},"end":{"line":1,"column":87}},"2":{"start":{"line":2,"column":14},"end":{"line":2,"column":41}},"3":{"start":{"line":4,"column":18},"end":{"line":4,"column":51}},"4":{"start":{"line":5,"column":20},"end":{"line":5,"column":55}},"5":{"start":{"line":6,"column":18},"end":{"line":6,"column":53}},"6":{"start":{"line":6,"column":73},"end":{"line":6,"column":108}},"7":{"start":{"line":6,"column":147},"end":{"line":6,"column":201}},"8":{"start":{"line":8,"column":0},"end":{"line":17,"column":176}},"9":{"start":{"line":13,"column":13},"end":{"line":13,"column":140}},"10":{"start":{"line":15,"column":41},"end":{"line":17,"column":173}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":6,"column":118},"end":{"line":6,"column":140}},"loc":{"start":{"line":6,"column":146},"end":{"line":6,"column":202}},"line":6},"1":{"name":"(anonymous_1)","decl":{"start":{"line":13,"column":0},"end":{"line":13,"column":1}},"loc":{"start":{"line":13,"column":12},"end":{"line":13,"column":141}},"line":13},"2":{"name":"(anonymous_2)","decl":{"start":{"line":15,"column":28},"end":{"line":15,"column":29}},"loc":{"start":{"line":15,"column":40},"end":{"line":17,"column":174}},"line":15}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":154},"end":{"line":6,"column":200}},"type":"cond-expr","locations":[{"start":{"line":6,"column":178},"end":{"line":6,"column":181}},{"start":{"line":6,"column":184},"end":{"line":6,"column":200}}],"line":6},"1":{"loc":{"start":{"line":6,"column":154},"end":{"line":6,"column":175}},"type":"binary-expr","locations":[{"start":{"line":6,"column":154},"end":{"line":6,"column":157}},{"start":{"line":6,"column":161},"end":{"line":6,"column":175}}],"line":6}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-backgrounds.stories.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-backgrounds.stories.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":1,"column":42}},"1":{"start":{"line":1,"column":57},"end":{"line":1,"column":87}},"2":{"start":{"line":2,"column":14},"end":{"line":2,"column":41}},"3":{"start":{"line":4,"column":24},"end":{"line":4,"column":63}},"4":{"start":{"line":4,"column":89},"end":{"line":4,"column":130}},"5":{"start":{"line":5,"column":18},"end":{"line":5,"column":53}},"6":{"start":{"line":5,"column":73},"end":{"line":5,"column":108}},"7":{"start":{"line":5,"column":147},"end":{"line":5,"column":201}},"8":{"start":{"line":7,"column":0},"end":{"line":17,"column":118}},"9":{"start":{"line":14,"column":28},"end":{"line":15,"column":127}},"10":{"start":{"line":17,"column":28},"end":{"line":17,"column":115}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":5,"column":118},"end":{"line":5,"column":140}},"loc":{"start":{"line":5,"column":146},"end":{"line":5,"column":202}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":14,"column":15},"end":{"line":14,"column":16}},"loc":{"start":{"line":14,"column":27},"end":{"line":15,"column":128}},"line":14},"2":{"name":"(anonymous_2)","decl":{"start":{"line":17,"column":15},"end":{"line":17,"column":16}},"loc":{"start":{"line":17,"column":27},"end":{"line":17,"column":116}},"line":17}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":154},"end":{"line":5,"column":200}},"type":"cond-expr","locations":[{"start":{"line":5,"column":178},"end":{"line":5,"column":181}},{"start":{"line":5,"column":184},"end":{"line":5,"column":200}}],"line":5},"1":{"loc":{"start":{"line":5,"column":154},"end":{"line":5,"column":175}},"type":"binary-expr","locations":[{"start":{"line":5,"column":154},"end":{"line":5,"column":157}},{"start":{"line":5,"column":161},"end":{"line":5,"column":175}}],"line":5}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/App.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/App.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":75}},"1":{"start":{"line":1,"column":88},"end":{"line":1,"column":104}},"2":{"start":{"line":1,"column":119},"end":{"line":1,"column":149}},"3":{"start":{"line":2,"column":12},"end":{"line":2,"column":33}},"4":{"start":{"line":2,"column":47},"end":{"line":2,"column":76}},"5":{"start":{"line":3,"column":0},"end":{"line":3,"column":21}},"6":{"start":{"line":3,"column":59},"end":{"line":3,"column":113}},"7":{"start":{"line":5,"column":10},"end":{"line":12,"column":94}},"8":{"start":{"line":5,"column":26},"end":{"line":12,"column":93}},"9":{"start":{"line":12,"column":95},"end":{"line":17,"column":4}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":3,"column":30},"end":{"line":3,"column":52}},"loc":{"start":{"line":3,"column":58},"end":{"line":3,"column":114}},"line":3},"1":{"name":"App","decl":{"start":{"line":5,"column":19},"end":{"line":5,"column":22}},"loc":{"start":{"line":5,"column":25},"end":{"line":12,"column":94}},"line":5}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":66},"end":{"line":3,"column":112}},"type":"cond-expr","locations":[{"start":{"line":3,"column":90},"end":{"line":3,"column":93}},{"start":{"line":3,"column":96},"end":{"line":3,"column":112}}],"line":3},"1":{"loc":{"start":{"line":3,"column":66},"end":{"line":3,"column":87}},"type":"binary-expr","locations":[{"start":{"line":3,"column":66},"end":{"line":3,"column":69}},{"start":{"line":3,"column":73},"end":{"line":3,"column":87}}],"line":3}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"f":{"0":0,"1":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-a11y.stories.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-a11y.stories.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":1,"column":42}},"1":{"start":{"line":1,"column":57},"end":{"line":1,"column":87}},"2":{"start":{"line":2,"column":14},"end":{"line":2,"column":41}},"3":{"start":{"line":4,"column":17},"end":{"line":4,"column":49}},"4":{"start":{"line":5,"column":18},"end":{"line":5,"column":53}},"5":{"start":{"line":5,"column":73},"end":{"line":5,"column":108}},"6":{"start":{"line":5,"column":147},"end":{"line":5,"column":201}},"7":{"start":{"line":7,"column":11},"end":{"line":7,"column":35}},"8":{"start":{"line":9,"column":0},"end":{"line":16,"column":130}},"9":{"start":{"line":11,"column":28},"end":{"line":11,"column":102}},"10":{"start":{"line":12,"column":26},"end":{"line":12,"column":102}},"11":{"start":{"line":13,"column":29},"end":{"line":13,"column":121}},"12":{"start":{"line":14,"column":37},"end":{"line":16,"column":127}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":5,"column":118},"end":{"line":5,"column":140}},"loc":{"start":{"line":5,"column":146},"end":{"line":5,"column":202}},"line":5},"1":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":15},"end":{"line":11,"column":16}},"loc":{"start":{"line":11,"column":27},"end":{"line":11,"column":103}},"line":11},"2":{"name":"(anonymous_2)","decl":{"start":{"line":12,"column":13},"end":{"line":12,"column":14}},"loc":{"start":{"line":12,"column":25},"end":{"line":12,"column":103}},"line":12},"3":{"name":"(anonymous_3)","decl":{"start":{"line":13,"column":16},"end":{"line":13,"column":17}},"loc":{"start":{"line":13,"column":28},"end":{"line":13,"column":122}},"line":13},"4":{"name":"(anonymous_4)","decl":{"start":{"line":14,"column":24},"end":{"line":14,"column":25}},"loc":{"start":{"line":14,"column":36},"end":{"line":16,"column":128}},"line":14}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":154},"end":{"line":5,"column":200}},"type":"cond-expr","locations":[{"start":{"line":5,"column":178},"end":{"line":5,"column":181}},{"start":{"line":5,"column":184},"end":{"line":5,"column":200}}],"line":5},"1":{"loc":{"start":{"line":5,"column":154},"end":{"line":5,"column":175}},"type":"binary-expr","locations":[{"start":{"line":5,"column":154},"end":{"line":5,"column":157}},{"start":{"line":5,"column":161},"end":{"line":5,"column":175}}],"line":5}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/index.stories.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/index.stories.js","statementMap":{"0":{"start":{"line":1,"column":26},"end":{"line":1,"column":42}},"1":{"start":{"line":1,"column":57},"end":{"line":1,"column":87}},"2":{"start":{"line":2,"column":20},"end":{"line":2,"column":44}},"3":{"start":{"line":2,"column":66},"end":{"line":2,"column":103}},"4":{"start":{"line":4,"column":14},"end":{"line":4,"column":41}},"5":{"start":{"line":5,"column":20},"end":{"line":5,"column":55}},"6":{"start":{"line":6,"column":20},"end":{"line":6,"column":55}},"7":{"start":{"line":7,"column":18},"end":{"line":7,"column":51}},"8":{"start":{"line":8,"column":19},"end":{"line":8,"column":53}},"9":{"start":{"line":8,"column":74},"end":{"line":8,"column":110}},"10":{"start":{"line":9,"column":21},"end":{"line":9,"column":57}},"11":{"start":{"line":9,"column":80},"end":{"line":9,"column":118}},"12":{"start":{"line":10,"column":17},"end":{"line":10,"column":49}},"13":{"start":{"line":11,"column":12},"end":{"line":11,"column":44}},"14":{"start":{"line":13,"column":11},"end":{"line":13,"column":28}},"15":{"start":{"line":13,"column":41},"end":{"line":13,"column":69}},"16":{"start":{"line":14,"column":14},"end":{"line":14,"column":33}},"17":{"start":{"line":14,"column":49},"end":{"line":14,"column":80}},"18":{"start":{"line":15,"column":17},"end":{"line":15,"column":39}},"19":{"start":{"line":15,"column":58},"end":{"line":15,"column":92}},"20":{"start":{"line":15,"column":131},"end":{"line":15,"column":185}},"21":{"start":{"line":17,"column":13},"end":{"line":21,"column":32}},"22":{"start":{"line":24,"column":13},"end":{"line":24,"column":41}},"23":{"start":{"line":25,"column":11},"end":{"line":25,"column":35}},"24":{"start":{"line":27,"column":17},"end":{"line":41,"column":13}},"25":{"start":{"line":27,"column":40},"end":{"line":41,"column":12}},"26":{"start":{"line":45,"column":0},"end":{"line":99,"column":121}},"27":{"start":{"line":46,"column":30},"end":{"line":48,"column":113}},"28":{"start":{"line":52,"column":36},"end":{"line":54,"column":152}},"29":{"start":{"line":58,"column":27},"end":{"line":60,"column":107}},"30":{"start":{"line":64,"column":31},"end":{"line":68,"column":127}},"31":{"start":{"line":76,"column":20},"end":{"line":78,"column":116}},"32":{"start":{"line":86,"column":20},"end":{"line":89,"column":116}},"33":{"start":{"line":96,"column":77},"end":{"line":99,"column":116}},"34":{"start":{"line":105,"column":0},"end":{"line":105,"column":128}},"35":{"start":{"line":105,"column":67},"end":{"line":105,"column":125}},"36":{"start":{"line":107,"column":0},"end":{"line":109,"column":151}},"37":{"start":{"line":109,"column":30},"end":{"line":109,"column":148}},"38":{"start":{"line":111,"column":0},"end":{"line":166,"column":105}},"39":{"start":{"line":112,"column":34},"end":{"line":163,"column":19}},"40":{"start":{"line":166,"column":27},"end":{"line":166,"column":102}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":15,"column":102},"end":{"line":15,"column":124}},"loc":{"start":{"line":15,"column":130},"end":{"line":15,"column":186}},"line":15},"1":{"name":"InfoButton","decl":{"start":{"line":27,"column":26},"end":{"line":27,"column":36}},"loc":{"start":{"line":27,"column":39},"end":{"line":41,"column":13}},"line":27},"2":{"name":"(anonymous_2)","decl":{"start":{"line":46,"column":17},"end":{"line":46,"column":18}},"loc":{"start":{"line":46,"column":29},"end":{"line":48,"column":114}},"line":46},"3":{"name":"(anonymous_3)","decl":{"start":{"line":52,"column":23},"end":{"line":52,"column":24}},"loc":{"start":{"line":52,"column":35},"end":{"line":54,"column":153}},"line":52},"4":{"name":"(anonymous_4)","decl":{"start":{"line":58,"column":14},"end":{"line":58,"column":15}},"loc":{"start":{"line":58,"column":26},"end":{"line":60,"column":108}},"line":58},"5":{"name":"(anonymous_5)","decl":{"start":{"line":64,"column":18},"end":{"line":64,"column":19}},"loc":{"start":{"line":64,"column":30},"end":{"line":68,"column":128}},"line":64},"6":{"name":"(anonymous_6)","decl":{"start":{"line":76,"column":0},"end":{"line":76,"column":1}},"loc":{"start":{"line":76,"column":19},"end":{"line":78,"column":117}},"line":76},"7":{"name":"(anonymous_7)","decl":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}},"loc":{"start":{"line":86,"column":19},"end":{"line":89,"column":117}},"line":86},"8":{"name":"(anonymous_8)","decl":{"start":{"line":96,"column":57},"end":{"line":96,"column":58}},"loc":{"start":{"line":96,"column":76},"end":{"line":99,"column":117}},"line":96},"9":{"name":"(anonymous_9)","decl":{"start":{"line":105,"column":54},"end":{"line":105,"column":55}},"loc":{"start":{"line":105,"column":66},"end":{"line":105,"column":126}},"line":105},"10":{"name":"(anonymous_10)","decl":{"start":{"line":109,"column":17},"end":{"line":109,"column":18}},"loc":{"start":{"line":109,"column":29},"end":{"line":109,"column":149}},"line":109},"11":{"name":"(anonymous_11)","decl":{"start":{"line":112,"column":13},"end":{"line":112,"column":14}},"loc":{"start":{"line":112,"column":33},"end":{"line":163,"column":20}},"line":112},"12":{"name":"(anonymous_12)","decl":{"start":{"line":166,"column":14},"end":{"line":166,"column":15}},"loc":{"start":{"line":166,"column":26},"end":{"line":166,"column":103}},"line":166}},"branchMap":{"0":{"loc":{"start":{"line":15,"column":138},"end":{"line":15,"column":184}},"type":"cond-expr","locations":[{"start":{"line":15,"column":162},"end":{"line":15,"column":165}},{"start":{"line":15,"column":168},"end":{"line":15,"column":184}}],"line":15},"1":{"loc":{"start":{"line":15,"column":138},"end":{"line":15,"column":159}},"type":"binary-expr","locations":[{"start":{"line":15,"column":138},"end":{"line":15,"column":141}},{"start":{"line":15,"column":145},"end":{"line":15,"column":159}}],"line":15}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-info.stories.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-info.stories.js","statementMap":{"0":{"start":{"line":1,"column":45},"end":{"line":1,"column":101}},"1":{"start":{"line":1,"column":134},"end":{"line":1,"column":183}},"2":{"start":{"line":1,"column":197},"end":{"line":1,"column":213}},"3":{"start":{"line":1,"column":228},"end":{"line":1,"column":258}},"4":{"start":{"line":2,"column":14},"end":{"line":2,"column":41}},"5":{"start":{"line":3,"column":17},"end":{"line":3,"column":49}},"6":{"start":{"line":4,"column":20},"end":{"line":4,"column":55}},"7":{"start":{"line":6,"column":20},"end":{"line":6,"column":57}},"8":{"start":{"line":6,"column":79},"end":{"line":6,"column":116}},"9":{"start":{"line":7,"column":22},"end":{"line":7,"column":61}},"10":{"start":{"line":7,"column":85},"end":{"line":7,"column":124}},"11":{"start":{"line":8,"column":18},"end":{"line":8,"column":53}},"12":{"start":{"line":8,"column":73},"end":{"line":8,"column":108}},"13":{"start":{"line":8,"column":147},"end":{"line":8,"column":201}},"14":{"start":{"line":10,"column":0},"end":{"line":27,"column":144}},"15":{"start":{"line":15,"column":13},"end":{"line":15,"column":149}},"16":{"start":{"line":21,"column":13},"end":{"line":21,"column":155}},"17":{"start":{"line":27,"column":13},"end":{"line":27,"column":140}},"18":{"start":{"line":30,"column":26},"end":{"line":30,"column":268}},"19":{"start":{"line":41,"column":0},"end":{"line":43,"column":190}},"20":{"start":{"line":43,"column":59},"end":{"line":43,"column":186}},"21":{"start":{"line":46,"column":0},"end":{"line":51,"column":100}},"22":{"start":{"line":51,"column":16},"end":{"line":51,"column":96}},"23":{"start":{"line":54,"column":0},"end":{"line":59,"column":100}},"24":{"start":{"line":59,"column":16},"end":{"line":59,"column":96}},"25":{"start":{"line":62,"column":0},"end":{"line":67,"column":100}},"26":{"start":{"line":67,"column":16},"end":{"line":67,"column":96}},"27":{"start":{"line":70,"column":0},"end":{"line":75,"column":97}},"28":{"start":{"line":75,"column":13},"end":{"line":75,"column":93}},"29":{"start":{"line":78,"column":0},"end":{"line":86,"column":100}},"30":{"start":{"line":83,"column":13},"end":{"line":86,"column":96}},"31":{"start":{"line":91,"column":0},"end":{"line":95,"column":97}},"32":{"start":{"line":95,"column":13},"end":{"line":95,"column":93}},"33":{"start":{"line":98,"column":0},"end":{"line":102,"column":131}},"34":{"start":{"line":99,"column":40},"end":{"line":100,"column":108}},"35":{"start":{"line":102,"column":48},"end":{"line":102,"column":128}},"36":{"start":{"line":104,"column":10},"end":{"line":104,"column":186}},"37":{"start":{"line":104,"column":39},"end":{"line":104,"column":185}},"38":{"start":{"line":104,"column":75},"end":{"line":104,"column":123}},"39":{"start":{"line":104,"column":124},"end":{"line":104,"column":183}},"40":{"start":{"line":106,"column":12},"end":{"line":106,"column":95}},"41":{"start":{"line":106,"column":29},"end":{"line":106,"column":93}},"42":{"start":{"line":108,"column":15},"end":{"line":108,"column":134}},"43":{"start":{"line":108,"column":52},"end":{"line":108,"column":66}},"44":{"start":{"line":108,"column":67},"end":{"line":108,"column":132}},"45":{"start":{"line":110,"column":0},"end":{"line":115,"column":58}},"46":{"start":{"line":112,"column":84},"end":{"line":115,"column":54}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":8,"column":118},"end":{"line":8,"column":140}},"loc":{"start":{"line":8,"column":146},"end":{"line":8,"column":202}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":0},"end":{"line":15,"column":1}},"loc":{"start":{"line":15,"column":12},"end":{"line":15,"column":150}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":21,"column":0},"end":{"line":21,"column":1}},"loc":{"start":{"line":21,"column":12},"end":{"line":21,"column":156}},"line":21},"3":{"name":"(anonymous_3)","decl":{"start":{"line":27,"column":0},"end":{"line":27,"column":1}},"loc":{"start":{"line":27,"column":12},"end":{"line":27,"column":141}},"line":27},"4":{"name":"(anonymous_4)","decl":{"start":{"line":43,"column":46},"end":{"line":43,"column":47}},"loc":{"start":{"line":43,"column":58},"end":{"line":43,"column":187}},"line":43},"5":{"name":"(anonymous_5)","decl":{"start":{"line":51,"column":3},"end":{"line":51,"column":4}},"loc":{"start":{"line":51,"column":15},"end":{"line":51,"column":97}},"line":51},"6":{"name":"(anonymous_6)","decl":{"start":{"line":59,"column":3},"end":{"line":59,"column":4}},"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":97}},"line":59},"7":{"name":"(anonymous_7)","decl":{"start":{"line":67,"column":3},"end":{"line":67,"column":4}},"loc":{"start":{"line":67,"column":15},"end":{"line":67,"column":97}},"line":67},"8":{"name":"(anonymous_8)","decl":{"start":{"line":75,"column":0},"end":{"line":75,"column":1}},"loc":{"start":{"line":75,"column":12},"end":{"line":75,"column":94}},"line":75},"9":{"name":"(anonymous_9)","decl":{"start":{"line":83,"column":0},"end":{"line":83,"column":1}},"loc":{"start":{"line":83,"column":12},"end":{"line":86,"column":97}},"line":83},"10":{"name":"(anonymous_10)","decl":{"start":{"line":95,"column":0},"end":{"line":95,"column":1}},"loc":{"start":{"line":95,"column":12},"end":{"line":95,"column":94}},"line":95},"11":{"name":"(anonymous_11)","decl":{"start":{"line":99,"column":13},"end":{"line":99,"column":14}},"loc":{"start":{"line":99,"column":39},"end":{"line":100,"column":109}},"line":99},"12":{"name":"(anonymous_12)","decl":{"start":{"line":102,"column":35},"end":{"line":102,"column":36}},"loc":{"start":{"line":102,"column":47},"end":{"line":102,"column":129}},"line":102},"13":{"name":"hoc","decl":{"start":{"line":104,"column":19},"end":{"line":104,"column":22}},"loc":{"start":{"line":104,"column":38},"end":{"line":104,"column":186}},"line":104},"14":{"name":"(anonymous_14)","decl":{"start":{"line":104,"column":46},"end":{"line":104,"column":47}},"loc":{"start":{"line":104,"column":62},"end":{"line":104,"column":184}},"line":104},"15":{"name":"(anonymous_15)","decl":{"start":{"line":106,"column":16},"end":{"line":106,"column":17}},"loc":{"start":{"line":106,"column":28},"end":{"line":106,"column":94}},"line":106},"16":{"name":"(anonymous_16)","decl":{"start":{"line":108,"column":19},"end":{"line":108,"column":20}},"loc":{"start":{"line":108,"column":36},"end":{"line":108,"column":133}},"line":108},"17":{"name":"(anonymous_17)","decl":{"start":{"line":112,"column":71},"end":{"line":112,"column":72}},"loc":{"start":{"line":112,"column":83},"end":{"line":115,"column":55}},"line":112}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":154},"end":{"line":8,"column":200}},"type":"cond-expr","locations":[{"start":{"line":8,"column":178},"end":{"line":8,"column":181}},{"start":{"line":8,"column":184},"end":{"line":8,"column":200}}],"line":8},"1":{"loc":{"start":{"line":8,"column":154},"end":{"line":8,"column":175}},"type":"binary-expr","locations":[{"start":{"line":8,"column":154},"end":{"line":8,"column":157}},{"start":{"line":8,"column":161},"end":{"line":8,"column":175}}],"line":8}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/Logger.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/Logger.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":75}},"1":{"start":{"line":1,"column":101},"end":{"line":1,"column":151}},"2":{"start":{"line":1,"column":178},"end":{"line":1,"column":221}},"3":{"start":{"line":1,"column":245},"end":{"line":1,"column":292}},"4":{"start":{"line":1,"column":316},"end":{"line":1,"column":356}},"5":{"start":{"line":1,"column":377},"end":{"line":1,"column":421}},"6":{"start":{"line":1,"column":442},"end":{"line":1,"column":479}},"7":{"start":{"line":1,"column":514},"end":{"line":1,"column":572}},"8":{"start":{"line":1,"column":607},"end":{"line":1,"column":658}},"9":{"start":{"line":1,"column":676},"end":{"line":1,"column":717}},"10":{"start":{"line":1,"column":735},"end":{"line":1,"column":769}},"11":{"start":{"line":1,"column":783},"end":{"line":1,"column":799}},"12":{"start":{"line":1,"column":814},"end":{"line":1,"column":844}},"13":{"start":{"line":2,"column":18},"end":{"line":2,"column":40}},"14":{"start":{"line":2,"column":60},"end":{"line":2,"column":95}},"15":{"start":{"line":3,"column":17},"end":{"line":3,"column":38}},"16":{"start":{"line":3,"column":57},"end":{"line":3,"column":91}},"17":{"start":{"line":4,"column":20},"end":{"line":4,"column":44}},"18":{"start":{"line":4,"column":66},"end":{"line":4,"column":103}},"19":{"start":{"line":6,"column":9},"end":{"line":6,"column":27}},"20":{"start":{"line":6,"column":38},"end":{"line":6,"column":64}},"21":{"start":{"line":6,"column":103},"end":{"line":6,"column":157}},"22":{"start":{"line":8,"column":13},"end":{"line":12,"column":32}},"23":{"start":{"line":15,"column":13},"end":{"line":26,"column":24}},"24":{"start":{"line":30,"column":9},"end":{"line":74,"column":43}},"25":{"start":{"line":30,"column":32},"end":{"line":30,"column":76}},"26":{"start":{"line":30,"column":127},"end":{"line":30,"column":171}},"27":{"start":{"line":30,"column":171},"end":{"line":30,"column":287}},"28":{"start":{"line":30,"column":257},"end":{"line":30,"column":286}},"29":{"start":{"line":30,"column":287},"end":{"line":52,"column":73}},"30":{"start":{"line":48,"column":38},"end":{"line":52,"column":8}},"31":{"start":{"line":49,"column":8},"end":{"line":50,"column":137}},"32":{"start":{"line":49,"column":54},"end":{"line":49,"column":66}},"33":{"start":{"line":49,"column":67},"end":{"line":50,"column":134}},"34":{"start":{"line":52,"column":74},"end":{"line":74,"column":10}},"35":{"start":{"line":52,"column":190},"end":{"line":52,"column":207}},"36":{"start":{"line":52,"column":208},"end":{"line":52,"column":281}},"37":{"start":{"line":52,"column":281},"end":{"line":52,"column":354}},"38":{"start":{"line":52,"column":354},"end":{"line":52,"column":427}},"39":{"start":{"line":52,"column":427},"end":{"line":52,"column":500}},"40":{"start":{"line":55,"column":15},"end":{"line":55,"column":32}},"41":{"start":{"line":57,"column":6},"end":{"line":67,"column":130}},"42":{"start":{"line":61,"column":50},"end":{"line":61,"column":58}},"43":{"start":{"line":61,"column":66},"end":{"line":61,"column":76}},"44":{"start":{"line":61,"column":87},"end":{"line":61,"column":100}},"45":{"start":{"line":61,"column":101},"end":{"line":67,"column":124}},"46":{"start":{"line":74,"column":10},"end":{"line":74,"column":24}},"47":{"start":{"line":74,"column":44},"end":{"line":74,"column":141}},"48":{"start":{"line":74,"column":141},"end":{"line":74,"column":166}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":6,"column":74},"end":{"line":6,"column":96}},"loc":{"start":{"line":6,"column":102},"end":{"line":6,"column":158}},"line":6},"1":{"name":"(anonymous_1)","decl":{"start":{"line":30,"column":9},"end":{"line":30,"column":10}},"loc":{"start":{"line":30,"column":31},"end":{"line":74,"column":25}},"line":30},"2":{"name":"Logger","decl":{"start":{"line":30,"column":85},"end":{"line":30,"column":91}},"loc":{"start":{"line":30,"column":94},"end":{"line":52,"column":74}},"line":30},"3":{"name":"(anonymous_3)","decl":{"start":{"line":48,"column":21},"end":{"line":48,"column":22}},"loc":{"start":{"line":48,"column":37},"end":{"line":52,"column":9}},"line":48},"4":{"name":"(anonymous_4)","decl":{"start":{"line":48,"column":45},"end":{"line":48,"column":46}},"loc":{"start":{"line":48,"column":64},"end":{"line":52,"column":7}},"line":48},"5":{"name":"(anonymous_5)","decl":{"start":{"line":49,"column":23},"end":{"line":49,"column":24}},"loc":{"start":{"line":49,"column":40},"end":{"line":50,"column":135}},"line":49},"6":{"name":"componentWillMount","decl":{"start":{"line":52,"column":155},"end":{"line":52,"column":173}},"loc":{"start":{"line":52,"column":176},"end":{"line":52,"column":501}},"line":52},"7":{"name":"render","decl":{"start":{"line":52,"column":538},"end":{"line":52,"column":544}},"loc":{"start":{"line":54,"column":4},"end":{"line":74,"column":5}},"line":54},"8":{"name":"(anonymous_8)","decl":{"start":{"line":61,"column":23},"end":{"line":61,"column":24}},"loc":{"start":{"line":61,"column":40},"end":{"line":67,"column":125}},"line":61}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":110},"end":{"line":6,"column":156}},"type":"cond-expr","locations":[{"start":{"line":6,"column":134},"end":{"line":6,"column":137}},{"start":{"line":6,"column":140},"end":{"line":6,"column":156}}],"line":6},"1":{"loc":{"start":{"line":6,"column":110},"end":{"line":6,"column":131}},"type":"binary-expr","locations":[{"start":{"line":6,"column":110},"end":{"line":6,"column":113}},{"start":{"line":6,"column":117},"end":{"line":6,"column":131}}],"line":6},"2":{"loc":{"start":{"line":30,"column":374},"end":{"line":30,"column":423}},"type":"binary-expr","locations":[{"start":{"line":30,"column":374},"end":{"line":30,"column":390}},{"start":{"line":30,"column":394},"end":{"line":30,"column":423}}],"line":30}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]}},"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-knobs.stories.js":{"path":"/Users/dev/Projects/GitHub/storybook/core/examples/cra-kitchen-sink/src/stories/addon-knobs.stories.js","statementMap":{"0":{"start":{"line":1,"column":29},"end":{"line":1,"column":69}},"1":{"start":{"line":1,"column":86},"end":{"line":1,"column":119}},"2":{"start":{"line":1,"column":143},"end":{"line":1,"column":190}},"3":{"start":{"line":1,"column":214},"end":{"line":1,"column":254}},"4":{"start":{"line":1,"column":275},"end":{"line":1,"column":319}},"5":{"start":{"line":1,"column":340},"end":{"line":1,"column":377}},"6":{"start":{"line":1,"column":412},"end":{"line":1,"column":470}},"7":{"start":{"line":1,"column":505},"end":{"line":1,"column":556}},"8":{"start":{"line":1,"column":574},"end":{"line":1,"column":615}},"9":{"start":{"line":1,"column":633},"end":{"line":1,"column":667}},"10":{"start":{"line":1,"column":681},"end":{"line":1,"column":697}},"11":{"start":{"line":1,"column":712},"end":{"line":1,"column":742}},"12":{"start":{"line":2,"column":14},"end":{"line":2,"column":41}},"13":{"start":{"line":4,"column":18},"end":{"line":4,"column":51}},"14":{"start":{"line":4,"column":90},"end":{"line":4,"column":144}},"15":{"start":{"line":18,"column":18},"end":{"line":45,"column":61}},"16":{"start":{"line":18,"column":47},"end":{"line":18,"column":106}},"17":{"start":{"line":19,"column":30},"end":{"line":19,"column":83}},"18":{"start":{"line":19,"column":95},"end":{"line":19,"column":223}},"19":{"start":{"line":21,"column":4},"end":{"line":21,"column":32}},"20":{"start":{"line":21,"column":32},"end":{"line":21,"column":45}},"21":{"start":{"line":22,"column":3},"end":{"line":45,"column":10}},"22":{"start":{"line":24,"column":18},"end":{"line":24,"column":22}},"23":{"start":{"line":25,"column":6},"end":{"line":27,"column":21}},"24":{"start":{"line":29,"column":6},"end":{"line":29,"column":120}},"25":{"start":{"line":29,"column":30},"end":{"line":29,"column":111}},"26":{"start":{"line":32,"column":18},"end":{"line":32,"column":22}},"27":{"start":{"line":35,"column":6},"end":{"line":35,"column":96}},"28":{"start":{"line":35,"column":61},"end":{"line":35,"column":93}},"29":{"start":{"line":37,"column":6},"end":{"line":37,"column":16}},"30":{"start":{"line":37,"column":29},"end":{"line":37,"column":45}},"31":{"start":{"line":37,"column":54},"end":{"line":37,"column":66}},"32":{"start":{"line":39,"column":6},"end":{"line":43,"column":7}},"33":{"start":{"line":40,"column":8},"end":{"line":40,"column":72}},"34":{"start":{"line":41,"column":13},"end":{"line":43,"column":7}},"35":{"start":{"line":42,"column":8},"end":{"line":42,"column":75}},"36":{"start":{"line":44,"column":6},"end":{"line":44,"column":141}},"37":{"start":{"line":44,"column":79},"end":{"line":44,"column":137}},"38":{"start":{"line":45,"column":10},"end":{"line":45,"column":33}},"39":{"start":{"line":48,"column":0},"end":{"line":94,"column":64}},"40":{"start":{"line":51,"column":13},"end":{"line":51,"column":57}},"41":{"start":{"line":52,"column":12},"end":{"line":52,"column":89}},"42":{"start":{"line":53,"column":15},"end":{"line":56,"column":22}},"43":{"start":{"line":58,"column":14},"end":{"line":58,"column":63}},"44":{"start":{"line":59,"column":16},"end":{"line":59,"column":56}},"45":{"start":{"line":61,"column":24},"end":{"line":61,"column":71}},"46":{"start":{"line":62,"column":14},"end":{"line":62,"column":76}},"47":{"start":{"line":63,"column":20},"end":{"line":65,"column":22}},"48":{"start":{"line":67,"column":13},"end":{"line":67,"column":51}},"49":{"start":{"line":70,"column":24},"end":{"line":70,"column":47}},"50":{"start":{"line":71,"column":17},"end":{"line":71,"column":67}},"51":{"start":{"line":73,"column":14},"end":{"line":73,"column":108}},"52":{"start":{"line":74,"column":14},"end":{"line":74,"column":87}},"53":{"start":{"line":75,"column":19},"end":{"line":75,"column":65}},"54":{"start":{"line":76,"column":20},"end":{"line":76,"column":70}},"55":{"start":{"line":78,"column":2},"end":{"line":87,"column":83}},"56":{"start":{"line":84,"column":75},"end":{"line":84,"column":139}},"57":{"start":{"line":91,"column":48},"end":{"line":94,"column":61}},"58":{"start":{"line":98,"column":0},"end":{"line":153,"column":64}},"59":{"start":{"line":106,"column":13},"end":{"line":106,"column":57}},"60":{"start":{"line":107,"column":12},"end":{"line":107,"column":89}},"61":{"start":{"line":108,"column":15},"end":{"line":111,"column":22}},"62":{"start":{"line":113,"column":14},"end":{"line":113,"column":63}},"63":{"start":{"line":114,"column":16},"end":{"line":114,"column":56}},"64":{"start":{"line":116,"column":24},"end":{"line":116,"column":71}},"65":{"start":{"line":117,"column":14},"end":{"line":117,"column":76}},"66":{"start":{"line":118,"column":20},"end":{"line":120,"column":22}},"67":{"start":{"line":122,"column":13},"end":{"line":122,"column":51}},"68":{"start":{"line":125,"column":24},"end":{"line":125,"column":47}},"69":{"start":{"line":126,"column":17},"end":{"line":126,"column":67}},"70":{"start":{"line":128,"column":14},"end":{"line":128,"column":108}},"71":{"start":{"line":129,"column":14},"end":{"line":129,"column":87}},"72":{"start":{"line":130,"column":19},"end":{"line":130,"column":65}},"73":{"start":{"line":131,"column":20},"end":{"line":131,"column":70}},"74":{"start":{"line":133,"column":2},"end":{"line":146,"column":83}},"75":{"start":{"line":143,"column":75},"end":{"line":143,"column":139}},"76":{"start":{"line":150,"column":68},"end":{"line":153,"column":61}}},"fnMap":{"0":{"name":"_interopRequireDefault","decl":{"start":{"line":4,"column":61},"end":{"line":4,"column":83}},"loc":{"start":{"line":4,"column":89},"end":{"line":4,"column":145}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":18},"end":{"line":18,"column":19}},"loc":{"start":{"line":18,"column":46},"end":{"line":45,"column":34}},"line":18},"2":{"name":"AsyncItemLoader","decl":{"start":{"line":19,"column":11},"end":{"line":19,"column":26}},"loc":{"start":{"line":19,"column":29},"end":{"line":22,"column":3}},"line":19},"3":{"name":"handleLoadItems","decl":{"start":{"line":22,"column":90},"end":{"line":22,"column":105}},"loc":{"start":{"line":24,"column":4},"end":{"line":30,"column":5}},"line":24},"4":{"name":"(anonymous_4)","decl":{"start":{"line":29,"column":17},"end":{"line":29,"column":18}},"loc":{"start":{"line":29,"column":29},"end":{"line":29,"column":112}},"line":29},"5":{"name":"render","decl":{"start":{"line":30,"column":42},"end":{"line":30,"column":48}},"loc":{"start":{"line":32,"column":4},"end":{"line":45,"column":5}},"line":32},"6":{"name":"(anonymous_6)","decl":{"start":{"line":35,"column":48},"end":{"line":35,"column":49}},"loc":{"start":{"line":35,"column":60},"end":{"line":35,"column":94}},"line":35},"7":{"name":"(anonymous_7)","decl":{"start":{"line":44,"column":65},"end":{"line":44,"column":66}},"loc":{"start":{"line":44,"column":78},"end":{"line":44,"column":138}},"line":44},"8":{"name":"(anonymous_8)","decl":{"start":{"line":50,"column":28},"end":{"line":50,"column":29}},"loc":{"start":{"line":50,"column":40},"end":{"line":90,"column":1}},"line":50},"9":{"name":"(anonymous_9)","decl":{"start":{"line":84,"column":58},"end":{"line":84,"column":59}},"loc":{"start":{"line":84,"column":74},"end":{"line":84,"column":140}},"line":84},"10":{"name":"(anonymous_10)","decl":{"start":{"line":91,"column":35},"end":{"line":91,"column":36}},"loc":{"start":{"line":91,"column":47},"end":{"line":94,"column":62}},"line":91},"11":{"name":"(anonymous_11)","decl":{"start":{"line":105,"column":48},"end":{"line":105,"column":49}},"loc":{"start":{"line":105,"column":60},"end":{"line":149,"column":1}},"line":105},"12":{"name":"(anonymous_12)","decl":{"start":{"line":143,"column":58},"end":{"line":143,"column":59}},"loc":{"start":{"line":143,"column":74},"end":{"line":143,"column":140}},"line":143},"13":{"name":"(anonymous_13)","decl":{"start":{"line":150,"column":55},"end":{"line":150,"column":56}},"loc":{"start":{"line":150,"column":67},"end":{"line":153,"column":62}},"line":150}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":97},"end":{"line":4,"column":143}},"type":"cond-expr","locations":[{"start":{"line":4,"column":121},"end":{"line":4,"column":124}},{"start":{"line":4,"column":127},"end":{"line":4,"column":143}}],"line":4},"1":{"loc":{"start":{"line":4,"column":97},"end":{"line":4,"column":118}},"type":"binary-expr","locations":[{"start":{"line":4,"column":97},"end":{"line":4,"column":100}},{"start":{"line":4,"column":104},"end":{"line":4,"column":118}}],"line":4},"2":{"loc":{"start":{"line":19,"column":143},"end":{"line":19,"column":210}},"type":"binary-expr","locations":[{"start":{"line":19,"column":143},"end":{"line":19,"column":168}},{"start":{"line":19,"column":172},"end":{"line":19,"column":210}}],"line":19},"3":{"loc":{"start":{"line":39,"column":6},"end":{"line":43,"column":7}},"type":"if","locations":[{"start":{"line":39,"column":6},"end":{"line":43,"column":7}},{"start":{"line":39,"column":6},"end":{"line":43,"column":7}}],"line":39},"4":{"loc":{"start":{"line":41,"column":13},"end":{"line":43,"column":7}},"type":"if","locations":[{"start":{"line":41,"column":13},"end":{"line":43,"column":7}},{"start":{"line":41,"column":13},"end":{"line":43,"column":7}}],"line":41},"5":{"loc":{"start":{"line":75,"column":19},"end":{"line":75,"column":65}},"type":"cond-expr","locations":[{"start":{"line":75,"column":26},"end":{"line":75,"column":45}},{"start":{"line":75,"column":48},"end":{"line":75,"column":65}}],"line":75},"6":{"loc":{"start":{"line":130,"column":19},"end":{"line":130,"column":65}},"type":"cond-expr","locations":[{"start":{"line":130,"column":26},"end":{"line":130,"column":45}},{"start":{"line":130,"column":48},"end":{"line":130,"column":65}}],"line":130}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0]}}}}
\ No newline at end of file
+{"numFailedTestSuites":1,"numFailedTests":4,"numPassedTestSuites":0,"numPassedTests":3,"numPendingTestSuites":0,"numPendingTests":0,"numRuntimeErrorTestSuites":0,"numTotalTestSuites":1,"numTotalTests":7,"snapshot":{"added":0,"didUpdate":false,"failure":false,"filesAdded":0,"filesRemoved":0,"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"unmatched":0,"updated":0},"startTime":1515086750721,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":[],"failureMessages":[],"fullName":"true should be true","status":"passed","title":"true should be true"},{"ancestorTitles":["In a describe: "],"failureMessages":[],"fullName":"In a describe: true should still be true","status":"passed","title":"true should still be true"},{"ancestorTitles":["In a describe: "],"failureMessages":[],"fullName":"In a describe: a list should contain 3 items","status":"passed","title":"a list should contain 3 items"},{"ancestorTitles":["In a describe: "],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).toEqual(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected value to equal:\n \u001b[32m\"everything is awesome\"\u001b[39m\nReceived:\n \u001b[31m\"everything is all right\"\u001b[39m\n at Object. (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/tests/addon-jest.test.js:16:39)\n at Object.asyncFn (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/jasmine_async.js:124:345)\n at resolve (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:46:12)\n at Promise ()\n at mapper (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:34:499)\n at promise.then (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:74:39)\n at \n at process._tickCallback (internal/process/next_tick.js:169:7)"],"fullName":"In a describe: everything is awesome","status":"failed","title":"everything is awesome"},{"ancestorTitles":["A bunch of failing tests: "],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).toBe(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected value to be (using ===):\n \u001b[32mfalse\u001b[39m\nReceived:\n \u001b[31mtrue\u001b[39m\n at Object. (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/tests/addon-jest.test.js:22:18)\n at Object.asyncFn (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/jasmine_async.js:124:345)\n at resolve (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:46:12)\n at Promise ()\n at mapper (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:34:499)\n at promise.then (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:74:39)\n at \n at process._tickCallback (internal/process/next_tick.js:169:7)"],"fullName":"A bunch of failing tests: true should still be true","status":"failed","title":"true should still be true"},{"ancestorTitles":["A bunch of failing tests: "],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31marray\u001b[39m\u001b[2m).toContain(\u001b[22m\u001b[32mvalue\u001b[39m\u001b[2m)\u001b[22m\n\nExpected array:\n \u001b[31m[\"a\", \"b\", \"3\"]\u001b[39m\nTo contain value:\n \u001b[32m301\u001b[39m\n at Object. (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/tests/addon-jest.test.js:26:29)\n at Object.asyncFn (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/jasmine_async.js:124:345)\n at resolve (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:46:12)\n at Promise ()\n at mapper (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:34:499)\n at promise.then (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:74:39)\n at \n at process._tickCallback (internal/process/next_tick.js:169:7)"],"fullName":"A bunch of failing tests: a list should contain 3 items","status":"failed","title":"a list should contain 3 items"},{"ancestorTitles":["A bunch of failing tests: "],"failureMessages":["Error: \u001b[2mexpect(\u001b[22m\u001b[31mfunction\u001b[39m\u001b[2m).toThrow(\u001b[22m\u001b[32mundefined\u001b[39m\u001b[2m)\u001b[22m\n\nExpected the function to throw an error.\nBut it didn't throw anything.\n at Object. (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/tests/addon-jest.test.js:30:28)\n at Object.asyncFn (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/jasmine_async.js:124:345)\n at resolve (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:46:12)\n at Promise ()\n at mapper (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:34:499)\n at promise.then (/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/node_modules/jest-jasmine2/build/queue_runner.js:74:39)\n at \n at process._tickCallback (internal/process/next_tick.js:169:7)"],"fullName":"A bunch of failing tests: should work","status":"failed","title":"should work"}],"endTime":1515086751669,"message":"\u001b[1m\u001b[31m \u001b[1m● \u001b[1mIn a describe: › everything is awesome\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).toEqual(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n \n Expected value to equal:\n \u001b[32m\"everything is awesome\"\u001b[39m\n Received:\n \u001b[31m\"everything is all right\"\u001b[39m\n\u001b[2m \u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[2m\u001b[0m\u001b[36mexamples/official-storybook/tests/addon-jest.test.js\u001b[39m\u001b[0m\u001b[2m:16:39)\u001b[2m\u001b[22m\n\u001b[2m at Promise ()\u001b[22m\n\u001b[2m at \u001b[22m\n\u001b[2m \u001b[2mat process._tickCallback (\u001b[2m\u001b[0m\u001b[36mexamples/official-storybook/internal/process/next_tick.js\u001b[39m\u001b[0m\u001b[2m:169:7)\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[1mA bunch of failing tests: › true should still be true\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).toBe(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n \n Expected value to be (using ===):\n \u001b[32mfalse\u001b[39m\n Received:\n \u001b[31mtrue\u001b[39m\n\u001b[2m \u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[2m\u001b[0m\u001b[36mexamples/official-storybook/tests/addon-jest.test.js\u001b[39m\u001b[0m\u001b[2m:22:18)\u001b[2m\u001b[22m\n\u001b[2m at Promise ()\u001b[22m\n\u001b[2m at \u001b[22m\n\u001b[2m \u001b[2mat process._tickCallback (\u001b[2m\u001b[0m\u001b[36mexamples/official-storybook/internal/process/next_tick.js\u001b[39m\u001b[0m\u001b[2m:169:7)\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[1mA bunch of failing tests: › a list should contain 3 items\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31marray\u001b[39m\u001b[2m).toContain(\u001b[22m\u001b[32mvalue\u001b[39m\u001b[2m)\u001b[22m\n \n Expected array:\n \u001b[31m[\"a\", \"b\", \"3\"]\u001b[39m\n To contain value:\n \u001b[32m301\u001b[39m\n\u001b[2m \u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[2m\u001b[0m\u001b[36mexamples/official-storybook/tests/addon-jest.test.js\u001b[39m\u001b[0m\u001b[2m:26:29)\u001b[2m\u001b[22m\n\u001b[2m at Promise ()\u001b[22m\n\u001b[2m at \u001b[22m\n\u001b[2m \u001b[2mat process._tickCallback (\u001b[2m\u001b[0m\u001b[36mexamples/official-storybook/internal/process/next_tick.js\u001b[39m\u001b[0m\u001b[2m:169:7)\u001b[2m\u001b[22m\n\n\u001b[1m\u001b[31m \u001b[1m● \u001b[1mA bunch of failing tests: › should work\u001b[39m\u001b[22m\n\n \u001b[2mexpect(\u001b[22m\u001b[31mfunction\u001b[39m\u001b[2m).toThrow(\u001b[22m\u001b[32mundefined\u001b[39m\u001b[2m)\u001b[22m\n \n Expected the function to throw an error.\n But it didn't throw anything.\n\u001b[2m \u001b[22m\n\u001b[2m \u001b[2mat Object. (\u001b[2m\u001b[0m\u001b[36mexamples/official-storybook/tests/addon-jest.test.js\u001b[39m\u001b[0m\u001b[2m:30:28)\u001b[2m\u001b[22m\n\u001b[2m at Promise ()\u001b[22m\n\u001b[2m at \u001b[22m\n\u001b[2m \u001b[2mat process._tickCallback (\u001b[2m\u001b[0m\u001b[36mexamples/official-storybook/internal/process/next_tick.js\u001b[39m\u001b[0m\u001b[2m:169:7)\u001b[2m\u001b[22m\n","name":"/home/toto/IdeaProjects/storybook-toto/examples/official-storybook/tests/addon-jest.test.js","startTime":1515086751196,"status":"failed","summary":""}],"wasInterrupted":false}
\ No newline at end of file
diff --git a/examples/official-storybook/tests/addon-jest.config.json b/examples/official-storybook/tests/addon-jest.config.json
new file mode 100644
index 00000000000..f093cfab06e
--- /dev/null
+++ b/examples/official-storybook/tests/addon-jest.config.json
@@ -0,0 +1,27 @@
+{
+ "rootDir": "../../..",
+ "verbose": true,
+ "coverageDirectory": "coverage/",
+ "notify": true,
+ "transform": {
+ ".*": "babel-jest"
+ },
+ "snapshotSerializers": [
+ "enzyme-to-json/serializer"
+ ],
+ "setupFiles": ["raf/polyfill"],
+ "setupTestFrameworkScriptFile": "/scripts/jest.init.js",
+ "moduleNameMapper": {
+ "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "__mocks__/fileMock.js",
+ "\\.s?css$": "__mocks__/styleMock.js"
+ },
+ "collectCoverage": true,
+ "collectCoverageFrom": [
+ "../stories/**/*.js",
+ "../stories/*.js",
+ "!.*",
+ "!../stories/__test__/*",
+ "!../stories/**/__test__/*"
+ ],
+ "testMatch": ["/examples/official-storybook/tests/addon-jest.test.js"]
+}
diff --git a/examples/official-storybook/stories/addon-jest.test.js b/examples/official-storybook/tests/addon-jest.test.js
similarity index 88%
rename from examples/official-storybook/stories/addon-jest.test.js
rename to examples/official-storybook/tests/addon-jest.test.js
index 4484b71f1e0..8236a32e390 100644
--- a/examples/official-storybook/stories/addon-jest.test.js
+++ b/examples/official-storybook/tests/addon-jest.test.js
@@ -1,3 +1,4 @@
+// This file is excluded from the `/scripts/test.js` script. (see root `jest.config.js` file)
test('true should be true', () => {
expect(true).toBe(true);
});
diff --git a/examples/official-storybook/storyshots.test.js b/examples/official-storybook/tests/storyshots.test.js
similarity index 77%
rename from examples/official-storybook/storyshots.test.js
rename to examples/official-storybook/tests/storyshots.test.js
index dc10331c960..fa8e622aabe 100644
--- a/examples/official-storybook/storyshots.test.js
+++ b/examples/official-storybook/tests/storyshots.test.js
@@ -1,10 +1,12 @@
+import path from 'path';
import initStoryshots, { multiSnapshotWithOptions } from '@storybook/addon-storyshots';
import { render as renderer } from 'enzyme';
import serializer from 'enzyme-to-json';
+// HTML Snapshots
initStoryshots({
framework: 'react',
- configPath: __dirname,
+ configPath: path.join(__dirname, '../'),
test: multiSnapshotWithOptions({
renderer,
serializer,
diff --git a/examples/polymer-cli/.eslintrc.js b/examples/polymer-cli/.eslintrc.js
new file mode 100644
index 00000000000..531436200f9
--- /dev/null
+++ b/examples/polymer-cli/.eslintrc.js
@@ -0,0 +1,7 @@
+module.exports = {
+ globals: {
+ Polymer: true,
+ customElements: true,
+ CustomEvent: true,
+ },
+};
diff --git a/examples/polymer-cli/.storybook/addons.js b/examples/polymer-cli/.storybook/addons.js
new file mode 100644
index 00000000000..1191fbebf30
--- /dev/null
+++ b/examples/polymer-cli/.storybook/addons.js
@@ -0,0 +1,4 @@
+import '@storybook/addon-actions/register';
+import '@storybook/addon-notes/register';
+import '@storybook/addon-knobs/register';
+import '@storybook/addon-viewport/register';
diff --git a/examples/polymer-cli/.storybook/config.js b/examples/polymer-cli/.storybook/config.js
new file mode 100644
index 00000000000..37ff6501478
--- /dev/null
+++ b/examples/polymer-cli/.storybook/config.js
@@ -0,0 +1,10 @@
+/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */
+
+import { configure } from '@storybook/polymer';
+
+function loadStories() {
+ require('../src/stories/index.stories');
+ require('../src/stories/advanced.stories');
+}
+
+configure(loadStories, module);
diff --git a/examples/polymer-cli/README.md b/examples/polymer-cli/README.md
new file mode 100644
index 00000000000..8f7743a194d
--- /dev/null
+++ b/examples/polymer-cli/README.md
@@ -0,0 +1,8 @@
+# Polymer kitchen sink example
+
+This project was generated with [Polymer CLI](https://github.com/Polymer/polymer-cli) version 1.5.2.
+
+## Development server
+
+Run `yarn start` for a dev server. Navigate to `http://127.0.0.1:8081/components/polymer-cli/`.
+The app will automatically reload if you change any of the source files.
diff --git a/examples/polymer-cli/index.html b/examples/polymer-cli/index.html
new file mode 100644
index 00000000000..5b4abb4d3ff
--- /dev/null
+++ b/examples/polymer-cli/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ Storybook for Polymer!
+
+
+
+
+
+
+
diff --git a/examples/polymer-cli/package.json b/examples/polymer-cli/package.json
new file mode 100644
index 00000000000..932039f51f2
--- /dev/null
+++ b/examples/polymer-cli/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "polymer-cli",
+ "version": "3.4.0-alpha.4",
+ "scripts": {
+ "start": "webpack-dev-server",
+ "storybook": "start-storybook -p 9001 -c .storybook"
+ },
+ "private": true,
+ "dependencies": {
+ "@polymer/polymer": "^2.2.0",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-knobs": "^3.4.0-alpha.4",
+ "@storybook/addon-notes": "^3.4.0-alpha.4",
+ "@storybook/addon-viewport": "^3.4.0-alpha.4",
+ "@storybook/polymer": "^3.4.0-alpha.4",
+ "@webcomponents/webcomponentsjs": "^1.0.17",
+ "global": "^4.3.2",
+ "polymer-webpack-loader": "^2.0.0",
+ "webpack": "^3.8.1"
+ },
+ "devDependencies": {
+ "babel": "^6.23.0",
+ "babel-core": "^6.26.0",
+ "babel-loader": "^7.1.2",
+ "babel-preset-env": "^1.6.1",
+ "babel-preset-stage-2": "^6.24.1",
+ "copy-webpack-plugin": "^4.2.0",
+ "html-webpack-plugin": "^2.30.1",
+ "webpack-dev-server": "^2.11.0"
+ }
+}
diff --git a/examples/polymer-cli/src/logo.svg b/examples/polymer-cli/src/logo.svg
new file mode 100644
index 00000000000..b0d2bc68991
--- /dev/null
+++ b/examples/polymer-cli/src/logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/examples/polymer-cli/src/playground-button.html b/examples/polymer-cli/src/playground-button.html
new file mode 100644
index 00000000000..272d6b2acc0
--- /dev/null
+++ b/examples/polymer-cli/src/playground-button.html
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+ [[title]] [[counter]]
+
+
+
+
diff --git a/examples/polymer-cli/src/polymer-playground-app.html b/examples/polymer-cli/src/polymer-playground-app.html
new file mode 100644
index 00000000000..4e2493b320c
--- /dev/null
+++ b/examples/polymer-cli/src/polymer-playground-app.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+ [[title]]
+ Hello [[prop1]]!
+
+
+
+
diff --git a/examples/polymer-cli/src/separated-button/separated-button.html b/examples/polymer-cli/src/separated-button/separated-button.html
new file mode 100644
index 00000000000..8fc31ada684
--- /dev/null
+++ b/examples/polymer-cli/src/separated-button/separated-button.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+ [[title]] [[counter]]
+
+
+
+
diff --git a/examples/polymer-cli/src/separated-button/separated-button.js b/examples/polymer-cli/src/separated-button/separated-button.js
new file mode 100644
index 00000000000..5fbc2d615a0
--- /dev/null
+++ b/examples/polymer-cli/src/separated-button/separated-button.js
@@ -0,0 +1,26 @@
+import { uselessMixin } from './useless-mixin';
+
+export const separatedButton = superClass =>
+ class SeparatedButton extends uselessMixin(superClass) {
+ static get is() {
+ return 'separated-button';
+ }
+
+ static get properties() {
+ return {
+ title: {
+ type: String,
+ value: 'Click me:',
+ },
+ counter: {
+ type: Number,
+ value: 0,
+ },
+ };
+ }
+
+ async handleTap() {
+ this.counter += await Promise.resolve(1);
+ this.someMethod();
+ }
+ };
diff --git a/examples/polymer-cli/src/separated-button/useless-mixin.js b/examples/polymer-cli/src/separated-button/useless-mixin.js
new file mode 100644
index 00000000000..e7e2748ee3a
--- /dev/null
+++ b/examples/polymer-cli/src/separated-button/useless-mixin.js
@@ -0,0 +1,12 @@
+export const uselessMixin = superClass =>
+ class UselessMixin extends superClass {
+ constructor() {
+ super();
+
+ this.eventType = 'test';
+ }
+
+ someMethod() {
+ this.dispatchEvent(new CustomEvent(this.eventType, { detail: 'test' }));
+ }
+ };
diff --git a/examples/polymer-cli/src/stories/advanced.stories.js b/examples/polymer-cli/src/stories/advanced.stories.js
new file mode 100644
index 00000000000..bee17c4a98c
--- /dev/null
+++ b/examples/polymer-cli/src/stories/advanced.stories.js
@@ -0,0 +1,104 @@
+import { storiesOf } from '@storybook/polymer';
+import { action } from '@storybook/addon-actions';
+import { withNotes } from '@storybook/addon-notes';
+import {
+ withKnobs,
+ text,
+ button,
+ number,
+ select,
+ date,
+ color,
+ array,
+ boolean,
+} from '@storybook/addon-knobs/polymer';
+import { document } from 'global';
+import '../polymer-playground-app.html';
+import '../playground-button.html';
+import '../separated-button/separated-button.html';
+import './storybook-welcome-to-polymer.html';
+
+storiesOf('Advanced/Decorator', module)
+ .addDecorator(story => {
+ const el = story();
+ el.setAttribute('title', `${el.getAttribute('title')} - decorated`);
+ return el;
+ })
+ .add('example decoration', () => {
+ const el = document.createElement('playground-button');
+ el.setAttribute('title', 'An example title');
+ return el;
+ });
+
+storiesOf('Advanced/Addon Actions', module)
+ .add('Action only', () => {
+ const el = document.createElement('playground-button');
+ el.addEventListener('click', action('log1'));
+ return el;
+ })
+ .add('Action and method', () => {
+ const el = document.createElement('playground-button');
+ el.addEventListener('click', e => action('log2')(e.target));
+ return el;
+ });
+
+storiesOf('Advanced/Addon Notes', module)
+ .add(
+ 'Simple note',
+ withNotes({ text: 'My notes on some bold text' })(
+ () =>
+ 'Etiam vulputate elit eu venenatis eleifend. Duis nec lectus augue. Morbi egestas diam sed vulputate mollis. Fusce egestas pretium vehicula. Integer sed neque diam. Donec consectetur velit vitae enim varius, ut placerat arcu imperdiet. Praesent sed faucibus arcu. Nullam sit amet nibh a enim eleifend rhoncus. Donec pretium elementum leo at fermentum. Nulla sollicitudin, mauris quis semper tempus, sem metus tristique diam, efficitur pulvinar mi urna id urna.
'
+ )
+ )
+ .add(
+ 'Note with HTML',
+ withNotes({
+ text: `
+ My notes on emojies
+
+ It's not all that important to be honest, but..
+
+ Emojis are great, I love emojis, in fact I like using them in my Component notes too! 😇
+ `,
+ })(() => '🤔😳😯😮 😄😩😓😱 🤓😑😶😊
')
+ );
+
+storiesOf('Advanced/Addon Knobs', module)
+ .addDecorator(withKnobs)
+ .add('simple', () => {
+ const title = text('Button title', 'Hello');
+ const el = document.createElement('playground-button');
+ el.setAttribute('title', title);
+ button('callback', () => el.setAttribute('title', 'testing'));
+ return el;
+ })
+ .add('complex', () => {
+ const name = text('Name', 'Jane');
+ const stock = number('Stock', 20, { range: true, min: 0, max: 30, step: 5 });
+ const fruits = { apples: 'Apple', bananas: 'Banana', cherries: 'Cherry' };
+ const fruit = select('Fruit', fruits, 'apple');
+ const price = number('Price', 2.25);
+ const colour = color('Border', 'deeppink');
+ const today = date('Today', new Date('Jan 20 2017'));
+ const items = array('Items', ['Laptop', 'Book', 'Whiskey']);
+ const nice = boolean('Nice', true);
+
+ const stockMessage = stock
+ ? `I have a stock of ${stock} ${fruit}, costing $${price} each.`
+ : `I'm out of ${fruit}${nice ? ', Sorry!' : '.'}`;
+
+ button('Arbitrary action', action('You clicked it!'));
+
+ return `
+
+
My name is ${name},
+
today is ${new Date(today).toLocaleDateString()}
+
${stockMessage}
+
Also, I have:
+
+ ${items.map(item => `${item} `).join('')}
+
+
${nice ? 'Nice to meet you!' : 'Leave me alone!'}
+
+ `;
+ });
diff --git a/examples/polymer-cli/src/stories/index.stories.js b/examples/polymer-cli/src/stories/index.stories.js
new file mode 100644
index 00000000000..f17d1fa3dbe
--- /dev/null
+++ b/examples/polymer-cli/src/stories/index.stories.js
@@ -0,0 +1,34 @@
+import { storiesOf } from '@storybook/polymer';
+import { withKnobs, text } from '@storybook/addon-knobs/polymer';
+import { document } from 'global';
+import '../polymer-playground-app.html';
+import '../playground-button.html';
+import '../separated-button/separated-button.html';
+import './storybook-welcome-to-polymer.html';
+import { StringTemplateButton } from '../string-template-button';
+
+storiesOf('Welcome', module).add(
+ 'Welcome',
+ () => ' '
+);
+
+storiesOf('App', module)
+ .addDecorator(withKnobs)
+ .add('full app', () => {
+ const title = text('title', 'This title can be edited via a knob');
+ return ` `;
+ });
+
+storiesOf('Button', module)
+ .add('rounded', () => ' ')
+ .add('square', () => ' ');
+
+storiesOf('Methods for rendering', module)
+ .add('html string', () => 'Rendered with string
')
+ .add('html with custom elements', () => ' ')
+ .add('document.createElement', () => {
+ const el = document.createElement('playground-button');
+ el.setAttribute('title', 'Rendered with document.createElement');
+ return el;
+ })
+ .add('Polymer instance', () => new StringTemplateButton());
diff --git a/examples/polymer-cli/src/stories/storybook-welcome-to-polymer.html b/examples/polymer-cli/src/stories/storybook-welcome-to-polymer.html
new file mode 100644
index 00000000000..d0fd9c6d03d
--- /dev/null
+++ b/examples/polymer-cli/src/stories/storybook-welcome-to-polymer.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
Welcome to Storybook for Polymer
+
This is a UI component dev environment for your polymer app.
+
+ We've added some basic stories inside the src/stories
directory.
+
+ A story is a single state of one or more UI components. You can have as many stories as you want.
+
+ (Basically a story is like a visual test case.)
+
+
+ See these sample stories for a component called playground-button
+
+
+
+
+ Just like that, you can add your own components as stories.
+
+ You can also edit those components and see changes right away.
+
+ (Try editing the playground-button
stories
+ located at src/playground-button.html
.)
+
+
+ Usually we create stories with smaller UI components in the app.
+ Have a look at the
+
+ Writing Stories
+
+ section in our documentation.
+
+
+ NOTE:
+
+ Have a look at the
+ .storybook/webpack.config.js
+ to add webpack loaders and plugins you are using in this project.
+
+
+
+
+
diff --git a/examples/polymer-cli/src/string-template-button.js b/examples/polymer-cli/src/string-template-button.js
new file mode 100644
index 00000000000..362e2d50735
--- /dev/null
+++ b/examples/polymer-cli/src/string-template-button.js
@@ -0,0 +1,28 @@
+export class StringTemplateButton extends Polymer.Element {
+ static get is() {
+ return 'string-template-button';
+ }
+
+ static get properties() {
+ return {
+ title: {
+ type: String,
+ value: 'Wow, I am inline',
+ },
+ counter: {
+ type: Number,
+ value: 0,
+ },
+ };
+ }
+
+ static get template() {
+ return '[[title]]: [[counter]] ';
+ }
+
+ handleTap() {
+ this.counter += 1;
+ }
+}
+
+customElements.define(StringTemplateButton.is, StringTemplateButton);
diff --git a/examples/polymer-cli/webpack.config.js b/examples/polymer-cli/webpack.config.js
new file mode 100644
index 00000000000..0ecc356b21d
--- /dev/null
+++ b/examples/polymer-cli/webpack.config.js
@@ -0,0 +1,31 @@
+const path = require('path');
+const CopyWebpackPlugin = require('copy-webpack-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+
+module.exports = {
+ entry: './src/polymer-playground-app.html',
+ output: {
+ path: path.resolve(__dirname, './dist'),
+ filename: '[name].[chunkhash:8].js',
+ },
+ module: {
+ loaders: [
+ {
+ test: /\.html$/,
+ exclude: require.resolve('./index.html'),
+ use: [{ loader: 'babel-loader' }, { loader: 'polymer-webpack-loader' }],
+ },
+ ],
+ },
+ plugins: [
+ new HtmlWebpackPlugin({
+ template: 'index.html',
+ }),
+ new CopyWebpackPlugin([
+ { from: require.resolve('@webcomponents/webcomponentsjs/webcomponents-lite.js') },
+ { from: require.resolve('@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js') },
+ ]),
+ ],
+ devServer: { historyApiFallback: true },
+ devtool: 'eval-source-map',
+};
diff --git a/examples/vue-kitchen-sink/package.json b/examples/vue-kitchen-sink/package.json
index 18a66d5519f..5717558a8d1 100644
--- a/examples/vue-kitchen-sink/package.json
+++ b/examples/vue-kitchen-sink/package.json
@@ -1,16 +1,16 @@
{
"name": "vue-example",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"private": true,
"devDependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-centered": "^3.3.3",
- "@storybook/addon-knobs": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addon-notes": "^3.3.3",
- "@storybook/addon-viewport": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/vue": "^3.3.3",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-centered": "^3.4.0-alpha.4",
+ "@storybook/addon-knobs": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addon-notes": "^3.4.0-alpha.4",
+ "@storybook/addon-viewport": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/vue": "^3.4.0-alpha.4",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-env": "^1.6.0",
@@ -19,11 +19,11 @@
"css-loader": "^0.28.8",
"file-loader": "^1.1.6",
"vue-hot-reload-api": "^2.2.4",
- "vue-loader": "^13.6.2",
+ "vue-loader": "^13.7.0",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.13",
"webpack": "^3.10.0",
- "webpack-dev-server": "^2.9.7"
+ "webpack-dev-server": "^2.11.0"
},
"dependencies": {
"vue": "^2.5.13",
diff --git a/integration/__image_snapshots__/cra-kitchen-sink-snap.png b/integration/__image_snapshots__/cra-kitchen-sink-snap.png
index fd6bc256be5..77c42830fa0 100644
Binary files a/integration/__image_snapshots__/cra-kitchen-sink-snap.png and b/integration/__image_snapshots__/cra-kitchen-sink-snap.png differ
diff --git a/integration/__image_snapshots__/vue-kitchen-sink-snap.png b/integration/__image_snapshots__/vue-kitchen-sink-snap.png
index b8387ae0fae..0b163a2070c 100644
Binary files a/integration/__image_snapshots__/vue-kitchen-sink-snap.png and b/integration/__image_snapshots__/vue-kitchen-sink-snap.png differ
diff --git a/integration/examples.test.js b/integration/examples.test.js
index cff64b21935..ba023d35923 100644
--- a/integration/examples.test.js
+++ b/integration/examples.test.js
@@ -1,21 +1,40 @@
import puppeteer from 'puppeteer';
+import path from 'path';
+
+// We do screenshots against the static build of the storybook.
+// For this test to be meaningful, you must build the static version of the storybook *before* running this test suite.
+const pathToVueKitchenSink = path.join(
+ __dirname,
+ '..',
+ 'examples/vue-kitchen-sink/storybook-static/index.html'
+);
+const pathToAngularKitchenSink = path.join(
+ __dirname,
+ '..',
+ 'examples/angular-cli/storybook-static/index.html'
+);
+const pathToCraKitchenSink = path.join(
+ __dirname,
+ '..',
+ 'examples/cra-kitchen-sink/storybook-static/index.html'
+);
const examples = [
{
name: 'cra-kitchen-sink',
- port: 9010,
+ storybookUrl: pathToCraKitchenSink,
},
{
name: 'vue-kitchen-sink',
- port: 9009,
+ storybookUrl: pathToVueKitchenSink,
},
{
name: 'angular-cli',
- port: 9008,
+ storybookUrl: pathToAngularKitchenSink,
},
];
-examples.forEach(({ name, port }) => {
+examples.forEach(({ name, storybookUrl }) => {
let browser = puppeteer.launch();
let page;
@@ -30,10 +49,7 @@ examples.forEach(({ name, port }) => {
});
it(`Take screenshots for '${name}'`, async () => {
- await page.goto(`http://localhost:${port}`);
- await page.waitForSelector('[role="menuitem"][data-name="Welcome"]');
- await page.waitFor(2000);
-
+ await page.goto(`file://${storybookUrl}`);
const screenshot = await page.screenshot({ fullPage: true });
expect(screenshot).toMatchImageSnapshot({
failureThreshold: 0.04, // 4% threshold,
diff --git a/lerna.json b/lerna.json
index 46ec685a3da..3d8dd309625 100644
--- a/lerna.json
+++ b/lerna.json
@@ -8,5 +8,5 @@
}
},
"concurrency": 1,
- "version": "3.3.3"
+ "version": "3.4.0-alpha.4"
}
diff --git a/lib/addons/package.json b/lib/addons/package.json
index 0422d9bb515..f076a80f061 100644
--- a/lib/addons/package.json
+++ b/lib/addons/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/addons",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook addons store",
"keywords": [
"storybook"
diff --git a/lib/channel-postmessage/package.json b/lib/channel-postmessage/package.json
index 3088e503e36..d29be4e4a44 100644
--- a/lib/channel-postmessage/package.json
+++ b/lib/channel-postmessage/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/channel-postmessage",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "",
"license": "MIT",
"main": "dist/index.js",
@@ -9,7 +9,7 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/channels": "^3.3.3",
+ "@storybook/channels": "^3.4.0-alpha.4",
"global": "^4.3.2",
"json-stringify-safe": "^5.0.1"
}
diff --git a/lib/channel-websocket/package.json b/lib/channel-websocket/package.json
index 65242457162..71c6173533d 100644
--- a/lib/channel-websocket/package.json
+++ b/lib/channel-websocket/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/channel-websocket",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "",
"license": "MIT",
"main": "dist/index.js",
@@ -9,7 +9,7 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/channels": "^3.3.3",
+ "@storybook/channels": "^3.4.0-alpha.4",
"global": "^4.3.2"
}
}
diff --git a/lib/channels/package.json b/lib/channels/package.json
index beff98b89d0..cdbd82937be 100644
--- a/lib/channels/package.json
+++ b/lib/channels/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/channels",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "",
"license": "MIT",
"main": "dist/index.js",
diff --git a/lib/cli/bin/generate.js b/lib/cli/bin/generate.js
index e3c2d4bd82c..b23ca85f717 100755
--- a/lib/cli/bin/generate.js
+++ b/lib/cli/bin/generate.js
@@ -15,6 +15,7 @@ import reactScriptsGenerator from '../generators/REACT_SCRIPTS';
import sfcVueGenerator from '../generators/SFC_VUE';
import updateOrganisationsGenerator from '../generators/UPDATE_PACKAGE_ORGANIZATIONS';
import vueGenerator from '../generators/VUE';
+import polymerGenerator from '../generators/POLYMER';
import webpackReactGenerator from '../generators/WEBPACK_REACT';
const logger = console;
@@ -151,6 +152,12 @@ const runGenerator = () => {
return angularGenerator()
.then(commandLog('Adding storybook support to your "Angular" app'))
.then(end);
+
+ case types.POLYMER:
+ return polymerGenerator()
+ .then(commandLog('Adding storybook support to your "Polymer" app'))
+ .then(end);
+
default:
paddedLog(`We couldn't detect your project type. (code: ${projectType})`);
paddedLog(
diff --git a/lib/cli/generators/ANGULAR/index.js b/lib/cli/generators/ANGULAR/index.js
index 7a3b2b083df..71c25e98ac7 100644
--- a/lib/cli/generators/ANGULAR/index.js
+++ b/lib/cli/generators/ANGULAR/index.js
@@ -8,24 +8,31 @@ export default async () => {
notesVersion,
actionsVersion,
linksVersion,
- lodashTypesVersion,
+ addonsVersion,
+ babelCoreVersion,
] = await getVersions(
'@storybook/angular',
'@storybook/addon-notes',
'@storybook/addon-actions',
'@storybook/addon-links',
- '@types/lodash-es'
+ '@storybook/addons',
+ 'babel-core'
);
mergeDirs(path.resolve(__dirname, 'template'), '.', 'overwrite');
const packageJson = getPackageJson();
+ packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/angular'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-notes'] = notesVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
- packageJson.devDependencies['@types/lodash-es'] = lodashTypesVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
+ }
packageJson.scripts = packageJson.scripts || {};
packageJson.scripts.storybook = 'start-storybook -p 6006';
diff --git a/lib/cli/generators/ANGULAR/template/.storybook/config.js b/lib/cli/generators/ANGULAR/template/.storybook/config.js
index 5d8908b9024..bc9d1d6cd9a 100644
--- a/lib/cli/generators/ANGULAR/template/.storybook/config.js
+++ b/lib/cli/generators/ANGULAR/template/.storybook/config.js
@@ -3,7 +3,7 @@
import { configure } from '@storybook/angular';
// automatically import all files ending in *.stories.ts
-const req = require.context('../stories', true, /.stories.ts$/);
+const req = require.context('../src/stories', true, /.stories.ts$/);
function loadStories() {
req.keys().forEach((filename) => req(filename));
}
diff --git a/lib/cli/generators/ANGULAR/template/stories/index.stories.ts b/lib/cli/generators/ANGULAR/template/src/stories/index.stories.ts
similarity index 100%
rename from lib/cli/generators/ANGULAR/template/stories/index.stories.ts
rename to lib/cli/generators/ANGULAR/template/src/stories/index.stories.ts
diff --git a/lib/cli/generators/METEOR/index.js b/lib/cli/generators/METEOR/index.js
index 3efd7711aef..a88e0527b12 100644
--- a/lib/cli/generators/METEOR/index.js
+++ b/lib/cli/generators/METEOR/index.js
@@ -9,8 +9,10 @@ export default async () => {
storybookVersion,
actionsVersion,
linksVersion,
+ addonsVersion,
reactVersion,
reactDomVersion,
+ babelCoreVersion,
presetEnvVersion,
presetReactVersion,
presetStage1Version,
@@ -19,8 +21,10 @@ export default async () => {
'@storybook/react',
'@storybook/addon-actions',
'@storybook/addon-links',
+ '@storybook/addons',
'react',
'react-dom',
+ 'babel-core',
'babel-preset-env',
'babel-preset-react',
'babel-preset-stage-1',
@@ -51,6 +55,7 @@ export default async () => {
plugins: ['babel-root-slash-import'],
};
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
packageJson.devDependencies['babel-preset-env'] = presetEnvVersion;
packageJson.devDependencies['babel-preset-react'] = presetReactVersion;
packageJson.devDependencies['babel-preset-stage-1'] = presetStage1Version;
@@ -63,6 +68,7 @@ export default async () => {
packageJson.devDependencies['@storybook/react'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
packageJson.scripts.storybook = 'start-storybook -p 6006';
packageJson.scripts['build-storybook'] = 'build-storybook';
diff --git a/lib/cli/generators/POLYMER/index.js b/lib/cli/generators/POLYMER/index.js
new file mode 100755
index 00000000000..c886baee92b
--- /dev/null
+++ b/lib/cli/generators/POLYMER/index.js
@@ -0,0 +1,19 @@
+import mergeDirs from 'merge-dirs';
+import path from 'path';
+import { getVersion, getPackageJson, writePackageJson } from '../../lib/helpers';
+
+export default async () => {
+ const version = await getVersion('@storybook/polymer');
+ mergeDirs(path.resolve(__dirname, 'template'), '.', 'overwrite');
+
+ const packageJson = getPackageJson() || {}; // Maybe we are in a bower only project, still we need a package json
+
+ packageJson.devDependencies = packageJson.devDependencies || {};
+ packageJson.devDependencies['@storybook/polymer'] = version;
+
+ packageJson.scripts = packageJson.scripts || {};
+ packageJson.scripts.storybook = 'start-storybook -p 6006';
+ packageJson.scripts['build-storybook'] = 'build-storybook';
+
+ writePackageJson(packageJson);
+};
diff --git a/lib/cli/generators/POLYMER/template/.storybook/config.js b/lib/cli/generators/POLYMER/template/.storybook/config.js
new file mode 100644
index 00000000000..69b13d97fbe
--- /dev/null
+++ b/lib/cli/generators/POLYMER/template/.storybook/config.js
@@ -0,0 +1,11 @@
+/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */
+
+import { configure } from '@storybook/polymer';
+
+// automatically import all files ending in *.stories.js
+const req = require.context('../src/stories', true, /.stories.js$/);
+function loadStories() {
+ req.keys().forEach((filename) => req(filename));
+}
+
+configure(loadStories, module);
diff --git a/lib/cli/generators/POLYMER/template/src/stories/index.stories.js b/lib/cli/generators/POLYMER/template/src/stories/index.stories.js
new file mode 100644
index 00000000000..88f77313607
--- /dev/null
+++ b/lib/cli/generators/POLYMER/template/src/stories/index.stories.js
@@ -0,0 +1 @@
+// TODO: add demo stories
diff --git a/lib/cli/generators/REACT/index.js b/lib/cli/generators/REACT/index.js
index cc77669f7d6..23c342d2ea8 100644
--- a/lib/cli/generators/REACT/index.js
+++ b/lib/cli/generators/REACT/index.js
@@ -3,20 +3,34 @@ import mergeDirs from 'merge-dirs';
import { getVersions, getPackageJson, writePackageJson } from '../../lib/helpers';
export default async () => {
- const [storybookVersion, actionsVersion, linksVersion] = await getVersions(
+ const [
+ storybookVersion,
+ actionsVersion,
+ linksVersion,
+ addonsVersion,
+ babelCoreVersion,
+ ] = await getVersions(
'@storybook/react',
'@storybook/addon-actions',
- '@storybook/addon-links'
+ '@storybook/addon-links',
+ '@storybook/addons',
+ 'babel-core'
);
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');
const packageJson = getPackageJson();
+ packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
+ }
packageJson.scripts = packageJson.scripts || {};
packageJson.scripts.storybook = 'start-storybook -p 6006';
diff --git a/lib/cli/generators/REACT_NATIVE/index.js b/lib/cli/generators/REACT_NATIVE/index.js
index 5daa36c8094..a9d8c4cc6e8 100644
--- a/lib/cli/generators/REACT_NATIVE/index.js
+++ b/lib/cli/generators/REACT_NATIVE/index.js
@@ -5,10 +5,19 @@ import chalk from 'chalk';
import { getVersions, getPackageJson, writePackageJson, paddedLog } from '../../lib/helpers';
export default async () => {
- const [storybookVersion, actionsVersion, linksVersion, propTypesVersion] = await getVersions(
+ const [
+ storybookVersion,
+ actionsVersion,
+ linksVersion,
+ addonsVersion,
+ babelCoreVersion,
+ propTypesVersion,
+ ] = await getVersions(
'@storybook/react-native',
'@storybook/addon-actions',
'@storybook/addon-links',
+ '@storybook/addons',
+ 'babel-core',
'prop-types'
);
@@ -37,6 +46,11 @@ export default async () => {
packageJson.devDependencies['@storybook/react-native'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
+ }
if (!packageJson.dependencies['react-dom'] && !packageJson.devDependencies['react-dom']) {
const reactVersion = packageJson.dependencies.react;
diff --git a/lib/cli/generators/REACT_NATIVE_SCRIPTS/index.js b/lib/cli/generators/REACT_NATIVE_SCRIPTS/index.js
index c4ed98023ec..021eb1b1518 100644
--- a/lib/cli/generators/REACT_NATIVE_SCRIPTS/index.js
+++ b/lib/cli/generators/REACT_NATIVE_SCRIPTS/index.js
@@ -3,10 +3,19 @@ import path from 'path';
import { getVersions, getPackageJson, writePackageJson } from '../../lib/helpers';
export default async () => {
- const [storybookVersion, actionsVersion, linksVersion, propTypesVersion] = await getVersions(
+ const [
+ storybookVersion,
+ actionsVersion,
+ linksVersion,
+ addonsVersion,
+ babelCoreVersion,
+ propTypesVersion,
+ ] = await getVersions(
'@storybook/react-native',
'@storybook/addon-actions',
'@storybook/addon-links',
+ '@storybook/addons',
+ 'babel-core',
'prop-types'
);
@@ -21,6 +30,11 @@ export default async () => {
packageJson.devDependencies['@storybook/react-native'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
+ }
if (!packageJson.dependencies['react-dom'] && !packageJson.devDependencies['react-dom']) {
const reactVersion = packageJson.dependencies.react;
diff --git a/lib/cli/generators/REACT_SCRIPTS/index.js b/lib/cli/generators/REACT_SCRIPTS/index.js
index 81663405828..3600bb2b062 100644
--- a/lib/cli/generators/REACT_SCRIPTS/index.js
+++ b/lib/cli/generators/REACT_SCRIPTS/index.js
@@ -4,21 +4,35 @@ import fs from 'fs';
import { getVersions, getPackageJson, writePackageJson } from '../../lib/helpers';
export default async () => {
- const [storybookVersion, actionsVersion, linksVersion] = await getVersions(
+ const [
+ storybookVersion,
+ actionsVersion,
+ linksVersion,
+ addonsVersion,
+ babelCoreVersion,
+ ] = await getVersions(
'@storybook/react',
'@storybook/addon-actions',
- '@storybook/addon-links'
+ '@storybook/addon-links',
+ '@storybook/addons',
+ 'babel-core'
);
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');
const packageJson = getPackageJson();
+ packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
+ }
packageJson.scripts.storybook = 'start-storybook -p 9009';
packageJson.scripts['build-storybook'] = 'build-storybook';
diff --git a/lib/cli/generators/SFC_VUE/index.js b/lib/cli/generators/SFC_VUE/index.js
index 6674f3159f2..72a302b8699 100644
--- a/lib/cli/generators/SFC_VUE/index.js
+++ b/lib/cli/generators/SFC_VUE/index.js
@@ -9,10 +9,19 @@ import {
} from '../../lib/helpers';
export default async () => {
- const [storybookVersion, actionsVersion, linksVersion, babelPresetVersion] = await getVersions(
+ const [
+ storybookVersion,
+ actionsVersion,
+ linksVersion,
+ addonsVersion,
+ babelCoreVersion,
+ babelPresetVersion,
+ ] = await getVersions(
'@storybook/vue',
'@storybook/addon-actions',
'@storybook/addon-links',
+ '@storybook/addons',
+ 'babel-core',
'babel-preset-vue'
);
@@ -20,10 +29,16 @@ export default async () => {
const packageJson = getPackageJson();
+ packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/vue'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
+ }
packageJson.devDependencies['babel-preset-vue'] = babelPresetVersion;
packageJson.scripts = packageJson.scripts || {};
diff --git a/lib/cli/generators/UPDATE_PACKAGE_ORGANIZATIONS/index.js b/lib/cli/generators/UPDATE_PACKAGE_ORGANIZATIONS/index.js
index ab74ba51a67..038802879c6 100644
--- a/lib/cli/generators/UPDATE_PACKAGE_ORGANIZATIONS/index.js
+++ b/lib/cli/generators/UPDATE_PACKAGE_ORGANIZATIONS/index.js
@@ -1,14 +1,25 @@
+/* eslint-disable no-param-reassign */
import path from 'path';
import { spawn } from 'child-process-promise';
import { packageNames } from '@storybook/codemod';
-import { getVersion, getPackageJson, writePackageJson } from '../../lib/helpers';
+import { getVersion, getVersions, getPackageJson, writePackageJson } from '../../lib/helpers';
async function updatePackage(devDependencies, oldName, newName) {
if (devDependencies[oldName]) {
- /* eslint-disable no-param-reassign */
delete devDependencies[oldName];
devDependencies[newName] = await getVersion(newName);
- /* eslint-enable */
+ }
+}
+
+async function addPeerDependencies(packageJson) {
+ const [addonsVersion, babelCoreVersion] = await getVersions('@storybook/addons', 'babel-core');
+
+ packageJson.dependencies = packageJson.dependencies || {};
+
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
}
}
@@ -26,6 +37,9 @@ async function updatePackageJson() {
if (!devDependencies['@storybook/react'] && !devDependencies['@storybook/react-native']) {
throw new Error('Expected to find `@kadira/[react-native]-storybook` in devDependencies');
}
+
+ await addPeerDependencies(packageJson);
+
writePackageJson(packageJson);
}
diff --git a/lib/cli/generators/VUE/index.js b/lib/cli/generators/VUE/index.js
index 6674f3159f2..72a302b8699 100644
--- a/lib/cli/generators/VUE/index.js
+++ b/lib/cli/generators/VUE/index.js
@@ -9,10 +9,19 @@ import {
} from '../../lib/helpers';
export default async () => {
- const [storybookVersion, actionsVersion, linksVersion, babelPresetVersion] = await getVersions(
+ const [
+ storybookVersion,
+ actionsVersion,
+ linksVersion,
+ addonsVersion,
+ babelCoreVersion,
+ babelPresetVersion,
+ ] = await getVersions(
'@storybook/vue',
'@storybook/addon-actions',
'@storybook/addon-links',
+ '@storybook/addons',
+ 'babel-core',
'babel-preset-vue'
);
@@ -20,10 +29,16 @@ export default async () => {
const packageJson = getPackageJson();
+ packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/vue'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
+ }
packageJson.devDependencies['babel-preset-vue'] = babelPresetVersion;
packageJson.scripts = packageJson.scripts || {};
diff --git a/lib/cli/generators/WEBPACK_REACT/index.js b/lib/cli/generators/WEBPACK_REACT/index.js
index a606f0710cf..71100e8a33f 100644
--- a/lib/cli/generators/WEBPACK_REACT/index.js
+++ b/lib/cli/generators/WEBPACK_REACT/index.js
@@ -3,20 +3,34 @@ import path from 'path';
import { getVersions, getPackageJson, writePackageJson } from '../../lib/helpers';
export default async () => {
- const [storybookVersion, actionsVersion, linksVersion] = await getVersions(
+ const [
+ storybookVersion,
+ actionsVersion,
+ linksVersion,
+ addonsVersion,
+ babelCoreVersion,
+ ] = await getVersions(
'@storybook/react',
'@storybook/addon-actions',
- '@storybook/addon-links'
+ '@storybook/addon-links',
+ '@storybook/addons',
+ 'babel-core'
);
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');
const packageJson = getPackageJson();
+ packageJson.dependencies = packageJson.dependencies || {};
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react'] = storybookVersion;
packageJson.devDependencies['@storybook/addon-actions'] = actionsVersion;
packageJson.devDependencies['@storybook/addon-links'] = linksVersion;
+ packageJson.devDependencies['@storybook/addons'] = addonsVersion;
+
+ if (!packageJson.dependencies['babel-core'] && !packageJson.devDependencies['babel-core']) {
+ packageJson.devDependencies['babel-core'] = babelCoreVersion;
+ }
packageJson.scripts = packageJson.scripts || {};
packageJson.scripts.storybook = 'start-storybook -p 6006';
diff --git a/lib/cli/lib/detect.js b/lib/cli/lib/detect.js
index d7fd28ca9fc..8226013b13d 100644
--- a/lib/cli/lib/detect.js
+++ b/lib/cli/lib/detect.js
@@ -1,96 +1,127 @@
import path from 'path';
import fs from 'fs';
import types from './project_types';
-import { getPackageJson } from './helpers';
+import { getBowerJson, getPackageJson } from './helpers';
-export default function detect(options) {
- const packageJson = getPackageJson();
- if (!packageJson) {
- return types.UNDETECTED;
+function detectFramework(dependencies) {
+ if (!dependencies) {
+ return false;
+ }
+ if (
+ dependencies.devDependencies &&
+ (dependencies.devDependencies['vue-loader'] || dependencies.devDependencies.vueify)
+ ) {
+ return types.SFC_VUE;
}
- if (!options.force && packageJson.devDependencies) {
+ if (
+ (dependencies.dependencies && dependencies.dependencies.vue) ||
+ (dependencies.devDependencies && dependencies.devDependencies.vue) ||
+ (dependencies.dependencies && dependencies.dependencies.nuxt) ||
+ (dependencies.devDependencies && dependencies.devDependencies.nuxt)
+ ) {
+ return types.VUE;
+ }
+
+ if (
+ (dependencies.dependencies && dependencies.dependencies['react-scripts']) ||
+ (dependencies.devDependencies && dependencies.devDependencies['react-scripts'])
+ ) {
+ return types.REACT_SCRIPTS;
+ }
+
+ if (
+ ((dependencies.devDependencies && dependencies.devDependencies.webpack) ||
+ (dependencies.dependencies && dependencies.dependencies.webpack)) &&
+ ((dependencies.devDependencies && dependencies.devDependencies.react) ||
+ (dependencies.dependencies && dependencies.dependencies.react))
+ ) {
+ return types.WEBPACK_REACT;
+ }
+
+ if (dependencies.peerDependencies && dependencies.peerDependencies.react) {
+ return types.REACT_PROJECT;
+ }
+
+ if (
+ (dependencies.dependencies && dependencies.dependencies['react-native-scripts']) ||
+ (dependencies.devDependencies && dependencies.devDependencies['react-native-scripts'])
+ ) {
+ return types.REACT_NATIVE_SCRIPTS;
+ }
+
+ if (dependencies.dependencies && dependencies.dependencies['react-native']) {
+ return types.REACT_NATIVE;
+ }
+
+ if (
+ (dependencies.dependencies && dependencies.dependencies.react) ||
+ (dependencies.devDependencies && dependencies.devDependencies.react)
+ ) {
+ return types.REACT;
+ }
+
+ if (
+ (dependencies.dependencies && dependencies.dependencies['@angular/core']) ||
+ (dependencies.devDependencies && dependencies.devDependencies['@angular/core'])
+ ) {
+ return types.ANGULAR;
+ }
+
+ if (
+ (dependencies.dependencies && dependencies.dependencies['@polymer/polymer']) ||
+ (dependencies.devDependencies && dependencies.devDependencies['@polymer/polymer']) ||
+ (dependencies.dependencies && dependencies.dependencies.polymer) ||
+ (dependencies.devDependencies && dependencies.devDependencies.polymer)
+ ) {
+ return types.POLYMER;
+ }
+ return false;
+}
+
+function isStorybookInstalled(dependencies, force) {
+ if (!dependencies) {
+ return false;
+ }
+
+ if (!force && dependencies.devDependencies) {
+ const supportedFrameworks = ['react', 'react-native', 'vue', 'angular', 'polymer'];
if (
- packageJson.devDependencies['@storybook/react'] ||
- packageJson.devDependencies['@storybook/react-native'] ||
- packageJson.devDependencies['@storybook/vue'] ||
- packageJson.devDependencies['@storybook/angular']
+ supportedFrameworks.reduce(
+ (storybookPresent, framework) =>
+ storybookPresent || dependencies.devDependencies[`@storybook/${framework}`],
+ false
+ )
) {
return types.ALREADY_HAS_STORYBOOK;
}
if (
- packageJson.devDependencies['@kadira/storybook'] ||
- packageJson.devDependencies['@kadira/react-native-storybook']
+ dependencies.devDependencies['@kadira/storybook'] ||
+ dependencies.devDependencies['@kadira/react-native-storybook']
) {
return types.UPDATE_PACKAGE_ORGANIZATIONS;
}
}
+ return false;
+}
+
+export default function detect(options) {
+ const packageJson = getPackageJson();
+ const bowerJson = getBowerJson();
+
+ if (!packageJson && !bowerJson) {
+ return types.UNDETECTED;
+ }
if (fs.existsSync(path.resolve('.meteor'))) {
return types.METEOR;
}
- if (
- packageJson.devDependencies &&
- (packageJson.devDependencies['vue-loader'] || packageJson.devDependencies.vueify)
- ) {
- return types.SFC_VUE;
+ const storyBookInstalled = isStorybookInstalled(packageJson, options.force);
+ if (storyBookInstalled) {
+ return storyBookInstalled;
}
- if (
- (packageJson.dependencies && packageJson.dependencies.vue) ||
- (packageJson.devDependencies && packageJson.devDependencies.vue) ||
- (packageJson.dependencies && packageJson.dependencies.nuxt) ||
- (packageJson.devDependencies && packageJson.devDependencies.nuxt)
- ) {
- return types.VUE;
- }
-
- if (
- (packageJson.dependencies && packageJson.dependencies['react-scripts']) ||
- (packageJson.devDependencies && packageJson.devDependencies['react-scripts'])
- ) {
- return types.REACT_SCRIPTS;
- }
-
- if (
- ((packageJson.devDependencies && packageJson.devDependencies.webpack) ||
- (packageJson.dependencies && packageJson.dependencies.webpack)) &&
- ((packageJson.devDependencies && packageJson.devDependencies.react) ||
- (packageJson.dependencies && packageJson.dependencies.react))
- ) {
- return types.WEBPACK_REACT;
- }
-
- if (packageJson.peerDependencies && packageJson.peerDependencies.react) {
- return types.REACT_PROJECT;
- }
-
- if (
- (packageJson.dependencies && packageJson.dependencies['react-native-scripts']) ||
- (packageJson.devDependencies && packageJson.devDependencies['react-native-scripts'])
- ) {
- return types.REACT_NATIVE_SCRIPTS;
- }
-
- if (packageJson.dependencies && packageJson.dependencies['react-native']) {
- return types.REACT_NATIVE;
- }
-
- if (
- (packageJson.dependencies && packageJson.dependencies.react) ||
- (packageJson.devDependencies && packageJson.devDependencies.react)
- ) {
- return types.REACT;
- }
-
- if (
- (packageJson.dependencies && packageJson.dependencies['@angular/core']) ||
- (packageJson.devDependencies && packageJson.devDependencies['@angular/core'])
- ) {
- return types.ANGULAR;
- }
-
- return types.UNDETECTED;
+ return detectFramework(packageJson) || detectFramework(bowerJson) || types.UNDETECTED;
}
diff --git a/lib/cli/lib/helpers.js b/lib/cli/lib/helpers.js
index 6a3034df079..3b481312cac 100644
--- a/lib/cli/lib/helpers.js
+++ b/lib/cli/lib/helpers.js
@@ -47,6 +47,16 @@ export function getPackageJson() {
return JSON.parse(jsonContent);
}
+export function getBowerJson() {
+ const bowerJsonPath = path.resolve('bower.json');
+ if (!fs.existsSync(bowerJsonPath)) {
+ return false;
+ }
+
+ const jsonContent = fs.readFileSync(bowerJsonPath, 'utf8');
+ return JSON.parse(jsonContent);
+}
+
export function writePackageJson(packageJson) {
const content = `${JSON.stringify(packageJson, null, 2)}\n`;
const packageJsonPath = path.resolve('package.json');
diff --git a/lib/cli/lib/project_types.js b/lib/cli/lib/project_types.js
index db6675801d6..d1c308322e3 100644
--- a/lib/cli/lib/project_types.js
+++ b/lib/cli/lib/project_types.js
@@ -12,4 +12,5 @@ export default {
ANGULAR: 'ANGULAR',
ALREADY_HAS_STORYBOOK: 'ALREADY_HAS_STORYBOOK',
UPDATE_PACKAGE_ORGANIZATIONS: 'UPDATE_PACKAGE_ORGANIZATIONS',
+ POLYMER: 'POLYMER',
};
diff --git a/lib/cli/package.json b/lib/cli/package.json
index b05193939a8..796fad845d0 100644
--- a/lib/cli/package.json
+++ b/lib/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/cli",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook's CLI - easiest method of adding storybook to your projects",
"keywords": [
"cli",
@@ -25,42 +25,43 @@
"test": "cd test && ./run_tests.sh"
},
"dependencies": {
- "@storybook/codemod": "^3.3.3",
+ "@storybook/codemod": "^3.4.0-alpha.4",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"babel-register": "^6.26.0",
"babel-runtime": "^6.26.0",
"chalk": "^2.3.0",
"child-process-promise": "^2.2.1",
- "commander": "^2.12.2",
+ "commander": "^2.13.0",
"cross-spawn": "^5.0.1",
"jscodeshift": "^0.4.0",
"json5": "^0.5.1",
"latest-version": "^3.1.0",
"merge-dirs": "^0.2.1",
"semver": "^5.4.1",
- "shelljs": "^0.7.8",
+ "shelljs": "^0.8.0",
"update-notifier": "^2.3.0"
},
"devDependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-centered": "^3.3.3",
- "@storybook/addon-graphql": "^3.3.3",
- "@storybook/addon-info": "^3.3.3",
- "@storybook/addon-knobs": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@storybook/addon-notes": "^3.3.3",
- "@storybook/addon-options": "^3.3.3",
- "@storybook/addon-storyshots": "^3.3.3",
- "@storybook/addons": "^3.3.3",
- "@storybook/angular": "^3.3.3",
- "@storybook/channel-postmessage": "^3.3.3",
- "@storybook/channel-websocket": "^3.3.3",
- "@storybook/channels": "^3.3.3",
- "@storybook/react": "^3.3.3",
- "@storybook/react-native": "^3.3.3",
- "@storybook/ui": "^3.3.3",
- "@storybook/vue": "^3.3.3",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-centered": "^3.4.0-alpha.4",
+ "@storybook/addon-graphql": "^3.4.0-alpha.4",
+ "@storybook/addon-info": "^3.4.0-alpha.4",
+ "@storybook/addon-knobs": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addon-notes": "^3.4.0-alpha.4",
+ "@storybook/addon-options": "^3.4.0-alpha.4",
+ "@storybook/addon-storyshots": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "@storybook/angular": "^3.4.0-alpha.4",
+ "@storybook/channel-postmessage": "^3.4.0-alpha.4",
+ "@storybook/channel-websocket": "^3.4.0-alpha.4",
+ "@storybook/channels": "^3.4.0-alpha.4",
+ "@storybook/polymer": "^3.4.0-alpha.4",
+ "@storybook/react": "^3.4.0-alpha.4",
+ "@storybook/react-native": "^3.4.0-alpha.4",
+ "@storybook/ui": "^3.4.0-alpha.4",
+ "@storybook/vue": "^3.4.0-alpha.4",
"check-node-version": "2.1.0",
"npx": "9.7.1"
}
diff --git a/lib/cli/test/fixtures/angular-cli/src/tsconfig.app.json b/lib/cli/test/fixtures/angular-cli/src/tsconfig.app.json
new file mode 100644
index 00000000000..39ba8dbacbb
--- /dev/null
+++ b/lib/cli/test/fixtures/angular-cli/src/tsconfig.app.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../out-tsc/app",
+ "baseUrl": "./",
+ "module": "es2015",
+ "types": []
+ },
+ "exclude": [
+ "test.ts",
+ "**/*.spec.ts"
+ ]
+}
diff --git a/lib/cli/test/fixtures/angular-cli/src/tsconfig.json b/lib/cli/test/fixtures/angular-cli/src/tsconfig.json
deleted file mode 100644
index 3c43903cfdd..00000000000
--- a/lib/cli/test/fixtures/angular-cli/src/tsconfig.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "../tsconfig.json"
-}
diff --git a/lib/cli/test/fixtures/angular-cli/tsconfig.json b/lib/cli/test/fixtures/angular-cli/tsconfig.json
index 5d99906987d..a6c016bf38a 100644
--- a/lib/cli/test/fixtures/angular-cli/tsconfig.json
+++ b/lib/cli/test/fixtures/angular-cli/tsconfig.json
@@ -1,23 +1,19 @@
-
-
{
+ "compileOnSave": false,
"compilerOptions": {
- "baseUrl": "",
+ "outDir": "./dist/out-tsc",
+ "sourceMap": true,
"declaration": false,
+ "moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
- "lib": ["es6", "dom"],
- "mapRoot": "./",
- "module": "es6",
- "moduleResolution": "node",
- "outDir": "../dist/out-tsc",
- "sourceMap": true,
"target": "es5",
"typeRoots": [
- "../node_modules/@types"
+ "node_modules/@types"
+ ],
+ "lib": [
+ "es2017",
+ "dom"
]
- },
- "exclude": [
- "node_modules"
- ]
+ }
}
diff --git a/lib/cli/test/fixtures/polymer/package.json b/lib/cli/test/fixtures/polymer/package.json
new file mode 100644
index 00000000000..99064a30234
--- /dev/null
+++ b/lib/cli/test/fixtures/polymer/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "polymer-fixture",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "scripts": {
+ "build": "webpack -p dist"
+ },
+ "dependencies": {
+ "@polymer/polymer": "^2.2.0"
+ },
+ "devDependencies": {
+
+ }
+}
diff --git a/lib/cli/test/run_tests.sh b/lib/cli/test/run_tests.sh
index 0c97dc6be21..59e8c600d9e 100755
--- a/lib/cli/test/run_tests.sh
+++ b/lib/cli/test/run_tests.sh
@@ -12,18 +12,24 @@ function cleanup {
trap cleanup EXIT
update=0
+update_only=0
skip=0
fixtures_dir='fixtures'
# parse command-line options
# `-u` turns on snapshot update mode
+# `-o` does the same, plus skips the smoke tests
# `-s` skips snapshot testing
# '-f' sets fixtures directory
-while getopts ":usf:" opt; do
+while getopts ":uosf:" opt; do
case $opt in
u)
update=1
;;
+ o)
+ update_only=1
+ update=1
+ ;;
s)
skip=1
;;
@@ -72,6 +78,11 @@ if [ $update -eq 1 ]
fi
fi
+if [ $update_only -eq 1 ]
+ then
+ exit 0
+ fi
+
# install all the dependencies in a single run
cd ../../..
yarn --pure-lockfile
diff --git a/lib/cli/test/snapshots/angular-cli/.storybook/config.js b/lib/cli/test/snapshots/angular-cli/.storybook/config.js
index 5d8908b9024..bc9d1d6cd9a 100644
--- a/lib/cli/test/snapshots/angular-cli/.storybook/config.js
+++ b/lib/cli/test/snapshots/angular-cli/.storybook/config.js
@@ -3,7 +3,7 @@
import { configure } from '@storybook/angular';
// automatically import all files ending in *.stories.ts
-const req = require.context('../stories', true, /.stories.ts$/);
+const req = require.context('../src/stories', true, /.stories.ts$/);
function loadStories() {
req.keys().forEach((filename) => req(filename));
}
diff --git a/lib/cli/test/snapshots/angular-cli/package.json b/lib/cli/test/snapshots/angular-cli/package.json
index 85ac701116e..7c40d1920ee 100644
--- a/lib/cli/test/snapshots/angular-cli/package.json
+++ b/lib/cli/test/snapshots/angular-cli/package.json
@@ -44,10 +44,11 @@
"ts-node": "1.2.1",
"tslint": "^4.3.0",
"typescript": "~2.4.0",
- "@storybook/angular": "^3.3.3",
- "@storybook/addon-notes": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
- "@types/lodash-es": "^4.17.0"
+ "@storybook/angular": "^3.4.0-alpha.4",
+ "@storybook/addon-notes": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "babel-core": "^6.26.0"
}
}
diff --git a/lib/cli/test/snapshots/angular-cli/stories/index.stories.ts b/lib/cli/test/snapshots/angular-cli/src/stories/index.stories.ts
similarity index 100%
rename from lib/cli/test/snapshots/angular-cli/stories/index.stories.ts
rename to lib/cli/test/snapshots/angular-cli/src/stories/index.stories.ts
diff --git a/lib/cli/test/snapshots/angular-cli/src/tsconfig.app.json b/lib/cli/test/snapshots/angular-cli/src/tsconfig.app.json
new file mode 100644
index 00000000000..39ba8dbacbb
--- /dev/null
+++ b/lib/cli/test/snapshots/angular-cli/src/tsconfig.app.json
@@ -0,0 +1,13 @@
+{
+ "extends": "../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../out-tsc/app",
+ "baseUrl": "./",
+ "module": "es2015",
+ "types": []
+ },
+ "exclude": [
+ "test.ts",
+ "**/*.spec.ts"
+ ]
+}
diff --git a/lib/cli/test/snapshots/angular-cli/src/tsconfig.json b/lib/cli/test/snapshots/angular-cli/src/tsconfig.json
deleted file mode 100644
index 3c43903cfdd..00000000000
--- a/lib/cli/test/snapshots/angular-cli/src/tsconfig.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "../tsconfig.json"
-}
diff --git a/lib/cli/test/snapshots/angular-cli/tsconfig.json b/lib/cli/test/snapshots/angular-cli/tsconfig.json
index 5d99906987d..a6c016bf38a 100644
--- a/lib/cli/test/snapshots/angular-cli/tsconfig.json
+++ b/lib/cli/test/snapshots/angular-cli/tsconfig.json
@@ -1,23 +1,19 @@
-
-
{
+ "compileOnSave": false,
"compilerOptions": {
- "baseUrl": "",
+ "outDir": "./dist/out-tsc",
+ "sourceMap": true,
"declaration": false,
+ "moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
- "lib": ["es6", "dom"],
- "mapRoot": "./",
- "module": "es6",
- "moduleResolution": "node",
- "outDir": "../dist/out-tsc",
- "sourceMap": true,
"target": "es5",
"typeRoots": [
- "../node_modules/@types"
+ "node_modules/@types"
+ ],
+ "lib": [
+ "es2017",
+ "dom"
]
- },
- "exclude": [
- "node_modules"
- ]
+ }
}
diff --git a/lib/cli/test/snapshots/meteor/package.json b/lib/cli/test/snapshots/meteor/package.json
index ca1a96b3746..6f21bb8e9c2 100644
--- a/lib/cli/test/snapshots/meteor/package.json
+++ b/lib/cli/test/snapshots/meteor/package.json
@@ -14,12 +14,14 @@
"react-dom": "^16.2.0"
},
"devDependencies": {
+ "babel-core": "^6.26.0",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-1": "^6.24.1",
"babel-root-slash-import": "^1.1.0",
- "@storybook/react": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3"
+ "@storybook/react": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4"
}
}
diff --git a/lib/cli/test/snapshots/polymer/.storybook/config.js b/lib/cli/test/snapshots/polymer/.storybook/config.js
new file mode 100644
index 00000000000..69b13d97fbe
--- /dev/null
+++ b/lib/cli/test/snapshots/polymer/.storybook/config.js
@@ -0,0 +1,11 @@
+/* eslint-disable import/no-extraneous-dependencies, import/no-unresolved, import/extensions */
+
+import { configure } from '@storybook/polymer';
+
+// automatically import all files ending in *.stories.js
+const req = require.context('../src/stories', true, /.stories.js$/);
+function loadStories() {
+ req.keys().forEach((filename) => req(filename));
+}
+
+configure(loadStories, module);
diff --git a/lib/cli/test/snapshots/polymer/package.json b/lib/cli/test/snapshots/polymer/package.json
new file mode 100644
index 00000000000..e75856834e3
--- /dev/null
+++ b/lib/cli/test/snapshots/polymer/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "polymer-fixture",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "scripts": {
+ "build": "webpack -p dist",
+ "storybook": "start-storybook -p 6006",
+ "build-storybook": "build-storybook"
+ },
+ "dependencies": {
+ "@polymer/polymer": "^2.2.0"
+ },
+ "devDependencies": {
+ "@storybook/polymer": "^3.4.0-alpha.4"
+ }
+}
diff --git a/lib/cli/test/snapshots/polymer/src/stories/index.stories.js b/lib/cli/test/snapshots/polymer/src/stories/index.stories.js
new file mode 100644
index 00000000000..88f77313607
--- /dev/null
+++ b/lib/cli/test/snapshots/polymer/src/stories/index.stories.js
@@ -0,0 +1 @@
+// TODO: add demo stories
diff --git a/lib/cli/test/snapshots/react/package.json b/lib/cli/test/snapshots/react/package.json
index 7a80f78bd80..ca8830f09eb 100644
--- a/lib/cli/test/snapshots/react/package.json
+++ b/lib/cli/test/snapshots/react/package.json
@@ -20,8 +20,10 @@
"rollup-plugin-commonjs": "^8.2.0",
"rollup-plugin-node-resolve": "^3.0.0",
"rollup-plugin-replace": "^1.1.1",
- "@storybook/react": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3"
+ "@storybook/react": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "babel-core": "^6.26.0"
}
}
diff --git a/lib/cli/test/snapshots/react_native/package.json b/lib/cli/test/snapshots/react_native/package.json
index 2bc3d923e87..629b4340e59 100644
--- a/lib/cli/test/snapshots/react_native/package.json
+++ b/lib/cli/test/snapshots/react_native/package.json
@@ -16,9 +16,11 @@
"babel-preset-react-native": "3.0.1",
"jest": "20.0.4",
"react-test-renderer": "16.0.0-alpha.12",
- "@storybook/react-native": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
+ "@storybook/react-native": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "babel-core": "^6.26.0",
"react-dom": "16.0.0-alpha.12",
"prop-types": "^15.6.0"
},
diff --git a/lib/cli/test/snapshots/react_native_scripts/package.json b/lib/cli/test/snapshots/react_native_scripts/package.json
index 5318e325150..a79e720d031 100644
--- a/lib/cli/test/snapshots/react_native_scripts/package.json
+++ b/lib/cli/test/snapshots/react_native_scripts/package.json
@@ -6,9 +6,11 @@
"react-native-scripts": "1.3.1",
"jest-expo": "~20.0.0",
"react-test-renderer": "16.0.0-alpha.12",
- "@storybook/react-native": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
+ "@storybook/react-native": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "babel-core": "^6.26.0",
"react-dom": "16.0.0-alpha.12",
"prop-types": "^15.6.0"
},
diff --git a/lib/cli/test/snapshots/react_project/package.json b/lib/cli/test/snapshots/react_project/package.json
index 0ac17ba25e5..531a46c6a53 100644
--- a/lib/cli/test/snapshots/react_project/package.json
+++ b/lib/cli/test/snapshots/react_project/package.json
@@ -13,12 +13,15 @@
"babel-preset-react": "^6.24.1",
"react": "^15.6.1",
"react-dom": "^15.6.1",
- "@storybook/react": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3"
+ "@storybook/react": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "babel-core": "^6.26.0"
},
"peerDependencies": {
"react": "*",
"react-dom": "*"
- }
+ },
+ "dependencies": {}
}
diff --git a/lib/cli/test/snapshots/react_scripts/package.json b/lib/cli/test/snapshots/react_scripts/package.json
index dbec1dbfe95..78170f6e846 100644
--- a/lib/cli/test/snapshots/react_scripts/package.json
+++ b/lib/cli/test/snapshots/react_scripts/package.json
@@ -16,8 +16,10 @@
"build-storybook": "build-storybook -s public"
},
"devDependencies": {
- "@storybook/react": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3"
+ "@storybook/react": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "babel-core": "^6.26.0"
}
}
diff --git a/lib/cli/test/snapshots/sfc_vue/package.json b/lib/cli/test/snapshots/sfc_vue/package.json
index 71de4796336..577f31df3b6 100644
--- a/lib/cli/test/snapshots/sfc_vue/package.json
+++ b/lib/cli/test/snapshots/sfc_vue/package.json
@@ -49,9 +49,10 @@
"webpack-dev-middleware": "^1.10.0",
"webpack-hot-middleware": "^2.18.0",
"webpack-merge": "^4.1.0",
- "@storybook/vue": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
+ "@storybook/vue": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
"babel-preset-vue": "^2.0.0"
},
"engines": {
diff --git a/lib/cli/test/snapshots/update_package_organisations/package.json b/lib/cli/test/snapshots/update_package_organisations/package.json
index 57fbecce5eb..448b052e38e 100644
--- a/lib/cli/test/snapshots/update_package_organisations/package.json
+++ b/lib/cli/test/snapshots/update_package_organisations/package.json
@@ -8,7 +8,9 @@
"react-scripts": "0.9.x"
},
"devDependencies": {
- "@storybook/react": "^3.3.3"
+ "@storybook/react": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
+ "babel-core": "^6.26.0"
},
"scripts": {
"start": "react-scripts start",
diff --git a/lib/cli/test/snapshots/vue/package.json b/lib/cli/test/snapshots/vue/package.json
index a901816c16a..110564d93bd 100644
--- a/lib/cli/test/snapshots/vue/package.json
+++ b/lib/cli/test/snapshots/vue/package.json
@@ -34,9 +34,10 @@
"rollup-plugin-serve": "^0.4.0",
"rollup-plugin-vue": "^2.4.0",
"rollup-watch": "^4.0.0",
- "@storybook/vue": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3",
+ "@storybook/vue": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4",
"babel-preset-vue": "^2.0.0"
}
}
diff --git a/lib/cli/test/snapshots/webpack_react/package.json b/lib/cli/test/snapshots/webpack_react/package.json
index 0a8a02ea588..b87408daaf3 100644
--- a/lib/cli/test/snapshots/webpack_react/package.json
+++ b/lib/cli/test/snapshots/webpack_react/package.json
@@ -17,8 +17,9 @@
"babel-loader": "^7.1.2",
"babel-preset-react": "^6.24.1",
"webpack": "^3.5.5",
- "@storybook/react": "^3.3.3",
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-links": "^3.3.3"
+ "@storybook/react": "^3.4.0-alpha.4",
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-links": "^3.4.0-alpha.4",
+ "@storybook/addons": "^3.4.0-alpha.4"
}
}
diff --git a/lib/client-logger/package.json b/lib/client-logger/package.json
index 77cbf8242fa..a7ff5b12dd6 100644
--- a/lib/client-logger/package.json
+++ b/lib/client-logger/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/client-logger",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "",
"license": "MIT",
"main": "dist/index.js",
diff --git a/lib/codemod/package.json b/lib/codemod/package.json
index 41a717b3350..eca8d92af8a 100644
--- a/lib/codemod/package.json
+++ b/lib/codemod/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/codemod",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "A collection of codemod scripts written with JSCodeshift",
"license": "MIT",
"main": "dist/index.js",
diff --git a/lib/components/package.json b/lib/components/package.json
index 25cd4fbc608..aeb31231822 100644
--- a/lib/components/package.json
+++ b/lib/components/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/components",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Core Storybook Components",
"license": "MIT",
"main": "dist/index.js",
@@ -24,8 +24,8 @@
"react-dom": "*"
},
"devDependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/addon-knobs": "^3.3.3",
- "@storybook/react": "^3.3.3"
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/addon-knobs": "^3.4.0-alpha.4",
+ "@storybook/react": "^3.4.0-alpha.4"
}
}
diff --git a/lib/core/package.json b/lib/core/package.json
index eb97d9ffa0d..7fe88f6c71c 100644
--- a/lib/core/package.json
+++ b/lib/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/core",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Storybook framework-agnostic API",
"homepage": "https://github.com/storybooks/storybook/tree/master/lib/core",
"bugs": {
@@ -17,7 +17,7 @@
"prepare": "node ../../scripts/prepare.js"
},
"dependencies": {
- "@storybook/client-logger": "^3.3.3",
+ "@storybook/client-logger": "^3.4.0-alpha.4",
"events": "^1.1.1",
"global": "^4.3.2",
"qs": "^6.5.1"
diff --git a/lib/node-logger/package.json b/lib/node-logger/package.json
index 39e728d7023..de8b07d16ba 100644
--- a/lib/node-logger/package.json
+++ b/lib/node-logger/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/node-logger",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "",
"license": "MIT",
"main": "dist/index.js",
diff --git a/lib/ui/.npmignore b/lib/ui/.npmignore
index b467c377fd1..02ba1793bbe 100644
--- a/lib/ui/.npmignore
+++ b/lib/ui/.npmignore
@@ -1,2 +1 @@
-src
.babelrc
diff --git a/lib/ui/package.json b/lib/ui/package.json
index b6aea676ecb..661ba6b3182 100644
--- a/lib/ui/package.json
+++ b/lib/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@storybook/ui",
- "version": "3.3.3",
+ "version": "3.4.0-alpha.4",
"description": "Core Storybook UI",
"license": "MIT",
"main": "dist/index.js",
@@ -15,7 +15,7 @@
"storybook": "start-storybook -p 9010"
},
"dependencies": {
- "@storybook/components": "^3.3.3",
+ "@storybook/components": "^3.4.0-alpha.4",
"@storybook/mantra-core": "^1.7.2",
"@storybook/react-komposer": "^2.0.3",
"babel-runtime": "^6.26.0",
@@ -44,7 +44,7 @@
"react-dom": "*"
},
"devDependencies": {
- "@storybook/addon-actions": "^3.3.3",
- "@storybook/react": "^3.3.3"
+ "@storybook/addon-actions": "^3.4.0-alpha.4",
+ "@storybook/react": "^3.4.0-alpha.4"
}
}
diff --git a/package.json b/package.json
index 13d2142763d..fc133cdc2b8 100644
--- a/package.json
+++ b/package.json
@@ -21,13 +21,14 @@
"docs:deploy:manual": "npm --prefix docs run deploy:manual",
"docs:dev": "npm --prefix docs run dev",
"github-release": "github-release-from-changelog",
- "lint": "yarn lint:js . && yarn lint:md .",
+ "lint": "yarn lint:js . && yarn lint:ts **/*.ts && yarn lint:md .",
"lint:js": "cross-env NODE_ENV=production eslint --cache --cache-location=.cache/eslint --ext .js,.jsx,.json",
+ "lint:ts": "tslint -p . -c tslint.json -t stylish",
"lint:md": "remark",
"publish": "lerna publish",
- "postpublish": "yarn test --cli --update",
+ "postpublish": "yarn --cwd lib/cli test -o",
"repo-dirty-check": "node ./scripts/repo-dirty-check",
- "start": "npm --prefix examples/cra-kitchen-sink run storybook",
+ "start": "npm --prefix examples/official-storybook run storybook",
"test": "node ./scripts/test.js",
"test-latest-cra": "npm --prefix lib/cli run test-latest-cra",
"chromatic": "npm --prefix examples/official-storybook run chromatic"
@@ -36,7 +37,7 @@
"@types/lodash": "^4.14.92",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.0",
- "babel-eslint": "^8.1.2",
+ "babel-eslint": "^8.2.1",
"babel-plugin-transform-md-import-to-string": "^1.0.6",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-polyfill": "^6.26.0",
@@ -45,16 +46,17 @@
"babel-preset-stage-0": "^6.24.1",
"chalk": "^2.3.0",
"codecov": "^3.0.0",
- "commander": "^2.12.2",
+ "codelyzer": "^3.1.2",
+ "commander": "^2.13.0",
"cross-env": "^5.1.3",
"danger": "^2.1.10",
"enzyme": "^3.3.0",
"enzyme-adapter-react-16": "^1.1.1",
- "eslint": "^4.14.0",
+ "eslint": "^4.15.0",
"eslint-config-airbnb": "^16.1.0",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-import": "^2.8.0",
- "eslint-plugin-jest": "^21.5.0",
+ "eslint-plugin-jest": "^21.6.2",
"eslint-plugin-json": "^1.2.0",
"eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-prettier": "^2.4.0",
@@ -64,20 +66,20 @@
"glob": "^7.1.2",
"husky": "^0.14.3",
"inquirer": "^4.0.2",
- "jest": "^22.0.4",
- "jest-cli": "^22.0.4",
- "jest-config": "^22.0.4",
- "jest-diff": "^22.0.3",
- "jest-environment-jsdom": "^22.0.4",
+ "jest": "^22.0.6",
+ "jest-cli": "^22.0.6",
+ "jest-config": "^22.0.6",
+ "jest-diff": "^22.0.6",
+ "jest-environment-jsdom": "^22.0.6",
"jest-enzyme": "^4.0.2",
- "jest-image-snapshot": "^2.2.1",
- "jest-jasmine2": "^22.0.4",
- "lerna": "^2.5.1",
+ "jest-image-snapshot": "^2.3.0",
+ "jest-jasmine2": "^22.0.6",
+ "lerna": "^2.6.0",
"lint-staged": "^6.0.0",
"lodash": "^4.17.4",
- "nodemon": "^1.14.7",
+ "nodemon": "^1.14.11",
"npmlog": "^4.1.2",
- "prettier": "^1.9.2",
+ "prettier": "^1.10.2",
"puppeteer": "^0.13.0",
"raf": "^3.4.0",
"react": "^16.2.0",
@@ -88,8 +90,11 @@
"remark-lint-code": "^2.0.0",
"remark-lint-code-eslint": "^2.0.0",
"remark-preset-lint-recommended": "^3.0.1",
- "shelljs": "^0.7.8",
- "symlink-dir": "^1.1.1"
+ "shelljs": "^0.8.0",
+ "symlink-dir": "^1.1.1",
+ "tslint": "~5.9.1",
+ "tslint-config-prettier": "^1.6.0",
+ "tslint-plugin-prettier": "^1.3.0"
},
"engines": {
"node": ">=8.0.0",
@@ -106,6 +111,10 @@
"yarn lint:js --fix",
"git add"
],
+ "*.ts": [
+ "yarn lint:ts --fix",
+ "git add"
+ ],
"*.json": [
"yarn lint:js --fix",
"git add"
@@ -133,6 +142,7 @@
"lib/*",
"examples/angular-cli",
"examples/cra-kitchen-sink",
+ "examples/polymer-cli",
"examples/vue-kitchen-sink",
"examples/official-storybook",
"lib/cli/test/run/*"
diff --git a/scripts/test.js b/scripts/test.js
index ddcaa63fe93..a90f9098bc3 100755
--- a/scripts/test.js
+++ b/scripts/test.js
@@ -43,7 +43,7 @@ const createOption = ({ defaultValue, option, name, extraParam }) => ({
const tasks = {
core: createProject({
- name: `Core & React & Vue ${chalk.gray('(core)')}`,
+ name: `Core & React & Vue & Polymer ${chalk.gray('(core)')}`,
defaultValue: true,
option: '--core',
projectLocation: path.join(__dirname, '..'),
@@ -63,6 +63,13 @@ const tasks = {
projectLocation: path.join(__dirname, '..', 'integration'),
isJest: true,
}),
+ image: createProject({
+ name: `Image snapshots for Official storybook ${chalk.gray('(image)')}`,
+ defaultValue: false,
+ option: '--image',
+ projectLocation: path.join(__dirname, '..', 'examples/official-storybook/image-snapshots'),
+ isJest: true,
+ }),
// 'crna-kitchen-sink': createProject({
// name: `React-Native-App example ${chalk.gray('(crna-kitchen-sink)')} ${chalk.red(
// '[not implemented yet]'
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000000..85db264eac0
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
+ "skipLibCheck": true,
+ "noImplicitAny": true,
+ "lib": [
+ "es2016",
+ "dom"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/angular/tslint.json b/tslint.json
similarity index 84%
rename from app/angular/tslint.json
rename to tslint.json
index d7a4fdd1845..5835bcdb92b 100644
--- a/app/angular/tslint.json
+++ b/tslint.json
@@ -1,8 +1,22 @@
{
+ "extends": [
+ "tslint-plugin-prettier",
+ "tslint-config-prettier"
+ ],
"rulesDirectory": [
"node_modules/codelyzer"
],
"rules": {
+ "prettier": {
+ "severity": "warning",
+ "options": {
+ "printWidth": 100,
+ "tabWidth": 2,
+ "bracketSpacing": true,
+ "trailingComma": "es5",
+ "singleQuote": true
+ }
+ },
"arrow-return-shorthand": true,
"callable-types": true,
"class-name": true,
@@ -20,7 +34,8 @@
"import-spacing": true,
"indent": [
true,
- "spaces"
+ "spaces",
+ 2
],
"interface-over-type-literal": true,
"label-position": true,
@@ -71,6 +86,7 @@
"no-unused-expression": true,
"no-use-before-declare": true,
"no-var-keyword": true,
+ "no-unused-variable": true,
"object-literal-sort-keys": false,
"one-line": [
true,
@@ -106,14 +122,6 @@
"typeof-compare": true,
"unified-signatures": true,
"variable-name": false,
- "whitespace": [
- true,
- "check-branch",
- "check-decl",
- "check-operator",
- "check-separator",
- "check-type"
- ],
"directive-selector": [
true,
"attribute",
@@ -138,5 +146,13 @@
"no-access-missing-member": true,
"templates-use-public": true,
"invoke-injectable": true
+ },
+ "linterOptions": {
+ "exclude": [
+ "lib/cli/test/**",
+ "**/node_modules/**",
+ "**/dist/**",
+ "**/storybook-static/**"
+ ]
}
}
diff --git a/yarn.lock b/yarn.lock
index e71d8a196d9..9a0dc6801f8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,47 +2,46 @@
# yarn lockfile v1
-"@angular-devkit/build-optimizer@~0.0.36":
- version "0.0.36"
- resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.0.36.tgz#e816ee9be22dbb777724f0281acfa72cfff184b7"
+"@angular-devkit/build-optimizer@~0.0.37":
+ version "0.0.37"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.0.37.tgz#ff2a00c6685b7fe935ca663c6efeffd228566caa"
dependencies:
loader-utils "^1.1.0"
source-map "^0.5.6"
typescript "~2.6.1"
webpack-sources "^1.0.1"
-"@angular-devkit/core@0.0.22":
- version "0.0.22"
- resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-0.0.22.tgz#e90f46bf7ff47d260a767959267bc65ffee39ef1"
+"@angular-devkit/core@0.0.24":
+ version "0.0.24"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-0.0.24.tgz#d57a49d42ce81cb5f299dcaee2025fd03b7aad70"
dependencies:
+ ajv "~5.5.1"
+ chokidar "^1.7.0"
source-map "^0.5.6"
-"@angular-devkit/schematics@~0.0.42":
- version "0.0.42"
- resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-0.0.42.tgz#34eea7136455545c8abd21edf94a36870a073fea"
+"@angular-devkit/schematics@~0.0.44":
+ version "0.0.45"
+ resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-0.0.45.tgz#07419a5f8b935e819c9ae039742e81902d9f287d"
dependencies:
- "@angular-devkit/core" "0.0.22"
+ "@angular-devkit/core" "0.0.24"
"@ngtools/json-schema" "^1.1.0"
- "@schematics/schematics" "0.0.11"
- minimist "^1.2.0"
- rxjs "^5.5.2"
"@angular/animations@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-5.1.3.tgz#3af3073bfdfeac61d7e6058257b3b19c97183a96"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-5.2.0.tgz#a3ce02c01b074f0de7c2c23c1f08b4a00f0bec5f"
dependencies:
tslib "^1.7.1"
-"@angular/cli@1.6.3":
- version "1.6.3"
- resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-1.6.3.tgz#63120b347fc8ee206f773074d25fdd4807c189e3"
+"@angular/cli@1.6.4":
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-1.6.4.tgz#422b72871776a8acca6026cbc3d21af82b197046"
dependencies:
- "@angular-devkit/build-optimizer" "~0.0.36"
- "@angular-devkit/schematics" "~0.0.42"
+ "@angular-devkit/build-optimizer" "~0.0.37"
+ "@angular-devkit/schematics" "~0.0.44"
"@ngtools/json-schema" "1.1.0"
- "@ngtools/webpack" "1.9.3"
- "@schematics/angular" "~0.1.11"
- autoprefixer "^6.5.3"
+ "@ngtools/webpack" "1.9.4"
+ "@schematics/angular" "~0.1.12"
+ autoprefixer "^7.2.3"
chalk "~2.2.0"
circular-dependency-plugin "^4.2.1"
common-tags "^1.3.1"
@@ -58,7 +57,7 @@
fs-extra "^4.0.0"
glob "^7.0.3"
html-webpack-plugin "^2.29.0"
- istanbul-instrumenter-loader "^2.0.0"
+ istanbul-instrumenter-loader "^3.0.0"
karma-source-map-support "^1.2.0"
less "^2.7.2"
less-loader "^4.0.5"
@@ -71,8 +70,8 @@
nopt "^4.0.1"
opn "~5.1.0"
portfinder "~1.0.12"
- postcss-custom-properties "^6.1.0"
- postcss-loader "^2.0.8"
+ postcss-import "^11.0.0"
+ postcss-loader "^2.0.10"
postcss-url "^7.1.2"
raw-loader "^0.5.1"
resolve "^1.1.7"
@@ -98,75 +97,67 @@
node-sass "^4.3.0"
"@angular/common@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/common/-/common-5.1.3.tgz#db517c00a95f72885eb2091098eaed4f95494a63"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/common/-/common-5.2.0.tgz#d184fb90763da1d1bab1f6c4f41dd80c79e47506"
dependencies:
tslib "^1.7.1"
"@angular/compiler-cli@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-5.1.3.tgz#e9cfd183a8a12fddad0188d2b7e4e9a45f302d82"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-5.2.0.tgz#336b6d0127c69f25637cbcd82a4b76de6f3a2cce"
dependencies:
chokidar "^1.4.2"
minimist "^1.2.0"
reflect-metadata "^0.1.2"
- tsickle "^0.25.5"
+ tsickle "^0.26.0"
"@angular/compiler@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-5.1.3.tgz#125008477895aee1bf71294bf981a4ba184c1e59"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-5.2.0.tgz#3798795b97e60b47fdc0a150e062dedb4ac39467"
dependencies:
tslib "^1.7.1"
"@angular/core@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/core/-/core-5.1.3.tgz#b739f69834c344285250a384d0c203dd36778a37"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/core/-/core-5.2.0.tgz#f91bf83de3e0defd621adcc007c25d7cd5a85af1"
dependencies:
tslib "^1.7.1"
"@angular/forms@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-5.1.3.tgz#fe4c0c37c504e78c85f8e50db6e098705fa72f4c"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-5.2.0.tgz#b5fb6b9ba97334bca0e3202d7fee6b9162cbc824"
dependencies:
tslib "^1.7.1"
"@angular/http@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/http/-/http-5.1.3.tgz#eeea2a6760fa54449a967fb5abdd473736c5c989"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/http/-/http-5.2.0.tgz#ebffff97e6c7baa3609a2d68e982bf990b1c72dc"
dependencies:
tslib "^1.7.1"
"@angular/language-service@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-5.1.3.tgz#b55f295943133e33940ff71e6bb0afa93d7f4d36"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-5.2.0.tgz#c8fab0ca8cbd79dafc96fad844ae69e9038b69ad"
"@angular/platform-browser-dynamic@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.1.3.tgz#ad37e4dbd5251e7ea256ad9323fe11c848d04050"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.0.tgz#6d3e074363606b559c3319d2433d1c08ccaefbad"
dependencies:
tslib "^1.7.1"
"@angular/platform-browser@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-5.1.3.tgz#5abe7809009eff6bff3bf89faba96fe066fb2036"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-5.2.0.tgz#89cbc8abf54171ecf3dd9a40970b4982eecc9f73"
dependencies:
tslib "^1.7.1"
"@angular/router@^5.1.3":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@angular/router/-/router-5.1.3.tgz#69627d7186e4ab8e7d4058c4400f82d3899ebd7a"
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@angular/router/-/router-5.2.0.tgz#0a43f1c6add592c9cb0b9846fc157fc5b23ee73d"
dependencies:
tslib "^1.7.1"
-"@babel/code-frame@7.0.0-beta.31":
- version "7.0.0-beta.31"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35"
- dependencies:
- chalk "^2.0.0"
- esutils "^2.0.2"
- js-tokens "^3.0.0"
-
-"@babel/code-frame@^7.0.0-beta.35":
+"@babel/code-frame@7.0.0-beta.36":
version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4"
dependencies:
@@ -174,46 +165,53 @@
esutils "^2.0.2"
js-tokens "^3.0.0"
-"@babel/helper-function-name@7.0.0-beta.31":
- version "7.0.0-beta.31"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57"
+"@babel/code-frame@^7.0.0-beta.35":
+ version "7.0.0-beta.37"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.37.tgz#2da1dd3b1b57bfdea777ddc378df7cd12fe40171"
dependencies:
- "@babel/helper-get-function-arity" "7.0.0-beta.31"
- "@babel/template" "7.0.0-beta.31"
- "@babel/traverse" "7.0.0-beta.31"
- "@babel/types" "7.0.0-beta.31"
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
-"@babel/helper-get-function-arity@7.0.0-beta.31":
- version "7.0.0-beta.31"
- resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493"
+"@babel/helper-function-name@7.0.0-beta.36":
+ version "7.0.0-beta.36"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
dependencies:
- "@babel/types" "7.0.0-beta.31"
+ "@babel/helper-get-function-arity" "7.0.0-beta.36"
+ "@babel/template" "7.0.0-beta.36"
+ "@babel/types" "7.0.0-beta.36"
-"@babel/template@7.0.0-beta.31":
- version "7.0.0-beta.31"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda"
+"@babel/helper-get-function-arity@7.0.0-beta.36":
+ version "7.0.0-beta.36"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8"
dependencies:
- "@babel/code-frame" "7.0.0-beta.31"
- "@babel/types" "7.0.0-beta.31"
- babylon "7.0.0-beta.31"
+ "@babel/types" "7.0.0-beta.36"
+
+"@babel/template@7.0.0-beta.36":
+ version "7.0.0-beta.36"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00"
+ dependencies:
+ "@babel/code-frame" "7.0.0-beta.36"
+ "@babel/types" "7.0.0-beta.36"
+ babylon "7.0.0-beta.36"
lodash "^4.2.0"
-"@babel/traverse@7.0.0-beta.31":
- version "7.0.0-beta.31"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df"
+"@babel/traverse@7.0.0-beta.36":
+ version "7.0.0-beta.36"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261"
dependencies:
- "@babel/code-frame" "7.0.0-beta.31"
- "@babel/helper-function-name" "7.0.0-beta.31"
- "@babel/types" "7.0.0-beta.31"
- babylon "7.0.0-beta.31"
+ "@babel/code-frame" "7.0.0-beta.36"
+ "@babel/helper-function-name" "7.0.0-beta.36"
+ "@babel/types" "7.0.0-beta.36"
+ babylon "7.0.0-beta.36"
debug "^3.0.1"
- globals "^10.0.0"
+ globals "^11.1.0"
invariant "^2.2.0"
lodash "^4.2.0"
-"@babel/types@7.0.0-beta.31":
- version "7.0.0-beta.31"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4"
+"@babel/types@7.0.0-beta.36":
+ version "7.0.0-beta.36"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23"
dependencies:
esutils "^2.0.2"
lodash "^4.2.0"
@@ -223,9 +221,9 @@
version "1.1.0"
resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922"
-"@ngtools/webpack@1.9.3":
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.9.3.tgz#353e27e6f21ab35467d17b67e3096dfc5d9bf80c"
+"@ngtools/webpack@1.9.4":
+ version "1.9.4"
+ resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.9.4.tgz#0716e8e5a42f3e255f04e231e131d67aa2f6ab90"
dependencies:
chalk "~2.2.0"
enhanced-resolve "^3.1.0"
@@ -236,15 +234,15 @@
tree-kill "^1.0.0"
webpack-sources "^1.1.0"
-"@schematics/angular@~0.1.11":
- version "0.1.11"
- resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-0.1.11.tgz#b5f15320bbb60969d66c76a8ef6545058ac81ece"
- dependencies:
- "@angular-devkit/core" "0.0.22"
+"@polymer/polymer@^2.2.0":
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/@polymer/polymer/-/polymer-2.3.1.tgz#1300123c5060bdc75b32dd3ed986abca25482000"
-"@schematics/schematics@0.0.11":
- version "0.0.11"
- resolved "https://registry.yarnpkg.com/@schematics/schematics/-/schematics-0.0.11.tgz#c8f70f270ed38f29b2873248126fd59abd635862"
+"@schematics/angular@~0.1.12":
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-0.1.12.tgz#f53ea1647613fa852f849affb4490926b72633a8"
+ dependencies:
+ "@angular-devkit/core" "0.0.24"
"@storybook/mantra-core@^1.7.2":
version "1.7.2"
@@ -279,6 +277,10 @@
dependencies:
babel-runtime "^6.5.0"
+"@types/clone@^0.1.29":
+ version "0.1.30"
+ resolved "https://registry.yarnpkg.com/@types/clone/-/clone-0.1.30.tgz#e7365648c1b42136a59c7d5040637b3b5c83b614"
+
"@types/graphql@0.11.7":
version "0.11.7"
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.11.7.tgz#da39a2f7c74e793e32e2bb7b3b68da1691532dd5"
@@ -288,8 +290,8 @@
resolved "https://registry.yarnpkg.com/@types/inline-style-prefixer/-/inline-style-prefixer-3.0.1.tgz#8541e636b029124b747952e9a28848286d2b5bf6"
"@types/jasmine@~2.8.3":
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.3.tgz#f910edc67d69393d562d10f8f3d205ea3f3306bf"
+ version "2.8.4"
+ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.4.tgz#5528fb5e53f1b27594f81f18debb7eab8dc532cb"
"@types/lodash@^4.14.85", "@types/lodash@^4.14.92":
version "4.14.92"
@@ -301,14 +303,20 @@
dependencies:
"@types/node" "*"
-"@types/node@*", "@types/node@^8.0.28":
- version "8.5.7"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.7.tgz#9c498c35af354dcfbca3790fb2e81129e93cf0e2"
+"@types/node@*", "@types/node@^9.3.0":
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5"
-"@types/node@^6.0.46", "@types/node@~6.0.96":
+"@types/node@^6.0.0", "@types/node@^6.0.46", "@types/node@~6.0.96":
version "6.0.96"
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.96.tgz#7bf0bf40d6ce51e93762cc47d010c8cc5ebb2179"
+"@types/parse5@^2.2.32":
+ version "2.2.34"
+ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-2.2.34.tgz#e3870a10e82735a720f62d71dcd183ba78ef3a9d"
+ dependencies:
+ "@types/node" "*"
+
"@types/q@^0.0.32":
version "0.0.32"
resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5"
@@ -321,6 +329,10 @@
version "2.53.43"
resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz#2de3d718819bc20165754c4a59afb7e9833f6707"
+"@webcomponents/webcomponentsjs@^1.0.17":
+ version "1.0.22"
+ resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.0.22.tgz#a9fed9f346d81dab738b0c3e04614ee6303a24b6"
+
JSONStream@^1.0.4, JSONStream@~1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea"
@@ -436,7 +448,7 @@ agentkeepalive@^3.3.0:
dependencies:
humanize-ms "^1.2.1"
-airbnb-js-shims@^1.1.1, airbnb-js-shims@^1.4.0:
+airbnb-js-shims@^1.1.1, airbnb-js-shims@^1.3.0, airbnb-js-shims@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-1.4.0.tgz#b920b0bc9fafe8b8ae2a073f29fb10303b1b2b18"
dependencies:
@@ -468,7 +480,7 @@ ajv@^4.7.0, ajv@^4.9.1:
co "^4.6.0"
json-stable-stringify "^1.0.1"
-ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3, ajv@^5.3.0:
+ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3, ajv@^5.3.0, ajv@~5.5.1:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
dependencies:
@@ -582,6 +594,13 @@ anymatch@^1.3.0:
micromatch "^2.1.5"
normalize-path "^2.0.0"
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
apollo-fetch@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/apollo-fetch/-/apollo-fetch-0.6.0.tgz#aae9b28c117af344b091ec8ba4d1a5aa0474dc5d"
@@ -639,10 +658,18 @@ arr-diff@^2.0.0:
dependencies:
arr-flatten "^1.0.1"
-arr-flatten@^1.0.1:
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+
array-differ@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
@@ -712,6 +739,10 @@ array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+
array.prototype.flatmap@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.1.1.tgz#dbb6c44693c2a2a2fcab24e551dfbf47f67fde03"
@@ -770,6 +801,10 @@ assert@^1.1.1:
dependencies:
util "0.10.3"
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+
ast-types-flow@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
@@ -812,6 +847,10 @@ asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+atob@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d"
+
autoprefixer@7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7"
@@ -823,7 +862,7 @@ autoprefixer@7.1.6:
postcss "^6.0.13"
postcss-value-parser "^3.2.3"
-autoprefixer@^6.3.1, autoprefixer@^6.5.3:
+autoprefixer@^6.3.1:
version "6.7.7"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
dependencies:
@@ -834,15 +873,15 @@ autoprefixer@^6.3.1, autoprefixer@^6.5.3:
postcss "^5.2.16"
postcss-value-parser "^3.2.3"
-autoprefixer@^7.2.4:
- version "7.2.4"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.4.tgz#29b367c03876a29bfd3721260d945e3545666c8d"
+autoprefixer@^7.1.6, autoprefixer@^7.2.3, autoprefixer@^7.2.5:
+ version "7.2.5"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.5.tgz#04ccbd0c6a61131b6d13f53d371926092952d192"
dependencies:
- browserslist "^2.10.2"
- caniuse-lite "^1.0.30000784"
+ browserslist "^2.11.1"
+ caniuse-lite "^1.0.30000791"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
- postcss "^6.0.15"
+ postcss "^6.0.16"
postcss-value-parser "^3.2.3"
aws-sign2@~0.6.0:
@@ -929,18 +968,18 @@ babel-eslint@7.2.3:
babel-types "^6.23.0"
babylon "^6.17.0"
-babel-eslint@^8.1.2:
- version "8.1.2"
- resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.1.2.tgz#a39230b0c20ecbaa19a35d5633bf9b9ca2c8116f"
+babel-eslint@^8.2.1:
+ version "8.2.1"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951"
dependencies:
- "@babel/code-frame" "7.0.0-beta.31"
- "@babel/traverse" "7.0.0-beta.31"
- "@babel/types" "7.0.0-beta.31"
- babylon "7.0.0-beta.31"
+ "@babel/code-frame" "7.0.0-beta.36"
+ "@babel/traverse" "7.0.0-beta.36"
+ "@babel/types" "7.0.0-beta.36"
+ babylon "7.0.0-beta.36"
eslint-scope "~3.7.1"
eslint-visitor-keys "^1.0.0"
-babel-generator@^6.18.0, babel-generator@^6.24.1, babel-generator@^6.26.0:
+babel-generator@^6.18.0, babel-generator@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
dependencies:
@@ -1126,12 +1165,12 @@ babel-jest@^21.2.0:
babel-plugin-istanbul "^4.0.0"
babel-preset-jest "^21.2.0"
-babel-jest@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.4.tgz#533c46de37d7c9d7612f408c76314be9277e0c26"
+babel-jest@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.6.tgz#807a2a5f5fad7789c57174a955cd14b11045299f"
dependencies:
babel-plugin-istanbul "^4.1.5"
- babel-preset-jest "^22.0.3"
+ babel-preset-jest "^22.0.6"
babel-loader@7.1.2, babel-loader@^7.0.0, babel-loader@^7.1.2:
version "7.1.2"
@@ -1183,9 +1222,9 @@ babel-plugin-jest-hoist@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006"
-babel-plugin-jest-hoist@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.3.tgz#62cde5fe962fd41ae89c119f481ca5cd7dd48bb4"
+babel-plugin-jest-hoist@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.6.tgz#551269ded350a15d6585da35d16d449df30d66c4"
babel-plugin-jsx-event-modifiers@^2.0.2:
version "2.0.5"
@@ -1882,11 +1921,11 @@ babel-preset-jest@^21.2.0:
babel-plugin-jest-hoist "^21.2.0"
babel-plugin-syntax-object-rest-spread "^6.13.0"
-babel-preset-jest@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.3.tgz#e2bb6f6b4a509d3ea0931f013db78c5a84856693"
+babel-preset-jest@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.6.tgz#d13202533db9495c98663044d9f51b273d3984c8"
dependencies:
- babel-plugin-jest-hoist "^22.0.3"
+ babel-plugin-jest-hoist "^22.0.6"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-preset-minify@^0.2.0:
@@ -2046,7 +2085,7 @@ babel-runtime@6.26.0, babel-runtime@6.x.x, babel-runtime@^6.0.0, babel-runtime@^
core-js "^2.4.0"
regenerator-runtime "^0.11.0"
-babel-standalone@^6.24.0:
+babel-standalone@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-standalone/-/babel-standalone-6.26.0.tgz#15fb3d35f2c456695815ebf1ed96fe7f015b6886"
@@ -2083,9 +2122,13 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24
lodash "^4.17.4"
to-fast-properties "^1.0.3"
-babylon@7.0.0-beta.31:
- version "7.0.0-beta.31"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f"
+babel@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4"
+
+babylon@7.0.0-beta.36:
+ version "7.0.0-beta.36"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e"
babylon@^6.17.0, babylon@^6.17.3, babylon@^6.18.0:
version "6.18.0"
@@ -2139,6 +2182,18 @@ base64url@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb"
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
basic-auth-connect@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122"
@@ -2183,10 +2238,6 @@ binary-extensions@^1.0.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
-bindings@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"
-
bl@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
@@ -2343,6 +2394,22 @@ braces@^1.8.2:
preserve "^0.2.0"
repeat-element "^1.1.2"
+braces@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.0.tgz#a46941cb5fb492156b3d6a656e06c35364e3e66e"
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
brcast@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd"
@@ -2420,11 +2487,11 @@ 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.1.2, browserslist@^2.10.2, browserslist@^2.5.1:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.0.tgz#50350d6873a82ebe0f3ae5483658c571ae5f9d7d"
+browserslist@^2.1.2, browserslist@^2.11.1, browserslist@^2.5.1:
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.1.tgz#02fda29d9a2164b879100126e7b0d0b57e43a7bb"
dependencies:
- caniuse-lite "^1.0.30000784"
+ caniuse-lite "^1.0.30000789"
electron-to-chromium "^1.3.30"
bser@1.0.2:
@@ -2484,8 +2551,8 @@ bytes@3.0.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
cacache@^10.0.0, cacache@^10.0.1:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.1.tgz#3e05f6e616117d9b54665b1b20c8aeb93ea5d36f"
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.2.tgz#105a93a162bbedf3a25da42e1939ed99ffb145f8"
dependencies:
bluebird "^3.5.0"
chownr "^1.0.1"
@@ -2537,6 +2604,20 @@ cacache@~9.2.9:
unique-filename "^1.1.0"
y18n "^3.2.1"
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
call-limit@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.0.tgz#6fd61b03f3da42a2cd0ec2b60f02bd0e71991fea"
@@ -2599,12 +2680,12 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
- version "1.0.30000787"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000787.tgz#ca07a281be536a88bd7fac96ba895f3cf53f811b"
+ version "1.0.30000791"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000791.tgz#06787f56caef4300a17e35d137447123bdf536f9"
-caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000784:
- version "1.0.30000787"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000787.tgz#a76c4fa1d6ac00640447ec83c1e7c6b33dd615c5"
+caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000789, caniuse-lite@^1.0.30000791:
+ version "1.0.30000791"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000791.tgz#8e35745efd483a3e23bb7d350990326d2319fc16"
capture-stack-trace@^1.0.0:
version "1.0.0"
@@ -2740,6 +2821,23 @@ chokidar@^1.4.1, chokidar@^1.4.2, chokidar@^1.5.1, chokidar@^1.6.0, chokidar@^1.
optionalDependencies:
fsevents "^1.0.0"
+chokidar@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.0.tgz#6686313c541d3274b2a5c01233342037948c911b"
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.0"
+ braces "^2.3.0"
+ glob-parent "^3.1.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^2.1.1"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
chownr@^1.0.1, chownr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
@@ -2773,6 +2871,15 @@ clap@^1.0.9:
dependencies:
chalk "^1.1.3"
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.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"
@@ -2841,6 +2948,14 @@ cliui@^3.0.3, cliui@^3.2.0:
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
+cliui@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc"
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
clone-deep@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8"
@@ -2858,7 +2973,7 @@ clone@^1.0.0, clone@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
-clone@^2.1.1:
+clone@^2.1.0, clone@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
@@ -2921,6 +3036,13 @@ collapse-white-space@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c"
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
color-convert@^1.3.0, color-convert@^1.9.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
@@ -2992,13 +3114,17 @@ commander@2.11.0:
version "2.11.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
-commander@2.12.x, commander@^2.11.0, commander@^2.12.2, commander@^2.9.0, commander@~2.12.1:
+commander@2.12.x, commander@~2.12.1:
version "2.12.2"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
-common-tags@^1.3.1, common-tags@^1.4.0, common-tags@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.6.0.tgz#788e4bcc582f16993e5b2c92f76b1ccb80731537"
+commander@^2.11.0, commander@^2.12.1, commander@^2.12.2, commander@^2.13.0, commander@^2.9.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+
+common-tags@^1.3.1, common-tags@^1.4.0, common-tags@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.7.2.tgz#24d9768c63d253a56ecff93845b44b4df1d52771"
dependencies:
babel-runtime "^6.26.0"
@@ -3021,7 +3147,7 @@ component-emitter@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
-component-emitter@1.2.1:
+component-emitter@1.2.1, component-emitter@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
@@ -3341,7 +3467,7 @@ conventional-recommended-bump@^1.0.1:
meow "^3.3.0"
object-assign "^4.0.1"
-convert-source-map@^1.3.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0:
+convert-source-map@^1.4.0, convert-source-map@^1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
@@ -3375,6 +3501,10 @@ copy-concurrently@^1.0.0:
rimraf "^2.5.4"
run-queue "^1.0.0"
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+
copy-paste@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/copy-paste/-/copy-paste-1.3.0.tgz#a7e6c4a1c28fdedf2b081e72b97df2ef95f471ed"
@@ -3383,7 +3513,7 @@ copy-paste@^1.3.0:
optionalDependencies:
sync-exec "~0.6.x"
-copy-webpack-plugin@^4.1.1:
+copy-webpack-plugin@^4.1.1, copy-webpack-plugin@^4.2.0:
version "4.3.1"
resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.3.1.tgz#19ba6370bf6f8e263cbd66185a2b79f2321a9302"
dependencies:
@@ -3402,7 +3532,7 @@ core-js@^1.0.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
-core-js@^2.2.0, core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.3:
+core-js@^2.2.0, core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.1, core-js@^2.5.3:
version "2.5.3"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
@@ -3591,7 +3721,7 @@ css-loader@0.28.7:
postcss-value-parser "^3.3.0"
source-list-map "^2.0.0"
-css-loader@^0.28.1, css-loader@^0.28.8:
+css-loader@^0.28.1, css-loader@^0.28.7, css-loader@^0.28.8:
version "0.28.8"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.8.tgz#ff36381464dea18fe60f2601a060ba6445886bd5"
dependencies:
@@ -3809,7 +3939,7 @@ debug@*, debug@^3.0.0, debug@^3.0.1, debug@^3.1.0:
dependencies:
ms "2.0.0"
-debug@2, debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
+debug@2, debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
@@ -3841,6 +3971,10 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+
dedent@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
@@ -3882,6 +4016,18 @@ define-properties@^1.1.2:
foreach "^2.0.5"
object-keys "^1.0.8"
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ dependencies:
+ is-descriptor "^1.0.0"
+
defined@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
@@ -3921,7 +4067,7 @@ denodeify@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631"
-depd@1.1.1, depd@~1.1.0, depd@~1.1.1:
+depd@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
@@ -3929,6 +4075,10 @@ depd@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa"
+depd@~1.1.0, depd@~1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+
des.js@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
@@ -4008,8 +4158,8 @@ dns-equal@^1.0.0:
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
dns-packet@^1.0.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.2.tgz#a8a26bec7646438963fc86e06f8f8b16d6c8bf7a"
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
dependencies:
ip "^1.1.0"
safe-buffer "^5.0.1"
@@ -4028,8 +4178,8 @@ doctrine@1.5.0:
isarray "^1.0.0"
doctrine@^2.0.0, doctrine@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075"
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
dependencies:
esutils "^2.0.2"
@@ -4069,6 +4219,16 @@ dom-walk@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+dom5@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/dom5/-/dom5-2.3.0.tgz#f8204975bd0dacbbe5b58a8a93ffc1fed0ffcd2a"
+ dependencies:
+ "@types/clone" "^0.1.29"
+ "@types/node" "^6.0.0"
+ "@types/parse5" "^2.2.32"
+ clone "^2.1.0"
+ parse5 "^2.2.2"
+
domain-browser@^1.1.1:
version "1.1.7"
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
@@ -4165,9 +4325,9 @@ duplexer@^0.1.1, duplexer@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
-duplexify@^3.1.2, duplexify@^3.4.2:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd"
+duplexify@^3.4.2, duplexify@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.3.tgz#8b5818800df92fd0125b27ab896491912858243e"
dependencies:
end-of-stream "^1.0.0"
inherits "^2.0.1"
@@ -4247,8 +4407,8 @@ encoding@^0.1.11:
iconv-lite "~0.4.13"
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
dependencies:
once "^1.4.0"
@@ -4601,9 +4761,9 @@ eslint-plugin-import@2.8.0, eslint-plugin-import@^2.8.0:
minimatch "^3.0.3"
read-pkg-up "^2.0.0"
-eslint-plugin-jest@^21.5.0:
- version "21.5.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.5.0.tgz#c7a3bd2ee9d1c832b4e31dec89f6ad93e08d4853"
+eslint-plugin-jest@^21.6.2:
+ version "21.6.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.6.2.tgz#aaa7b37c621e49aa0b13f4dc5f7038f73c64b438"
eslint-plugin-json@^1.2.0:
version "1.2.0"
@@ -4635,7 +4795,7 @@ eslint-plugin-jsx-a11y@^6.0.3:
emoji-regex "^6.1.0"
jsx-ast-utils "^2.0.0"
-eslint-plugin-prettier@^2.4.0:
+eslint-plugin-prettier@^2.2.0, eslint-plugin-prettier@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.4.0.tgz#85cab0775c6d5e3344ef01e78d960f166fb93aae"
dependencies:
@@ -4757,9 +4917,9 @@ eslint@^3.16.1:
text-table "~0.2.0"
user-home "^2.0.0"
-eslint@^4.14.0:
- version "4.14.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.14.0.tgz#96609768d1dd23304faba2d94b7fefe5a5447a82"
+eslint@^4.15.0:
+ version "4.15.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.15.0.tgz#89ab38c12713eec3d13afac14e4a89e75ef08145"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
@@ -4799,7 +4959,7 @@ eslint@^4.14.0:
table "^4.0.1"
text-table "~0.2.0"
-espree@^3.4.0, espree@^3.5.1, espree@^3.5.2:
+espree@^3.4.0, espree@^3.4.3, espree@^3.5.1, espree@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
dependencies:
@@ -4955,6 +5115,18 @@ expand-brackets@^0.1.4:
dependencies:
is-posix-bracket "^0.1.0"
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
expand-range@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
@@ -4985,16 +5157,16 @@ expect@^21.2.1:
jest-message-util "^21.2.1"
jest-regex-util "^21.2.0"
-expect@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/expect/-/expect-22.0.3.tgz#bb486de7d41bf3eb60d3b16dfd1c158a4d91ddfa"
+expect@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-22.0.6.tgz#69e1761ecb5ba354513e546e6187beda79e18078"
dependencies:
ansi-styles "^3.2.0"
- jest-diff "^22.0.3"
- jest-get-type "^22.0.3"
- jest-matcher-utils "^22.0.3"
- jest-message-util "^22.0.3"
- jest-regex-util "^22.0.3"
+ jest-diff "^22.0.6"
+ jest-get-type "^22.0.6"
+ jest-matcher-utils "^22.0.6"
+ jest-message-util "^22.0.6"
+ jest-regex-util "^22.0.6"
exports-loader@^0.6.3:
version "0.6.4"
@@ -5058,6 +5230,13 @@ extend-shallow@^2.0.1:
dependencies:
is-extendable "^0.1.0"
+extend-shallow@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
@@ -5076,6 +5255,19 @@ extglob@^0.3.1:
dependencies:
is-extglob "^1.0.0"
+extglob@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.3.tgz#55e019d0c95bf873949c737b7e5172dba84ebb29"
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
extract-text-webpack-plugin@3.0.2, extract-text-webpack-plugin@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"
@@ -5222,7 +5414,7 @@ file-loader@1.1.5:
loader-utils "^1.0.2"
schema-utils "^0.3.0"
-file-loader@^0.11.1:
+file-loader@^0.11.1, file-loader@^0.11.2:
version "0.11.2"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34"
dependencies:
@@ -5260,6 +5452,15 @@ fill-range@^2.1.0:
repeat-element "^1.1.2"
repeat-string "^1.5.2"
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
filled-array@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
@@ -5344,8 +5545,8 @@ flatten@^1.0.2:
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
flow-parser@^0.*:
- version "0.62.0"
- resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.62.0.tgz#e58d3002281570401cb50ee5cf392a522502001f"
+ version "0.63.1"
+ resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.63.1.tgz#84fd647b58a370c2fc0462800e22ed77c3cdf249"
flush-write-stream@^1.0.0:
version "1.0.2"
@@ -5369,7 +5570,7 @@ for-in@^0.1.3:
version "0.1.8"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
-for-in@^1.0.1:
+for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -5421,6 +5622,12 @@ forwarded@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ dependencies:
+ map-cache "^0.2.2"
+
fresh@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f"
@@ -5651,6 +5858,10 @@ get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -5724,12 +5935,13 @@ github@^11.0.0:
netrc "^0.1.4"
github@^13.0.1:
- version "13.0.1"
- resolved "https://registry.yarnpkg.com/github/-/github-13.0.1.tgz#4ccf4a41df662f92367e77a474674eabb1b6c78d"
+ version "13.1.0"
+ resolved "https://registry.yarnpkg.com/github/-/github-13.1.0.tgz#fc925950beebdff0cb0583197598b86f41bedaa4"
dependencies:
debug "^3.1.0"
dotenv "^4.0.0"
https-proxy-agent "^2.1.0"
+ is-stream "^1.1.0"
lodash "^4.17.4"
proxy-from-env "^1.0.0"
url-template "^2.0.8"
@@ -5839,11 +6051,7 @@ global@^4.3.0, global@^4.3.2:
min-document "^2.19.0"
process "~0.5.1"
-globals@^10.0.0:
- version "10.4.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7"
-
-globals@^11.0.1:
+globals@^11.0.1, globals@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4"
@@ -6154,6 +6362,33 @@ has-unicode@^2.0.0, has-unicode@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
has@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
@@ -6270,7 +6505,7 @@ html-entities@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
-html-loader@^0.5.4:
+html-loader@^0.5.1, html-loader@^0.5.4:
version "0.5.4"
resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.4.tgz#70f36e30a923cc52536fdc812cec6f556aeb47a4"
dependencies:
@@ -6526,6 +6761,13 @@ import-local@^0.1.1:
pkg-dir "^2.0.0"
resolve-cwd "^2.0.0"
+import-local@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
+ dependencies:
+ pkg-dir "^2.0.0"
+ resolve-cwd "^2.0.0"
+
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -6712,6 +6954,18 @@ is-absolute-url@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ dependencies:
+ kind-of "^6.0.0"
+
is-alphabetical@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08"
@@ -6761,6 +7015,18 @@ is-ci@^1.0.10:
dependencies:
ci-info "^1.0.0"
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ dependencies:
+ kind-of "^6.0.0"
+
is-date-object@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
@@ -6769,6 +7035,22 @@ is-decimal@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82"
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
is-directory@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
@@ -6795,6 +7077,12 @@ is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ dependencies:
+ is-plain-object "^2.0.4"
+
is-extglob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
@@ -6823,6 +7111,10 @@ is-function@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
+is-generator-fn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
+
is-glob@^2.0.0, is-glob@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
@@ -6903,6 +7195,12 @@ is-observable@^0.2.0:
dependencies:
symbol-observable "^0.2.2"
+is-odd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-1.0.0.tgz#3b8a932eb028b3775c39bb09e91767accdb69088"
+ dependencies:
+ is-number "^3.0.0"
+
is-path-cwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
@@ -6923,7 +7221,7 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-is-plain-object@^2.0.1, is-plain-object@^2.0.4:
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
dependencies:
@@ -7045,7 +7343,7 @@ isobject@^2.0.0:
dependencies:
isarray "1.0.0"
-isobject@^3.0.1:
+isobject@^3.0.0, isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
@@ -7076,14 +7374,14 @@ istanbul-api@^1.1.1, istanbul-api@^1.1.14:
mkdirp "^0.5.1"
once "^1.4.0"
-istanbul-instrumenter-loader@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz#e5492900ab0bba835efa8024cb00be9b3eea2700"
+istanbul-instrumenter-loader@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.0.tgz#9f553923b22360bac95e617aaba01add1f7db0b2"
dependencies:
- convert-source-map "^1.3.0"
- istanbul-lib-instrument "^1.1.3"
- loader-utils "^0.2.16"
- object-assign "^4.1.0"
+ convert-source-map "^1.5.0"
+ istanbul-lib-instrument "^1.7.3"
+ loader-utils "^1.1.0"
+ schema-utils "^0.3.0"
istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1:
version "1.1.1"
@@ -7095,7 +7393,7 @@ istanbul-lib-hook@^1.1.0:
dependencies:
append-transform "^0.4.0"
-istanbul-lib-instrument@^1.1.3, istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1:
+istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.3, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
dependencies:
@@ -7168,9 +7466,9 @@ jest-changed-files@^21.2.0:
dependencies:
throat "^4.0.0"
-jest-changed-files@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.3.tgz#3771315acfa24a0ed7e6c545de620db6f1b2d164"
+jest-changed-files@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.6.tgz#fca38cf4c89920c66aad1707e91d25bbea238875"
dependencies:
throat "^4.0.0"
@@ -7243,9 +7541,9 @@ jest-cli@^21.2.1:
worker-farm "^1.3.1"
yargs "^9.0.0"
-jest-cli@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.4.tgz#0052abaad45c57861c05da8ab5d27bad13ad224d"
+jest-cli@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.6.tgz#a2f1e5e094c42b29d22815463ae57f4d07e292ac"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
@@ -7256,19 +7554,19 @@ jest-cli@^22.0.4:
istanbul-lib-coverage "^1.1.1"
istanbul-lib-instrument "^1.8.0"
istanbul-lib-source-maps "^1.2.1"
- jest-changed-files "^22.0.3"
- jest-config "^22.0.4"
- jest-environment-jsdom "^22.0.4"
- jest-get-type "^22.0.3"
- jest-haste-map "^22.0.3"
- jest-message-util "^22.0.3"
- jest-regex-util "^22.0.3"
- jest-resolve-dependencies "^22.0.3"
- jest-runner "^22.0.4"
- jest-runtime "^22.0.4"
- jest-snapshot "^22.0.3"
- jest-util "^22.0.4"
- jest-worker "^22.0.3"
+ jest-changed-files "^22.0.6"
+ jest-config "^22.0.6"
+ jest-environment-jsdom "^22.0.6"
+ jest-get-type "^22.0.6"
+ jest-haste-map "^22.0.6"
+ jest-message-util "^22.0.6"
+ jest-regex-util "^22.0.6"
+ jest-resolve-dependencies "^22.0.6"
+ jest-runner "^22.0.6"
+ jest-runtime "^22.0.6"
+ jest-snapshot "^22.0.6"
+ jest-util "^22.0.6"
+ jest-worker "^22.0.6"
micromatch "^2.3.11"
node-notifier "^5.1.2"
realpath-native "^1.0.0"
@@ -7310,21 +7608,21 @@ jest-config@^21.2.1:
jest-validate "^21.2.1"
pretty-format "^21.2.1"
-jest-config@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.4.tgz#9c2a46c0907b1a1af54d9cdbf18e99b447034e11"
+jest-config@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.6.tgz#8af116784df189b98ed6fd6c307bce4181f7f012"
dependencies:
chalk "^2.0.1"
glob "^7.1.1"
- jest-environment-jsdom "^22.0.4"
- jest-environment-node "^22.0.4"
- jest-get-type "^22.0.3"
- jest-jasmine2 "^22.0.4"
- jest-regex-util "^22.0.3"
- jest-resolve "^22.0.4"
- jest-util "^22.0.4"
- jest-validate "^22.0.3"
- pretty-format "^22.0.3"
+ jest-environment-jsdom "^22.0.6"
+ jest-environment-node "^22.0.6"
+ jest-get-type "^22.0.6"
+ jest-jasmine2 "^22.0.6"
+ jest-regex-util "^22.0.6"
+ jest-resolve "^22.0.6"
+ jest-util "^22.0.6"
+ jest-validate "^22.0.6"
+ pretty-format "^22.0.6"
jest-diff@^20.0.3:
version "20.0.3"
@@ -7344,26 +7642,32 @@ jest-diff@^21.2.1:
jest-get-type "^21.2.0"
pretty-format "^21.2.1"
-jest-diff@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.3.tgz#ffed5aba6beaf63bb77819ba44dd520168986321"
+jest-diff@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.6.tgz#38c07187324564ecf6389a980a2f0e86e7e79890"
dependencies:
chalk "^2.0.1"
diff "^3.2.0"
- jest-get-type "^22.0.3"
- pretty-format "^22.0.3"
+ jest-get-type "^22.0.6"
+ pretty-format "^22.0.6"
+
+jest-docblock@22.0.3:
+ version "22.0.3"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.3.tgz#c33aa22682b9fc68a5373f5f82994428a2ded601"
+ dependencies:
+ detect-newline "^2.1.0"
jest-docblock@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712"
-jest-docblock@^21, jest-docblock@^21.0.0, jest-docblock@^21.2.0:
+jest-docblock@^21.0.0, jest-docblock@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
-jest-docblock@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.3.tgz#c33aa22682b9fc68a5373f5f82994428a2ded601"
+jest-docblock@^22.0.3, jest-docblock@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.6.tgz#f187fb2c67eec0999e569d563092125283084f9e"
dependencies:
detect-newline "^2.1.0"
@@ -7383,12 +7687,12 @@ jest-environment-jsdom@^21.2.1:
jest-util "^21.2.1"
jsdom "^9.12.0"
-jest-environment-jsdom@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.4.tgz#5723d4e724775ed38948de792e62f2d6a7f452df"
+jest-environment-jsdom@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.6.tgz#243f3fa7167a1f293410aec8d3eb12ab8de4f748"
dependencies:
- jest-mock "^22.0.3"
- jest-util "^22.0.4"
+ jest-mock "^22.0.6"
+ jest-util "^22.0.6"
jsdom "^11.5.1"
jest-environment-node@^20.0.3:
@@ -7405,12 +7709,12 @@ jest-environment-node@^21.2.1:
jest-mock "^21.2.0"
jest-util "^21.2.1"
-jest-environment-node@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.4.tgz#068671f85a545f96a5469be3a3dd228fca79c709"
+jest-environment-node@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.6.tgz#4f34ac4c0591297aceefa6a93421360bd56e5a74"
dependencies:
- jest-mock "^22.0.3"
- jest-util "^22.0.4"
+ jest-mock "^22.0.6"
+ jest-util "^22.0.6"
jest-enzyme@^4.0.2:
version "4.0.2"
@@ -7423,9 +7727,20 @@ jest-get-type@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23"
-jest-get-type@^22.0.3:
+jest-get-type@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.6.tgz#301fbc0760779fdbad37b6e3239a3c1811aa75cb"
+
+jest-haste-map@22.0.3:
version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.3.tgz#fa894b677c0fcd55eff3fd8ee28c7be942e32d36"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.3.tgz#c9ecb5c871c5465d4bde4139e527fa0dc784aa2d"
+ dependencies:
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.11"
+ jest-docblock "^22.0.3"
+ jest-worker "^22.0.3"
+ micromatch "^2.3.11"
+ sane "^2.0.0"
jest-haste-map@^20.0.4:
version "20.0.5"
@@ -7438,7 +7753,7 @@ jest-haste-map@^20.0.4:
sane "~1.6.0"
worker-farm "^1.3.1"
-jest-haste-map@^21, jest-haste-map@^21.2.0:
+jest-haste-map@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8"
dependencies:
@@ -7449,22 +7764,23 @@ jest-haste-map@^21, jest-haste-map@^21.2.0:
sane "^2.0.0"
worker-farm "^1.3.1"
-jest-haste-map@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.3.tgz#c9ecb5c871c5465d4bde4139e527fa0dc784aa2d"
+jest-haste-map@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.6.tgz#198d665f65e1c484fef106a3c970c5b47903647e"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
- jest-docblock "^22.0.3"
- jest-worker "^22.0.3"
+ jest-docblock "^22.0.6"
+ jest-worker "^22.0.6"
micromatch "^2.3.11"
sane "^2.0.0"
-jest-image-snapshot@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-2.2.1.tgz#06e05cad6a01ded0d8d43d4b92d2758de2fce52a"
+jest-image-snapshot@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-2.3.0.tgz#bf9535dee5b9bcd862fa9312750a90c10bfba052"
dependencies:
chalk "^1.1.3"
+ get-stdin "^5.0.1"
lodash "^4.17.4"
mkdirp "^0.5.1"
pixelmatch "^4.0.2"
@@ -7497,27 +7813,27 @@ jest-jasmine2@^21.2.1:
jest-snapshot "^21.2.1"
p-cancelable "^0.3.0"
-jest-jasmine2@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.4.tgz#f7c0965116efe831ec674dc954b0134639b3dcee"
+jest-jasmine2@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.6.tgz#db9eae709978a8d67a52f7b90d74cab7301107f5"
dependencies:
callsites "^2.0.0"
chalk "^2.0.1"
- expect "^22.0.3"
+ co "^4.6.0"
+ expect "^22.0.6"
graceful-fs "^4.1.11"
- jest-diff "^22.0.3"
- jest-matcher-utils "^22.0.3"
- jest-message-util "^22.0.3"
- jest-snapshot "^22.0.3"
+ is-generator-fn "^1.0.0"
+ jest-diff "^22.0.6"
+ jest-matcher-utils "^22.0.6"
+ jest-message-util "^22.0.6"
+ jest-snapshot "^22.0.6"
source-map-support "^0.5.0"
-jest-leak-detector@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.0.3.tgz#b64904f0e8954a11edb79b0809ff4717fa762d99"
+jest-leak-detector@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.0.6.tgz#e983e6fca0959f095cd5b39df2a9a8c956f45988"
dependencies:
- pretty-format "^22.0.3"
- optionalDependencies:
- weak "^1.0.1"
+ pretty-format "^22.0.6"
jest-matcher-utils@^20.0.3:
version "20.0.3"
@@ -7534,13 +7850,13 @@ jest-matcher-utils@^21.2.1:
jest-get-type "^21.2.0"
pretty-format "^21.2.1"
-jest-matcher-utils@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.3.tgz#2ec15ca1af7dcabf4daddc894ccce224b948674e"
+jest-matcher-utils@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.6.tgz#55675242b2af1de913f44e00aa4d68a38d349b07"
dependencies:
chalk "^2.0.1"
- jest-get-type "^22.0.3"
- pretty-format "^22.0.3"
+ jest-get-type "^22.0.6"
+ pretty-format "^22.0.6"
jest-matchers@^20.0.3:
version "20.0.3"
@@ -7567,9 +7883,9 @@ jest-message-util@^21.2.1:
micromatch "^2.3.11"
slash "^1.0.0"
-jest-message-util@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.3.tgz#bf674b2762ef2dd53facf2136423fcca264976df"
+jest-message-util@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.6.tgz#2b30edce5131a9358f529ad66ff84835ba4ed457"
dependencies:
"@babel/code-frame" "^7.0.0-beta.35"
chalk "^2.0.1"
@@ -7585,9 +7901,9 @@ jest-mock@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f"
-jest-mock@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.3.tgz#c875e47b5b729c6c020a2fab317b275c0cf88961"
+jest-mock@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.6.tgz#0d1f51ec2bf1e72cd58e79cb76f587e6397306ec"
jest-regex-util@^20.0.3:
version "20.0.3"
@@ -7597,9 +7913,9 @@ jest-regex-util@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530"
-jest-regex-util@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.0.3.tgz#c5c10229de5ce2b27bf4347916d95b802ae9aa4d"
+jest-regex-util@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.0.6.tgz#cd01d33c5993340f5d61be09b270773787a41d88"
jest-resolve-dependencies@^20.0.3:
version "20.0.3"
@@ -7613,11 +7929,11 @@ jest-resolve-dependencies@^21.2.0:
dependencies:
jest-regex-util "^21.2.0"
-jest-resolve-dependencies@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.0.3.tgz#202ddf370069702cd1865a1952fcc7e52c92720e"
+jest-resolve-dependencies@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.0.6.tgz#dd976f0a9c2874d32edf4876b0a965cef48d479b"
dependencies:
- jest-regex-util "^22.0.3"
+ jest-regex-util "^22.0.6"
jest-resolve@^20.0.4:
version "20.0.4"
@@ -7635,9 +7951,9 @@ jest-resolve@^21.2.0:
chalk "^2.0.1"
is-builtin-module "^1.0.0"
-jest-resolve@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.4.tgz#a6e47f55e9388c7341b5e9732aedc6fe30906121"
+jest-resolve@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.6.tgz#29d7aa425adb9aae7aa5ae157483dffba724e52b"
dependencies:
browser-resolve "^1.11.2"
chalk "^2.0.1"
@@ -7657,19 +7973,19 @@ jest-runner@^21.2.1:
throat "^4.0.0"
worker-farm "^1.3.1"
-jest-runner@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.4.tgz#3aa43a31b05ce8271539df580c2eb916023d3367"
+jest-runner@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.6.tgz#1986ee82b7968d21f04c402e5b67e3da71496f19"
dependencies:
- jest-config "^22.0.4"
- jest-docblock "^22.0.3"
- jest-haste-map "^22.0.3"
- jest-jasmine2 "^22.0.4"
- jest-leak-detector "^22.0.3"
- jest-message-util "^22.0.3"
- jest-runtime "^22.0.4"
- jest-util "^22.0.4"
- jest-worker "^22.0.3"
+ jest-config "^22.0.6"
+ jest-docblock "^22.0.6"
+ jest-haste-map "^22.0.6"
+ jest-jasmine2 "^22.0.6"
+ jest-leak-detector "^22.0.6"
+ jest-message-util "^22.0.6"
+ jest-runtime "^22.0.6"
+ jest-util "^22.0.6"
+ jest-worker "^22.0.6"
throat "^4.0.0"
jest-runtime@^20.0.4:
@@ -7714,21 +8030,21 @@ jest-runtime@^21.2.1:
write-file-atomic "^2.1.0"
yargs "^9.0.0"
-jest-runtime@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.4.tgz#8f69aa7b5fbb3acd35dc262cbf654e563f69b7b4"
+jest-runtime@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.6.tgz#827c35e706adfc22e685de733ba3ab78cda72bfc"
dependencies:
babel-core "^6.0.0"
- babel-jest "^22.0.4"
+ babel-jest "^22.0.6"
babel-plugin-istanbul "^4.1.5"
chalk "^2.0.1"
convert-source-map "^1.4.0"
graceful-fs "^4.1.11"
- jest-config "^22.0.4"
- jest-haste-map "^22.0.3"
- jest-regex-util "^22.0.3"
- jest-resolve "^22.0.4"
- jest-util "^22.0.4"
+ jest-config "^22.0.6"
+ jest-haste-map "^22.0.6"
+ jest-regex-util "^22.0.6"
+ jest-resolve "^22.0.6"
+ jest-util "^22.0.6"
json-stable-stringify "^1.0.1"
micromatch "^2.3.11"
realpath-native "^1.0.0"
@@ -7737,16 +8053,16 @@ jest-runtime@^22.0.4:
write-file-atomic "^2.1.0"
yargs "^10.0.3"
-jest-snapshot@>=20.0.3, jest-snapshot@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.3.tgz#a949b393781d2fdb4773f6ea765dd67ad1da291e"
+jest-snapshot@>=20.0.3, jest-snapshot@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.6.tgz#30c1f85b6f050891c4a2060d807a3d65a594591c"
dependencies:
chalk "^2.0.1"
- jest-diff "^22.0.3"
- jest-matcher-utils "^22.0.3"
+ jest-diff "^22.0.6"
+ jest-matcher-utils "^22.0.6"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
- pretty-format "^22.0.3"
+ pretty-format "^22.0.6"
jest-snapshot@^20.0.3:
version "20.0.3"
@@ -7800,16 +8116,16 @@ jest-util@^21.2.1:
jest-validate "^21.2.1"
mkdirp "^0.5.1"
-jest-util@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.4.tgz#d920a513e0645aaab030cee38e4fe7d5bed8bb6d"
+jest-util@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.6.tgz#539b3f21f4e2e458bb38719aa0e417109fe31657"
dependencies:
callsites "^2.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.11"
is-ci "^1.0.10"
- jest-message-util "^22.0.3"
- jest-validate "^22.0.3"
+ jest-message-util "^22.0.6"
+ jest-validate "^22.0.6"
mkdirp "^0.5.1"
jest-validate@^20.0.3:
@@ -7830,21 +8146,27 @@ jest-validate@^21.1.0, jest-validate@^21.2.1:
leven "^2.1.0"
pretty-format "^21.2.1"
-jest-validate@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.3.tgz#2850d949a36c48b1a40f7eebae1d8539126f7829"
+jest-validate@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.6.tgz#48c6972f154fa4abe20d0686a9b819d142740167"
dependencies:
chalk "^2.0.1"
- jest-get-type "^22.0.3"
+ jest-get-type "^22.0.6"
leven "^2.1.0"
- pretty-format "^22.0.3"
+ pretty-format "^22.0.6"
-jest-worker@^22.0.3:
+jest-worker@22.0.3:
version "22.0.3"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.0.3.tgz#30433faca67814a8f80559f75ab2ceaa61332fd2"
dependencies:
merge-stream "^1.0.1"
+jest-worker@^22.0.3, jest-worker@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.0.6.tgz#1998ac7ab24a6eee4deddec76efe7742f2651504"
+ dependencies:
+ merge-stream "^1.0.1"
+
jest@20.0.4, jest@^20.0.4:
version "20.0.4"
resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac"
@@ -7857,11 +8179,11 @@ jest@^21.2.1:
dependencies:
jest-cli "^21.2.1"
-jest@^22.0.4:
- version "22.0.4"
- resolved "https://registry.yarnpkg.com/jest/-/jest-22.0.4.tgz#d3cf560ece6b825b115dce80b9826ceb40f87961"
+jest@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-22.0.6.tgz#0d0d3bdc402c43cf5a3eae58a55cff6da8b6820f"
dependencies:
- jest-cli "^22.0.4"
+ jest-cli "^22.0.6"
js-base64@^2.1.8, js-base64@^2.1.9:
version "2.4.0"
@@ -8174,7 +8496,7 @@ kind-of@^2.0.1:
dependencies:
is-buffer "^1.0.2"
-kind-of@^3.0.2, kind-of@^3.2.2:
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0, kind-of@^3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
dependencies:
@@ -8186,6 +8508,14 @@ kind-of@^4.0.0:
dependencies:
is-buffer "^1.1.5"
+kind-of@^5.0.0, kind-of@^5.0.2:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
@@ -8212,6 +8542,12 @@ lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+lazy-cache@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264"
+ dependencies:
+ set-getter "^0.1.0"
+
lazy-property@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147"
@@ -8230,9 +8566,9 @@ left-pad@^1.1.3, left-pad@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee"
-lerna@^2.5.1:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.5.1.tgz#d07099bd3051ee799f98c753328bd69e96c6fab8"
+lerna@^2.6.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.7.0.tgz#1df22aebaa82d8134b19303ac3e503146d1e4e9a"
dependencies:
async "^1.5.0"
chalk "^2.1.0"
@@ -8253,7 +8589,7 @@ lerna@^2.5.1:
hosted-git-info "^2.5.0"
inquirer "^3.2.2"
is-ci "^1.0.10"
- load-json-file "^3.0.0"
+ load-json-file "^4.0.0"
lodash "^4.17.4"
minimatch "^3.0.4"
npmlog "^4.1.2"
@@ -8261,11 +8597,12 @@ lerna@^2.5.1:
package-json "^4.0.1"
path-exists "^3.0.0"
read-cmd-shim "^1.0.1"
- read-pkg "^2.0.0"
+ read-pkg "^3.0.0"
rimraf "^2.6.1"
safe-buffer "^5.1.1"
semver "^5.4.1"
signal-exit "^3.0.2"
+ slash "^1.0.0"
strong-log-transformer "^1.0.6"
temp-write "^3.3.0"
write-file-atomic "^2.3.0"
@@ -8428,15 +8765,6 @@ load-json-file@^2.0.0:
pify "^2.0.0"
strip-bom "^3.0.0"
-load-json-file@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-3.0.0.tgz#7eb3735d983a7ed2262ade4ff769af5369c5c440"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^3.0.0"
- pify "^2.0.0"
- strip-bom "^3.0.0"
-
load-json-file@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
@@ -8770,8 +9098,8 @@ log4js@^0.6.31:
semver "~4.3.3"
loglevel@^1.4.1:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934"
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
longest-streak@^2.0.1:
version "2.0.2"
@@ -8859,6 +9187,10 @@ makeerror@1.0.x:
dependencies:
tmpl "1.0.x"
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+
map-obj@^1.0.0, map-obj@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
@@ -8871,6 +9203,12 @@ map-values@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/map-values/-/map-values-1.0.1.tgz#768b8e79c009bf2b64fee806e22a7b1c4190c990"
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ dependencies:
+ object-visit "^1.0.0"
+
markdown-escapes@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518"
@@ -8889,26 +9227,26 @@ markdown-it@^8.4.0:
mdurl "^1.0.1"
uc.micro "^1.0.3"
-markdown-loader@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/markdown-loader/-/markdown-loader-2.0.1.tgz#eed8bead82978bacf17b76a11c5593a013e2d976"
+markdown-loader@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/markdown-loader/-/markdown-loader-2.0.2.tgz#1cdcf11307658cd611046d7db34c2fe80542af7c"
dependencies:
loader-utils "^1.1.0"
- marked "^0.3.6"
+ marked "^0.3.9"
markdown-table@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c"
-marked@^0.3.6, marked@^0.3.9:
- version "0.3.9"
- resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.9.tgz#54ce6a57e720c3ac6098374ec625fcbcc97ff290"
+marked@^0.3.9:
+ version "0.3.12"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519"
-marksy@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/marksy/-/marksy-6.0.2.tgz#2c7b54b43652144cfddc8d674f88d61aee9fc63e"
+marksy@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/marksy/-/marksy-6.0.3.tgz#6079076e8689b563b61be058942090c7ba1f5d20"
dependencies:
- babel-standalone "^6.24.0"
+ babel-standalone "^6.26.0"
he "^1.1.1"
marked "^0.3.9"
@@ -9018,14 +9356,24 @@ methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
-metro-bundler@^0.20.0:
- version "0.20.3"
- resolved "https://registry.yarnpkg.com/metro-bundler/-/metro-bundler-0.20.3.tgz#0ded01b64e8963117017b106f75b83cfc34f3656"
+metro-core@0.24.4, metro-core@^0.24.1:
+ version "0.24.4"
+ resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.24.4.tgz#98fb7dd6abf8ea13af3e6f5a6080b7600e98d842"
+
+metro-source-map@0.24.4:
+ version "0.24.4"
+ resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.24.4.tgz#b56c2ec94629d44c15304fd886d40d23ea970073"
+ dependencies:
+ source-map "^0.5.6"
+
+metro@^0.24.1:
+ version "0.24.4"
+ resolved "https://registry.yarnpkg.com/metro/-/metro-0.24.4.tgz#e67ed4a4992219992cd2d12792a0401b98e16f0c"
dependencies:
absolute-path "^0.0.0"
async "^2.4.0"
babel-core "^6.24.1"
- babel-generator "^6.24.1"
+ babel-generator "^6.26.0"
babel-plugin-external-helpers "^6.18.0"
babel-preset-es2015-node "^6.1.1"
babel-preset-fbjs "^2.1.4"
@@ -9034,19 +9382,24 @@ metro-bundler@^0.20.0:
babylon "^6.18.0"
chalk "^1.1.1"
concat-stream "^1.6.0"
+ connect "^2.8.3"
core-js "^2.2.2"
debug "^2.2.0"
denodeify "^1.2.1"
fbjs "^0.8.14"
+ fs-extra "^1.0.0"
graceful-fs "^4.1.3"
image-size "^0.6.0"
- jest-docblock "^21"
- jest-haste-map "^21"
+ jest-docblock "22.0.3"
+ jest-haste-map "22.0.3"
+ jest-worker "22.0.3"
json-stable-stringify "^1.0.1"
json5 "^0.4.0"
left-pad "^1.1.3"
lodash "^4.16.6"
merge-stream "^1.0.1"
+ metro-core "0.24.4"
+ metro-source-map "0.24.4"
mime-types "2.1.11"
mkdirp "^0.5.1"
request "^2.79.0"
@@ -9054,10 +9407,11 @@ metro-bundler@^0.20.0:
source-map "^0.5.6"
temp "0.8.3"
throat "^4.1.0"
- uglify-es "^3.1.8"
+ uglify-es "^3.1.9"
wordwrap "^1.0.0"
write-file-atomic "^1.2.0"
xpipe "^1.0.5"
+ yargs "^9.0.0"
micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7:
version "2.3.11"
@@ -9077,6 +9431,24 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7:
parse-glob "^3.0.4"
regex-cache "^0.4.2"
+micromatch@^3.1.4:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.5.tgz#d05e168c206472dfbca985bfef4f57797b4cd4ba"
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.0"
+ define-property "^1.0.0"
+ extend-shallow "^2.0.1"
+ extglob "^2.0.2"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.0"
+ nanomatch "^1.2.5"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
@@ -9185,6 +9557,13 @@ mississippi@^1.2.0, mississippi@^1.3.0, mississippi@~1.3.0:
stream-each "^1.1.0"
through2 "^2.0.0"
+mixin-deep@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.0.tgz#47a8732ba97799457c8c1eca28f95132d7e8150a"
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
mixin-object@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e"
@@ -9299,10 +9678,26 @@ mz@^2.4.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nan@^2.0.5, nan@^2.3.0, nan@^2.3.2:
+nan@^2.3.0, nan@^2.3.2:
version "2.8.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
+nanomatch@^1.2.5:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.7.tgz#53cd4aa109ff68b7f869591fdc9d10daeeea3e79"
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ is-odd "^1.0.0"
+ kind-of "^5.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -9463,7 +9858,7 @@ node-pre-gyp@^0.6.36, node-pre-gyp@^0.6.39:
tar "^2.2.1"
tar-pack "^3.4.0"
-node-sass@^4.3.0:
+node-sass@^4.3.0, node-sass@^4.7.2:
version "4.7.2"
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e"
dependencies:
@@ -9495,17 +9890,18 @@ node-version@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.1.0.tgz#f437d7ba407e65e2c4eaef8887b1718ba523d4f0"
-nodemon@^1.14.7:
- version "1.14.7"
- resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.14.7.tgz#ef544baa64603155c2ee6dcfba9204a2cd46d355"
+nodemon@^1.12.1, nodemon@^1.14.11:
+ version "1.14.11"
+ resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.14.11.tgz#cc0009dd8d82f126f3aba50ace7e753827a8cebc"
dependencies:
- chokidar "^1.7.0"
- debug "^2.6.8"
+ chokidar "^2.0.0"
+ debug "^3.1.0"
ignore-by-default "^1.0.1"
minimatch "^3.0.4"
pstree.remy "^1.1.0"
+ semver "^5.4.1"
touch "^3.1.0"
- undefsafe "0.0.3"
+ undefsafe "^2.0.1"
update-notifier "^2.3.0"
nomnom@^1.8.1:
@@ -9554,7 +9950,7 @@ normalize-path@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379"
-normalize-path@^2.0.0, normalize-path@^2.0.1:
+normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
dependencies:
@@ -9593,8 +9989,8 @@ npm-install-checks@~3.0.0:
validate-npm-package-name "^3.0.0"
npm-path@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe"
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
dependencies:
which "^1.2.10"
@@ -9805,6 +10201,14 @@ object-component@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
object-filter@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/object-filter/-/object-filter-1.0.2.tgz#af0b797ffebeaf8a52c6637cedbe8816cfec1bc8"
@@ -9825,6 +10229,12 @@ object-keys@^1.0.11, object-keys@^1.0.8:
version "1.0.11"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ dependencies:
+ isobject "^3.0.0"
+
object.assign@^4.0.4, object.assign@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
@@ -9857,6 +10267,12 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ dependencies:
+ isobject "^3.0.1"
+
object.values@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a"
@@ -10171,10 +10587,20 @@ parse-passwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+parse5-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/parse5-utils/-/parse5-utils-2.0.0.tgz#c926c1764e2431a450a5941f302db9beaec9d78a"
+ dependencies:
+ parse5 "^2.2.1"
+
parse5@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
+parse5@^2.2.1, parse5@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-2.2.3.tgz#0c4fc41c1000c5e6b93d48b03f8083837834e9f6"
+
parse5@^3.0.1, parse5@^3.0.2:
version "3.0.3"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
@@ -10203,6 +10629,10 @@ parseurl@~1.3.0, parseurl@~1.3.1, parseurl@~1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+
path-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
@@ -10396,6 +10826,20 @@ podda@^1.2.2:
babel-runtime "^6.11.6"
immutable "^3.8.1"
+polymer-webpack-loader@2.0.1, polymer-webpack-loader@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/polymer-webpack-loader/-/polymer-webpack-loader-2.0.1.tgz#d15d45328f6a6700366dfaee83fc606f39cdcee0"
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ dom5 "^2.3.0"
+ espree "^3.4.3"
+ html-loader "^0.5.1"
+ loader-utils "^1.1.0"
+ parse5 "^3.0.2"
+ parse5-utils "^2.0.0"
+ postcss "^6.0.9"
+ source-map "^0.5.6"
+
portfinder@^1.0.9, portfinder@~1.0.12:
version "1.0.13"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
@@ -10404,6 +10848,10 @@ portfinder@^1.0.9, portfinder@~1.0.12:
debug "^2.2.0"
mkdirp "0.5.x"
+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-calc@^5.2.0:
version "5.3.1"
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
@@ -10427,13 +10875,6 @@ postcss-convert-values@^2.3.4:
postcss "^5.0.11"
postcss-value-parser "^3.1.2"
-postcss-custom-properties@^6.1.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-6.2.0.tgz#5d929a7f06e9b84e0f11334194c0ba9a30acfbe9"
- dependencies:
- balanced-match "^1.0.0"
- postcss "^6.0.13"
-
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"
@@ -10478,6 +10919,15 @@ postcss-flexbugs-fixes@3.2.0, postcss-flexbugs-fixes@^3.0.0, postcss-flexbugs-fi
dependencies:
postcss "^6.0.1"
+postcss-import@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-11.0.0.tgz#a962e2df82d3bc5a6da6a386841747204f41ef5b"
+ dependencies:
+ postcss "^6.0.1"
+ postcss-value-parser "^3.2.3"
+ read-cache "^1.0.0"
+ resolve "^1.1.7"
+
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"
@@ -10706,9 +11156,9 @@ 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.0, postcss@^6.0.1, postcss@^6.0.13, postcss@^6.0.15, postcss@^6.0.8:
- version "6.0.15"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.15.tgz#f460cd6269fede0d1bf6defff0b934a9845d974d"
+postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13, postcss@^6.0.16, postcss@^6.0.8, postcss@^6.0.9:
+ version "6.0.16"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.16.tgz#112e2fe2a6d2109be0957687243170ea5589e146"
dependencies:
chalk "^2.3.0"
source-map "^0.6.1"
@@ -10726,9 +11176,9 @@ preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-prettier@^1.7.0, prettier@^1.9.2:
- version "1.9.2"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.9.2.tgz#96bc2132f7a32338e6078aeb29727178c6335827"
+prettier@^1.10.2, prettier@^1.7.0:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93"
pretty-bytes@^4.0.2:
version "4.0.2"
@@ -10755,9 +11205,9 @@ pretty-format@^21.2.1:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
-pretty-format@^22.0.3:
- version "22.0.3"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.3.tgz#a2bfa59fc33ad24aa4429981bb52524b41ba5dd7"
+pretty-format@^22.0.6:
+ version "22.0.6"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.6.tgz#bbb78e38445f263c2d3b9e281f4b844380990720"
dependencies:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
@@ -10917,13 +11367,20 @@ pump@^1.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-pumpify@^1.3.3:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b"
+pump@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.0.tgz#7946da1c8d622b098e2ceb2d3476582470829c9d"
dependencies:
- duplexify "^3.1.2"
- inherits "^2.0.1"
- pump "^1.0.0"
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.6.tgz#00d40e5ded0a3bf1e0788b1c0cf426a42882ab64"
+ dependencies:
+ duplexify "^3.5.3"
+ inherits "^2.0.3"
+ pump "^2.0.0"
punycode@1.3.2:
version "1.3.2"
@@ -11039,8 +11496,8 @@ randomatic@^1.1.3:
kind-of "^4.0.0"
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
dependencies:
safe-buffer "^5.1.0"
@@ -11081,8 +11538,8 @@ raw-loader@^0.5.1:
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
rc@^1.0.1, rc@^1.1.0, rc@^1.1.6, rc@^1.1.7:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.3.tgz#51575a900f8dd68381c710b4712c2154c3e2035b"
dependencies:
deep-extend "~0.4.0"
ini "~1.3.0"
@@ -11165,9 +11622,9 @@ react-dev-utils@^4.2.1:
strip-ansi "3.0.1"
text-table "0.2.0"
-react-devtools-core@^2.5.0:
- version "2.5.2"
- resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.5.2.tgz#f97bec5afae5d9318d16778065e0c214c4d5714c"
+react-devtools-core@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.0.0.tgz#f683e19f0311108f97dbb5b29d948323a1bf7c03"
dependencies:
shell-quote "^1.6.1"
ws "^2.0.3"
@@ -11229,7 +11686,7 @@ react-inspector@^2.2.2:
babel-runtime "^6.26.0"
is-dom "^1.0.9"
-react-modal@^2.2.4:
+react-modal@^2.2.4, react-modal@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-2.4.1.tgz#cb09b26711b148eb9f59cb180e1b7d82980ded05"
dependencies:
@@ -11251,12 +11708,12 @@ react-native-compat@^1.0.0:
prop-types "^15.5.10"
react-native-iphone-x-helper@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.0.1.tgz#950dbdaca66f458689a7e9697c5beb9bd53f98f2"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.0.2.tgz#7dbca530930f7c1ce8633cc8fd13ba94102992e1"
-react-native@^0.51.0:
- version "0.51.0"
- resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.51.0.tgz#fe25934b3030fd323f3ca1a70f034133465955ed"
+react-native@^0.52.0:
+ version "0.52.0"
+ resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.52.0.tgz#9784663a2aa40b30c87d4c9c06ef26cf8d419d91"
dependencies:
absolute-path "^0.0.0"
art "^0.10.0"
@@ -11285,7 +11742,8 @@ react-native@^0.51.0:
graceful-fs "^4.1.3"
inquirer "^3.0.6"
lodash "^4.16.6"
- metro-bundler "^0.20.0"
+ metro "^0.24.1"
+ metro-core "^0.24.1"
mime "^1.3.4"
minimist "^1.2.0"
mkdirp "^0.5.1"
@@ -11299,7 +11757,7 @@ react-native@^0.51.0:
promise "^7.1.1"
prop-types "^15.5.8"
react-clone-referenced-element "^1.0.1"
- react-devtools-core "^2.5.0"
+ react-devtools-core "3.0.0"
react-timer-mixin "^0.13.2"
regenerator-runtime "^0.11.0"
rimraf "^2.5.4"
@@ -11459,6 +11917,12 @@ read-all-stream@^3.0.0:
pinkie-promise "^2.0.0"
readable-stream "^2.0.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-cmd-shim@^1.0.1, read-cmd-shim@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b"
@@ -11733,6 +12197,12 @@ regex-cache@^0.4.2:
dependencies:
is-equal-shallow "^0.1.3"
+regex-not@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9"
+ dependencies:
+ extend-shallow "^2.0.1"
+
regexpu-core@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
@@ -12037,7 +12507,7 @@ repeat-string@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
-repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4:
+repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
@@ -12200,6 +12670,10 @@ resolve-from@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+
resolve@1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
@@ -12362,7 +12836,7 @@ sass-graph@^2.2.4:
scss-tokenizer "^0.2.3"
yargs "^7.0.0"
-sass-loader@^6.0.3:
+sass-loader@^6.0.3, sass-loader@^6.0.6:
version "6.0.6"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.6.tgz#e9d5e6c1f155faa32a4b26d7a9b7107c225e40f9"
dependencies:
@@ -12578,10 +13052,34 @@ set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+set-getter@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376"
+ dependencies:
+ to-object-path "^0.3.0"
+
set-immediate-shim@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
setimmediate@^1.0.4, setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
@@ -12654,6 +13152,14 @@ shelljs@^0.7.5, shelljs@^0.7.8:
interpret "^1.0.0"
rechoir "^0.6.2"
+shelljs@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.0.tgz#12f561c52ec5d0d3315af15616c011a18ff80d59"
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
shellsubstitute@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shellsubstitute/-/shellsubstitute-1.2.0.tgz#e4f702a50c518b0f6fe98451890d705af29b6b70"
@@ -12706,6 +13212,33 @@ smart-buffer@^1.0.13:
version "1.1.15"
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16"
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370"
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^2.0.0"
+
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
@@ -12780,6 +13313,13 @@ sockjs@0.3.18:
faye-websocket "^0.10.0"
uuid "^2.0.2"
+sockjs@0.3.19:
+ version "0.3.19"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
+ dependencies:
+ faye-websocket "^0.10.0"
+ uuid "^3.0.1"
+
socks-proxy-agent@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659"
@@ -12833,6 +13373,16 @@ source-map-loader@^0.2.0:
loader-utils "~0.2.2"
source-map "~0.6.1"
+source-map-resolve@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a"
+ dependencies:
+ atob "^2.0.0"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
source-map-support@^0.4.0, source-map-support@^0.4.1, source-map-support@^0.4.15, source-map-support@^0.4.2, source-map-support@~0.4.0:
version "0.4.18"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
@@ -12845,6 +13395,10 @@ source-map-support@^0.5.0:
dependencies:
source-map "^0.6.0"
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+
source-map@0.1.x:
version "0.1.43"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
@@ -12906,6 +13460,12 @@ spdy@^3.4.1:
select-hose "^2.0.0"
spdy-transport "^2.0.18"
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ dependencies:
+ extend-shallow "^3.0.0"
+
split2@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
@@ -12974,6 +13534,13 @@ state-toggle@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425"
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
statuses@1, "statuses@>= 1.3.1 < 2":
version "1.4.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
@@ -13336,11 +13903,11 @@ symbol-tree@^3.2.1:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
symlink-dir@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/symlink-dir/-/symlink-dir-1.1.1.tgz#ea6367d96b0257f730dd03f95212eed24623b93e"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/symlink-dir/-/symlink-dir-1.1.2.tgz#eb367da33401e9c6e95b1ca87efd921cef369852"
dependencies:
"@types/mz" "0.0.32"
- "@types/node" "^8.0.28"
+ "@types/node" "^9.3.0"
graceful-fs "^4.1.11"
is-windows "^1.0.0"
mkdirp-promise "^5.0.0"
@@ -13571,6 +14138,27 @@ to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae"
+ dependencies:
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ regex-not "^1.0.0"
+
to-vfile@^2.0.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-2.1.2.tgz#63f410e3b72937be84e8198961caf74be2da4388"
@@ -13673,33 +14261,45 @@ tsconfig@^6.0.0:
strip-bom "^3.0.0"
strip-json-comments "^2.0.0"
-tsickle@^0.25.5:
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.25.6.tgz#b595db16b236721824eeeda8bb262365b47ef334"
+tsickle@^0.26.0:
+ version "0.26.0"
+ resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.26.0.tgz#40b30a2dd6abcb33b182e37596674bd1cfe4039c"
dependencies:
minimist "^1.2.0"
mkdirp "^0.5.1"
source-map "^0.5.6"
source-map-support "^0.4.2"
-tslib@^1.7.1, tslib@^1.8.1:
+tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.1.tgz#6946af2d1d651a7b1863b531d6e5afa41aa44eac"
-tslint@~5.8.0:
- version "5.8.0"
- resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.8.0.tgz#1f49ad5b2e77c76c3af4ddcae552ae4e3612eb13"
+tslint-config-prettier@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.6.0.tgz#fec1ee8fb07e8f033c63fed6b135af997f31962a"
+
+tslint-plugin-prettier@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-1.3.0.tgz#7eb65d19ea786a859501a42491b78c5de2031a3f"
+ dependencies:
+ eslint-plugin-prettier "^2.2.0"
+ tslib "^1.7.1"
+
+tslint@~5.9.1:
+ version "5.9.1"
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae"
dependencies:
babel-code-frame "^6.22.0"
builtin-modules "^1.1.1"
- chalk "^2.1.0"
- commander "^2.9.0"
+ chalk "^2.3.0"
+ commander "^2.12.1"
diff "^3.2.0"
glob "^7.1.1"
+ js-yaml "^3.7.0"
minimatch "^3.0.4"
resolve "^1.3.2"
semver "^5.3.0"
- tslib "^1.7.1"
+ tslib "^1.8.0"
tsutils "^2.12.1"
tsscmp@1.0.5:
@@ -13707,8 +14307,8 @@ tsscmp@1.0.5:
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97"
tsutils@^2.12.1:
- version "2.15.0"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.15.0.tgz#90831e5908cca10b28cdaf83a56dcf8156aed7c6"
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.16.0.tgz#ad8e83f47bef4f7d24d173cc6cd180990c831105"
dependencies:
tslib "^1.8.1"
@@ -13759,16 +14359,16 @@ uc.micro@^1.0.1, uc.micro@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192"
-uglify-es@^3.1.8, uglify-es@^3.3.4:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.4.tgz#2d592678791e5310456bbc95e952139e3b13167a"
+uglify-es@^3.1.9, uglify-es@^3.3.4:
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.5.tgz#cf7e695da81999f85196b15e2978862f13212f88"
dependencies:
commander "~2.12.1"
source-map "~0.6.1"
uglify-js@3.3.x, uglify-js@^3.0.13:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.4.tgz#d8ebb76f201a3798ac2f0b6519642fcca4a99834"
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.5.tgz#4c4143dfe08e8825746675cc49a6874a933b543e"
dependencies:
commander "~2.12.1"
source-map "~0.6.1"
@@ -13835,9 +14435,11 @@ umask@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d"
-undefsafe@0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f"
+undefsafe@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.1.tgz#03b2f2a16c94556e14b2edef326cd66aaf82707a"
+ dependencies:
+ debug "^2.2.0"
underscore@1.8.x:
version "1.8.3"
@@ -13911,6 +14513,15 @@ unified@^6.0.0:
x-is-function "^1.0.4"
x-is-string "^0.1.0"
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
@@ -13985,6 +14596,13 @@ unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
untildify@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0"
@@ -14047,6 +14665,10 @@ urijs@^1.16.1:
version "1.19.0"
resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.0.tgz#d8aa284d0e7469703a6988ad045c4cbfdf08ada0"
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+
url-loader@0.6.2, url-loader@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7"
@@ -14097,6 +14719,14 @@ urlgrey@0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f"
+use@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8"
+ dependencies:
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ lazy-cache "^2.0.2"
+
user-home@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
@@ -14292,9 +14922,9 @@ vue-hot-reload-api@^2.2.0, vue-hot-reload-api@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.2.4.tgz#683bd1d026c0d3b3c937d5875679e9a87ec6cd8f"
-vue-loader@^13.6.2:
- version "13.6.2"
- resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-13.6.2.tgz#43d9688f2c80400916104d1138941aacd7e389cb"
+vue-loader@^13.7.0:
+ version "13.7.0"
+ resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-13.7.0.tgz#4d6a35b169c2a0a488842fb95c85052105fa9729"
dependencies:
consolidate "^0.14.0"
hash-sum "^1.0.2"
@@ -14379,13 +15009,6 @@ wcwidth@^1.0.0:
dependencies:
defaults "^1.0.3"
-weak@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/weak/-/weak-1.0.1.tgz#ab99aab30706959aa0200cb8cf545bb9cb33b99e"
- dependencies:
- bindings "^1.2.1"
- nan "^2.0.5"
-
webdriver-js-extender@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz#81c533a9e33d5bfb597b4e63e2cdb25b54777515"
@@ -14424,7 +15047,7 @@ webpack-core@^0.6.8:
source-list-map "~0.1.7"
source-map "~0.4.1"
-webpack-dev-middleware@^1.10.2, webpack-dev-middleware@^1.11.0, webpack-dev-middleware@^1.12.2, webpack-dev-middleware@~1.12.0:
+webpack-dev-middleware@1.12.2, webpack-dev-middleware@^1.10.2, webpack-dev-middleware@^1.11.0, webpack-dev-middleware@^1.12.0, webpack-dev-middleware@^1.12.2, webpack-dev-middleware@~1.12.0:
version "1.12.2"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
dependencies:
@@ -14466,7 +15089,39 @@ webpack-dev-server@2.9.4:
webpack-dev-middleware "^1.11.0"
yargs "^6.6.0"
-webpack-dev-server@^2.9.7, webpack-dev-server@~2.9.3:
+webpack-dev-server@^2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.0.tgz#e9d4830ab7eb16c6f92ed68b92f6089027960e1b"
+ dependencies:
+ ansi-html "0.0.7"
+ array-includes "^3.0.3"
+ bonjour "^3.5.0"
+ chokidar "^2.0.0"
+ compression "^1.5.2"
+ connect-history-api-fallback "^1.3.0"
+ debug "^3.1.0"
+ del "^3.0.0"
+ express "^4.16.2"
+ html-entities "^1.2.0"
+ http-proxy-middleware "~0.17.4"
+ import-local "^1.0.0"
+ internal-ip "1.2.0"
+ ip "^1.1.5"
+ killable "^1.0.0"
+ loglevel "^1.4.1"
+ opn "^5.1.0"
+ portfinder "^1.0.9"
+ selfsigned "^1.9.1"
+ serve-index "^1.7.2"
+ sockjs "0.3.19"
+ sockjs-client "1.1.4"
+ spdy "^3.4.1"
+ strip-ansi "^4.0.0"
+ supports-color "^5.1.0"
+ webpack-dev-middleware "1.12.2"
+ yargs "6.6.0"
+
+webpack-dev-server@~2.9.3:
version "2.9.7"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.7.tgz#100ad6a14775478924d417ca6dcfb9d52a98faed"
dependencies:
@@ -14498,7 +15153,7 @@ webpack-dev-server@^2.9.7, webpack-dev-server@~2.9.3:
webpack-dev-middleware "^1.11.0"
yargs "^6.6.0"
-webpack-hot-middleware@^2.18.0, webpack-hot-middleware@^2.21.0:
+webpack-hot-middleware@^2.18.0, webpack-hot-middleware@^2.20.0, webpack-hot-middleware@^2.21.0:
version "2.21.0"
resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz#7b3c113a7a4b301c91e0749573c7aab28b414b52"
dependencies:
@@ -14560,7 +15215,7 @@ webpack@3.8.1:
webpack-sources "^1.0.1"
yargs "^8.0.2"
-"webpack@^2.5.1 || ^3.0.0", webpack@^3.10.0, webpack@~3.10.0:
+"webpack@^2.5.1 || ^3.0.0", webpack@^3.10.0, webpack@^3.6.0, webpack@^3.8.1, webpack@~3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725"
dependencies:
@@ -14939,7 +15594,7 @@ yargs-parser@^7.0.0:
dependencies:
camelcase "^4.1.0"
-yargs-parser@^8.0.0:
+yargs-parser@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
dependencies:
@@ -14956,12 +15611,30 @@ yargs@3.29.0:
window-size "^0.1.2"
y18n "^3.2.0"
-yargs@^10.0.3:
- version "10.0.3"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae"
+yargs@6.6.0, yargs@^6.6.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
dependencies:
+ camelcase "^3.0.0"
cliui "^3.2.0"
decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^4.2.0"
+
+yargs@^10.0.3:
+ version "10.1.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.1.tgz#5fe1ea306985a099b33492001fa19a1e61efe285"
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.1.1"
find-up "^2.1.0"
get-caller-file "^1.0.1"
os-locale "^2.0.0"
@@ -14971,7 +15644,7 @@ yargs@^10.0.3:
string-width "^2.0.0"
which-module "^2.0.0"
y18n "^3.2.1"
- yargs-parser "^8.0.0"
+ yargs-parser "^8.1.0"
yargs@^4.8.0:
version "4.8.1"
@@ -14992,24 +15665,6 @@ yargs@^4.8.0:
y18n "^3.2.1"
yargs-parser "^2.4.1"
-yargs@^6.6.0:
- version "6.6.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
- dependencies:
- camelcase "^3.0.0"
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- os-locale "^1.4.0"
- read-pkg-up "^1.0.1"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^1.0.2"
- which-module "^1.0.0"
- y18n "^3.2.1"
- yargs-parser "^4.2.0"
-
yargs@^7.0.0, yargs@^7.0.2:
version "7.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
@@ -15087,6 +15742,6 @@ yn@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"
-zone.js@^0.8.14, zone.js@^0.8.19:
- version "0.8.19"
- resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.19.tgz#a4b522cd9e8b7b616a638c297d720d4c7f292f71"
+zone.js@^0.8.14, zone.js@^0.8.20:
+ version "0.8.20"
+ resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.20.tgz#a218c48db09464b19ff6fc8f0d4bb5b1046e185d"