Merge branch 'master' into tmeasday/add-options-to-story-store
@ -45,6 +45,21 @@ jobs:
|
||||
- addons
|
||||
- app
|
||||
- lib
|
||||
danger:
|
||||
<<: *defaults
|
||||
environment:
|
||||
- TOKEN_HEAD: 49aa9a6549007391dfcef9c76fca32a73560fd8
|
||||
steps:
|
||||
- checkout
|
||||
- restore_cache:
|
||||
name: "Restore core dependencies cache"
|
||||
keys:
|
||||
- core-dependencies-{{ checksum "yarn.lock" }}
|
||||
- run:
|
||||
name: "Danger"
|
||||
command: |
|
||||
echo $DANGER_GITHUB_API_TOKEN
|
||||
DANGER_GITHUB_API_TOKEN=${TOKEN_HEAD}3 yarn danger ci
|
||||
example-kitchen-sinks:
|
||||
<<: *defaults
|
||||
steps:
|
||||
@ -57,6 +72,9 @@ jobs:
|
||||
name: "Restore core dist cache"
|
||||
keys:
|
||||
- core-dist-{{ .Revision }}
|
||||
- run:
|
||||
name: Workaround for https://github.com/GoogleChrome/puppeteer/issues/290
|
||||
command: sh ./scripts/workaround-puppeteer-issue-290.sh
|
||||
- run:
|
||||
name: "Build react kitchen-sink"
|
||||
command: |
|
||||
@ -273,6 +291,9 @@ workflows:
|
||||
build_accept_deploy:
|
||||
jobs:
|
||||
- build
|
||||
- danger:
|
||||
requires:
|
||||
- build
|
||||
- example-kitchen-sinks:
|
||||
requires:
|
||||
- build
|
||||
|
@ -97,7 +97,7 @@ module.exports = {
|
||||
'no-underscore-dangle': [
|
||||
error,
|
||||
{
|
||||
allow: ['__STORYBOOK_CLIENT_API__'],
|
||||
allow: ['__STORYBOOK_CLIENT_API__', '__STORYBOOK_ADDONS_CHANNEL__'],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
2
.mailmap
@ -12,7 +12,7 @@ Aaron Mc Adam <aaron@aaronmcadam.com>
|
||||
Aruna Herath <aruna@kadira.io> <arunabherath@gmail.com>
|
||||
Arunoda Susiripala <arunoda.susiripala@gmail.com> Arunoda Susiripala <arunoda.susiripala@gmail.com>
|
||||
Benedikt D Valdez <benediktvaldez@users.noreply.github.com> Benedikt D Valdez <benediktvaldez@users.noreply.github.com>
|
||||
Daniel Duan <dduan@squarespace.com> <dduan@yahoo.com>
|
||||
Daniel Duan <dduan@squarespace.com> <dduan@yahoo.com> # github:danielduan, npm:danielduan, twitter:danduan
|
||||
Daniel James <daniel@thzinc.com> <djames@syncromatics.com>
|
||||
Danny Andrews <danny-andrews@users.noreply.github.com> danny@ownlocal.com>
|
||||
Dustin Kane <dkane@athenahealth.com> <dustinpkane@gmail.com>
|
||||
|
465
CHANGELOG.md
@ -1,3 +1,451 @@
|
||||
# 3.4.0-rc.3
|
||||
|
||||
2018-March-19
|
||||
|
||||
#### Documentation
|
||||
|
||||
- Add example for @ngrx/store [#3233](https://github.com/storybooks/storybook/pull/3233)
|
||||
- Fix missing declaration in Angular example [#3213](https://github.com/storybooks/storybook/pull/3213)
|
||||
|
||||
#### Dependency Upgrades
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
58 Updates
|
||||
</summary>
|
||||
|
||||
- Update node-sass in app/angular from 4.8.2 to 4.8.3 [#3239](https://github.com/storybooks/storybook/pull/3239)
|
||||
- Update postcss-loader in lib/core from 2.1.1 to 2.1.2 [#3234](https://github.com/storybooks/storybook/pull/3234)
|
||||
- Upgraded `eslint` in `/` from "4.18.2" to "4.19.0" [#3230](https://github.com/storybooks/storybook/pull/3230)
|
||||
- Upgraded `graphql` in `addons/graphql` from "0.13.1" to "0.13.2" [#3230](https://github.com/storybooks/storybook/pull/3230)
|
||||
- Update gatsby in /docs from 1.9.233 to 1.9.236 [#3229](https://github.com/storybooks/storybook/pull/3229)
|
||||
- Upgraded `gatsby-transformer-remark` in `/docs` from "1.7.36" to "1.7.37" [#3226](https://github.com/storybooks/storybook/pull/3226)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.232" to "1.9.233" [#3226](https://github.com/storybooks/storybook/pull/3226)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/react` from "1.2.3" to "1.2.4" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `puppeteer` in `addons/storyshots` from "1.1.1" to "1.2.0" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `enzyme-to-json` in `addons/storyshots` from "3.3.1" to "3.3.3" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `css-loader` in `lib/core` from "0.28.10" to "0.28.11" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/angular` from "1.2.3" to "1.2.4" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/polymer` from "1.2.3" to "1.2.4" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/react-native` from "1.2.3" to "1.2.4" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/vue` from "1.2.3" to "1.2.4" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `enzyme-to-json` in `examples/cra-kitchen-sink` from "3.3.1" to "3.3.3" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `enzyme-to-json` in `examples/official-storybook` from "3.3.1" to "3.3.3" [#3227](https://github.com/storybooks/storybook/pull/3227)
|
||||
- Upgraded `@angular/common` in `/` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/compiler` in `/` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/core` in `/` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/forms` in `/` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/platform-browser` in `/` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/platform-browser-dynamic` in `/` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `danger` in `/` from "3.1.8" to "3.2.0" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `eslint-plugin-jest` in `/` from "21.14.1" to "21.15.0" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `jest-vue-preprocessor` in `/` from "1.3.1" to "1.4.0" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `react-chromatic` in `examples/official-storybook` from "0.7.10" to "0.7.11" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/common` in `examples/angular-cli` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/compiler` in `examples/angular-cli` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/core` in `examples/angular-cli` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/forms` in `examples/angular-cli` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/platform-browser` in `examples/angular-cli` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/platform-browser-dynamic` in `examples/angular-cli` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `@angular/compiler-cli` in `examples/angular-cli` from "5.2.8" to "5.2.9" [#3219](https://github.com/storybooks/storybook/pull/3219)
|
||||
- Upgraded `eslint-plugin-jest` in `/` from "21.14.0" to "21.14.1" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `jest-image-snapshot` in `/` from "2.3.0" to "2.4.0" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `nodemon` in `app/react` from "1.17.1" to "1.17.2" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `vue` in `addons/knobs` from "2.5.15" to "2.5.16" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `jest-image-snapshot` in `addons/storyshots` from "2.3.0" to "2.4.0" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `nodemon` in `app/angular` from "1.17.1" to "1.17.2" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `nodemon` in `app/polymer` from "1.17.1" to "1.17.2" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `nodemon` in `app/vue` from "1.17.1" to "1.17.2" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `vue` in `app/vue` from "2.5.15" to "2.5.16" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `vue-template-compiler` in `app/vue` from "2.5.15" to "2.5.16" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `vue` in `examples/vue-kitchen-sink` from "2.5.15" to "2.5.16" [#3210](https://github.com/storybooks/storybook/pull/3210)
|
||||
- Upgraded `tslint-config-prettier` in `/` from "1.9.0" to "1.10.0" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `glamorous` in `app/react` from "4.12.0" to "4.12.1" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `glamorous` in `addons/actions` from "4.12.0" to "4.12.1" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `glamorous` in `lib/components` from "4.12.0" to "4.12.1" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `glamorous` in `addons/a11y` from "4.12.0" to "4.12.1" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `glamorous` in `addons/info` from "4.12.0" to "4.12.1" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `glamorous` in `addons/jest` from "4.12.0" to "4.12.1" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `react-modal` in `lib/ui` from "3.3.1" to "3.3.2" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `express` in `lib/core` from "4.16.2" to "4.16.3" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `node-sass` in `app/angular` from "4.8.1" to "4.8.2" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `express` in `app/react-native` from "4.16.2" to "4.16.3" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Upgraded `rxjs` in `examples/angular-cli` from "5.5.6" to "5.5.7" [#3201](https://github.com/storybooks/storybook/pull/3201)
|
||||
- Update gatsby in /docs from 1.9.231 to 1.9.232 [#3200](https://github.com/storybooks/storybook/pull/3200)
|
||||
|
||||
</details>
|
||||
|
||||
# 3.4.0-rc.2
|
||||
|
||||
2018-March-13
|
||||
|
||||
Fix publishing options to use exact versions for cross-dependencies per this change:
|
||||
|
||||
- use exact versions for cross-dependencies between our own packages [#3183](https://github.com/storybooks/storybook/pull/3183)
|
||||
|
||||
# 3.4.0-rc.1
|
||||
|
||||
2018-March-13
|
||||
|
||||
#### Features
|
||||
|
||||
- Fix screenshots tests & add getScreenshotOption to storyshots [#3102](https://github.com/storybooks/storybook/pull/3102)
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Delaying update of height and width in Layout [#3180](https://github.com/storybooks/storybook/pull/3180)
|
||||
- Add 'waitUntil' option to puppeteer of storyshots [#3156](https://github.com/storybooks/storybook/pull/3156)
|
||||
- Move polymer loader to peerDependencies [#3161](https://github.com/storybooks/storybook/pull/3161)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
- Feature-freeze master [#3149](https://github.com/storybooks/storybook/pull/3149)
|
||||
|
||||
#### Dependency Upgrades
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
57 updates
|
||||
</summary>
|
||||
|
||||
- Update danger in / from 3.1.7 to 3.1.8 [#3191](https://github.com/storybooks/storybook/pull/3191)
|
||||
- Upgraded `polymer-webpack-loader` in `/` from "2.0.1" to "2.0.2" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/react` from "1.2.2" to "1.2.3" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `vue` in `addons/knobs` from "2.5.14" to "2.5.15" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `node-sass` in `app/angular` from "4.7.2" to "4.8.1" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/angular` from "1.2.2" to "1.2.3" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/polymer` from "1.2.2" to "1.2.3" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `polymer-webpack-loader` in `app/polymer` from "2.0.1" to "2.0.2" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/react-native` from "1.2.2" to "1.2.3" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/vue` from "1.2.2" to "1.2.3" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `vue` in `app/vue` from "2.5.14" to "2.5.15" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `vue-template-compiler` in `app/vue` from "2.5.14" to "2.5.15" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `polymer-webpack-loader` in `examples/polymer-cli` from "2.0.1" to "2.0.2" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Upgraded `vue` in `examples/vue-kitchen-sink` from "2.5.14" to "2.5.15" [#3184](https://github.com/storybooks/storybook/pull/3184)
|
||||
- Update eslint-plugin-jest in / from 21.13.0 to 21.14.0 [#3182](https://github.com/storybooks/storybook/pull/3182)
|
||||
- Upgraded `cross-env` in `/` from "5.1.3" to "5.1.4" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `jest-preset-angular` in `/` from "5.2.0" to "5.2.1" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `@types/react` in `addons/notes` from "16.0.34" to "16.0.40" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `style-loader` in `addons/knobs` from "0.20.2" to "0.20.3" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `vue` in `addons/knobs` from "2.5.13" to "2.5.14" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `style-loader` in `lib/core` from "0.20.2" to "0.20.3" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `cross-env` in `app/angular` from "5.1.3" to "5.1.4" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `copy-webpack-plugin` in `app/polymer` from "4.5.0" to "4.5.1" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `vue` in `app/vue` from "2.5.13" to "2.5.14" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `vue-template-compiler` in `app/vue` from "2.5.13" to "2.5.14" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `@types/node` in `examples/angular-cli` from "9.4.6" to "9.4.7" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `copy-webpack-plugin` in `examples/polymer-cli` from "4.5.0" to "4.5.1" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `vue` in `examples/vue-kitchen-sink` from "2.5.13" to "2.5.14" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `cross-env` in `examples/vue-kitchen-sink` from "5.1.3" to "5.1.4" [#3179](https://github.com/storybooks/storybook/pull/3179)
|
||||
- Upgraded `gatsby-link` in `/docs` from "1.6.38" to "1.6.39" [#3171](https://github.com/storybooks/storybook/pull/3171)
|
||||
- Upgraded `gatsby-plugin-sharp` in `/docs` from "1.6.39" to "1.6.41" [#3171](https://github.com/storybooks/storybook/pull/3171)
|
||||
- Upgraded `gatsby-source-filesystem` in `/docs` from "1.5.26" to "1.5.27" [#3171](https://github.com/storybooks/storybook/pull/3171)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.225" to "1.9.231" [#3171](https://github.com/storybooks/storybook/pull/3171)
|
||||
- Upgraded `@angular/common` in `/` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/compiler` in `/` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/core` in `/` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/forms` in `/` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/platform-browser` in `/` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/platform-browser-dynamic` in `/` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `commander` in `/` from "2.14.1" to "2.15.0" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `acorn` in `addons/storysource` from "5.5.1" to "5.5.3" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `enzyme-to-json` in `addons/storyshots` from "3.3.1" to "3.3.2" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `commander` in `lib/core` from "2.14.1" to "2.15.0" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `commander` in `app/react-native` from "2.14.1" to "2.15.0" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `enzyme-to-json` in `examples/cra-kitchen-sink` from "3.3.1" to "3.3.2" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `enzyme-to-json` in `examples/official-storybook` from "3.3.1" to "3.3.2" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `commander` in `lib/cli` from "2.14.1" to "2.15.0" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/common` in `examples/angular-cli` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/compiler` in `examples/angular-cli` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/core` in `examples/angular-cli` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/forms` in `examples/angular-cli` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/platform-browser` in `examples/angular-cli` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/platform-browser-dynamic` in `examples/angular-cli` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/cli` in `examples/angular-cli` from "1.7.2" to "1.7.3" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- Upgraded `@angular/compiler-cli` in `examples/angular-cli` from "5.2.7" to "5.2.8" [#3170](https://github.com/storybooks/storybook/pull/3170)
|
||||
- use exact versions for cross-dependencies between our own packages [#3183](https://github.com/storybooks/storybook/pull/3183)
|
||||
- Move "@types/react" to dev dependencies [#3169](https://github.com/storybooks/storybook/pull/3169)
|
||||
|
||||
</details>
|
||||
|
||||
# 3.4.0-rc.0
|
||||
|
||||
2018-March-08
|
||||
|
||||
#### Features
|
||||
|
||||
- Add `__STORYBOOK_CLIENT_API__` for external tools [#3058](https://github.com/storybooks/storybook/pull/3058)
|
||||
- Addon storysource: select stories from inside of the StoryPanel [#3154](https://github.com/storybooks/storybook/pull/3154)
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Addons: avoid mixing manager and preview code together [#3068](https://github.com/storybooks/storybook/pull/3068)
|
||||
|
||||
#### Documentation
|
||||
|
||||
- Update ADDONS_SUPPORT.md [#3114](https://github.com/storybooks/storybook/pull/3114)
|
||||
- Add `viewport` addon to the Addon Gallery [#3106](https://github.com/storybooks/storybook/pull/3106)
|
||||
- Fix links examples [#3096](https://github.com/storybooks/storybook/pull/3096)
|
||||
- Fix links addon examples [#3070](https://github.com/storybooks/storybook/pull/3070)
|
||||
- Fix inconsistencies in the background add-on README [#3080](https://github.com/storybooks/storybook/pull/3080)
|
||||
|
||||
#### Maintenance
|
||||
|
||||
- Fix errors on starting example Angular app [#3078](https://github.com/storybooks/storybook/pull/3078)
|
||||
- Use WatchMissingNodeModulesPlugin from react-dev-utils package [#3141](https://github.com/storybooks/storybook/pull/3141)
|
||||
- Don't use exact versions in peerDependencies [#3073](https://github.com/storybooks/storybook/pull/3073)
|
||||
- Remove integration tests [#3052](https://github.com/storybooks/storybook/pull/3052)
|
||||
|
||||
#### Dependency Upgrades
|
||||
|
||||
<details>
|
||||
<summary>
|
||||
229 Updates
|
||||
</summary>
|
||||
|
||||
- Upgraded `jscodeshift` in `lib/codemod` from "0.4.1" to "0.5.0" [#3168](https://github.com/storybooks/storybook/pull/3168)
|
||||
- Upgraded `vue-loader` in `app/vue` from "14.1.1" to "14.2.1" [#3168](https://github.com/storybooks/storybook/pull/3168)
|
||||
- Upgraded `jscodeshift` in `lib/cli` from "0.4.1" to "0.5.0" [#3168](https://github.com/storybooks/storybook/pull/3168)
|
||||
- Upgraded `vue-loader` in `examples/vue-kitchen-sink` from "14.1.1" to "14.2.1" [#3168](https://github.com/storybooks/storybook/pull/3168)
|
||||
- Upgraded `@storybook/addon-actions` in `/docs` from "3.3.14" to "3.3.15" [#3167](https://github.com/storybooks/storybook/pull/3167)
|
||||
- Upgraded `@storybook/addon-links` in `/docs` from "3.3.14" to "3.3.15" [#3167](https://github.com/storybooks/storybook/pull/3167)
|
||||
- Upgraded `@storybook/addons` in `/docs` from "3.3.14" to "3.3.15" [#3167](https://github.com/storybooks/storybook/pull/3167)
|
||||
- Upgraded `@storybook/react` in `/docs` from "3.3.14" to "3.3.15" [#3167](https://github.com/storybooks/storybook/pull/3167)
|
||||
- Upgraded `gatsby-remark-images` in `/docs` from "1.5.55" to "1.5.56" [#3167](https://github.com/storybooks/storybook/pull/3167)
|
||||
- Upgraded `gatsby-transformer-remark` in `/docs` from "1.7.34" to "1.7.36" [#3167](https://github.com/storybooks/storybook/pull/3167)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.223" to "1.9.225" [#3167](https://github.com/storybooks/storybook/pull/3167)
|
||||
- Upgraded `eslint-plugin-jest` in `/` from "21.12.3" to "21.13.0" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `babel-loader` in `app/react` from "7.1.3" to "7.1.4" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `case-sensitive-paths-webpack-plugin` in `app/react` from "2.1.1" to "2.1.2" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `acorn` in `addons/storysource` from "5.5.0" to "5.5.1" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `react-syntax-highlighter` in `addons/storysource` from "7.0.1" to "7.0.2" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `babel-loader` in `app/angular` from "7.1.3" to "7.1.4" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `case-sensitive-paths-webpack-plugin` in `app/angular` from "2.1.1" to "2.1.2" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `babel-loader` in `app/polymer` from "7.1.3" to "7.1.4" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `case-sensitive-paths-webpack-plugin` in `app/polymer` from "2.1.1" to "2.1.2" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `babel-loader` in `app/react-native` from "7.1.3" to "7.1.4" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `case-sensitive-paths-webpack-plugin` in `app/react-native` from "2.1.1" to "2.1.2" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `babel-loader` in `app/vue` from "7.1.3" to "7.1.4" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `case-sensitive-paths-webpack-plugin` in `app/vue` from "2.1.1" to "2.1.2" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `karma-coverage-istanbul-reporter` in `examples/angular-cli` from "1.4.1" to "1.4.2" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `babel-loader` in `examples/polymer-cli` from "7.1.3" to "7.1.4" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `babel-loader` in `examples/vue-kitchen-sink` from "7.1.3" to "7.1.4" [#3160](https://github.com/storybooks/storybook/pull/3160)
|
||||
- Upgraded `gatsby-plugin-sharp` in `/docs` from "1.6.38" to "1.6.39" [#3159](https://github.com/storybooks/storybook/pull/3159)
|
||||
- Upgraded `gatsby-remark-images` in `/docs` from "1.5.54" to "1.5.55" [#3159](https://github.com/storybooks/storybook/pull/3159)
|
||||
- Update jest-specific-snapshot in addons/storyshots from 0.4.0 to 0.5.0 [#3151](https://github.com/storybooks/storybook/pull/3151)
|
||||
- Upgraded `gatsby-plugin-sharp` in `/docs` from "1.6.37" to "1.6.38" [#3146](https://github.com/storybooks/storybook/pull/3146)
|
||||
- Upgraded `gatsby-remark-images` in `/docs` from "1.5.53" to "1.5.54" [#3146](https://github.com/storybooks/storybook/pull/3146)
|
||||
- Upgraded `gatsby-source-filesystem` in `/docs` from "1.5.25" to "1.5.26" [#3146](https://github.com/storybooks/storybook/pull/3146)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.222" to "1.9.223" [#3146](https://github.com/storybooks/storybook/pull/3146)
|
||||
- Upgraded `webpack-hot-middleware` in `app/react` from "2.21.1" to "2.21.2" [#3145](https://github.com/storybooks/storybook/pull/3145)
|
||||
- Upgraded `webpack-hot-middleware` in `lib/core` from "2.21.1" to "2.21.2" [#3145](https://github.com/storybooks/storybook/pull/3145)
|
||||
- Upgraded `webpack-hot-middleware` in `app/angular` from "2.21.1" to "2.21.2" [#3145](https://github.com/storybooks/storybook/pull/3145)
|
||||
- Upgraded `webpack-hot-middleware` in `app/polymer` from "2.21.1" to "2.21.2" [#3145](https://github.com/storybooks/storybook/pull/3145)
|
||||
- Upgraded `webpack-hot-middleware` in `app/react-native` from "2.21.1" to "2.21.2" [#3145](https://github.com/storybooks/storybook/pull/3145)
|
||||
- Upgraded `webpack-hot-middleware` in `app/vue` from "2.21.1" to "2.21.2" [#3145](https://github.com/storybooks/storybook/pull/3145)
|
||||
- Upgraded `babel-plugin-macros` in `/` from "2.1.0" to "2.2.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `chalk` in `/` from "2.3.1" to "2.3.2" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `eslint` in `/` from "4.18.1" to "4.18.2" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `eslint-plugin-jest` in `/` from "21.12.2" to "21.12.3" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `babel-plugin-macros` in `app/react` from "2.1.0" to "2.2.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `glamorous` in `app/react` from "4.11.6" to "4.12.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `glamorous` in `addons/actions` from "4.11.6" to "4.12.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `glamorous` in `lib/components` from "4.11.6" to "4.12.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `glamorous` in `addons/a11y` from "4.11.6" to "4.12.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `glamorous` in `addons/info` from "4.11.6" to "4.12.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `glamorous` in `addons/jest` from "4.11.6" to "4.12.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `moment` in `addons/knobs` from "2.20.1" to "2.21.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `chalk` in `lib/core` from "2.3.1" to "2.3.2" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `babel-plugin-macros` in `app/angular` from "2.1.0" to "2.2.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `sass-loader` in `app/angular` from "6.0.6" to "6.0.7" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `babel-plugin-macros` in `app/polymer` from "2.1.0" to "2.2.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `babel-plugin-macros` in `app/react-native` from "2.1.0" to "2.2.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `babel-plugin-macros` in `app/vue` from "2.1.0" to "2.2.0" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `chalk` in `lib/cli` from "2.3.1" to "2.3.2" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `cross-spawn` in `lib/cli` from "6.0.4" to "6.0.5" [#3137](https://github.com/storybooks/storybook/pull/3137)
|
||||
- Upgraded `gatsby-remark-copy-linked-files` in `/docs` from "1.5.29" to "1.5.30" [#3136](https://github.com/storybooks/storybook/pull/3136)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.221" to "1.9.222" [#3136](https://github.com/storybooks/storybook/pull/3136)
|
||||
- Upgraded `gatsby-link` in `/docs` from "1.6.37" to "1.6.38" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `gatsby-plugin-sharp` in `/docs` from "1.6.35" to "1.6.37" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `gatsby-remark-autolink-headers` in `/docs` from "1.4.12" to "1.4.13" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `gatsby-remark-copy-linked-files` in `/docs` from "1.5.28" to "1.5.29" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `gatsby-remark-images` in `/docs` from "1.5.51" to "1.5.53" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `gatsby-remark-smartypants` in `/docs` from "1.4.11" to "1.4.12" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `gatsby-source-filesystem` in `/docs` from "1.5.24" to "1.5.25" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `gatsby-transformer-remark` in `/docs` from "1.7.33" to "1.7.34" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.216" to "1.9.221" [#3124](https://github.com/storybooks/storybook/pull/3124)
|
||||
- Upgraded `codelyzer` in `/` from "4.1.0" to "4.2.1" [#3131](https://github.com/storybooks/storybook/pull/3131)
|
||||
- Upgraded `file-loader` in `lib/core` from "1.1.10" to "1.1.11" [#3131](https://github.com/storybooks/storybook/pull/3131)
|
||||
- Upgraded `copy-webpack-plugin` in `app/polymer` from "4.4.2" to "4.5.0" [#3131](https://github.com/storybooks/storybook/pull/3131)
|
||||
- Upgraded `copy-webpack-plugin` in `examples/polymer-cli` from "4.4.2" to "4.5.0" [#3131](https://github.com/storybooks/storybook/pull/3131)
|
||||
- Upgraded `file-loader` in `examples/vue-kitchen-sink` from "1.1.10" to "1.1.11" [#3131](https://github.com/storybooks/storybook/pull/3131)
|
||||
- Upgraded `@angular/common` in `/` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/compiler` in `/` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/core` in `/` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/forms` in `/` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/platform-browser` in `/` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/platform-browser-dynamic` in `/` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `prettier` in `/` from "1.11.0" to "1.11.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `prettier` in `addons/storysource` from "1.11.0" to "1.11.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `babel-plugin-react-docgen` in `app/react` from "1.8.2" to "1.8.3" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `webpack-hot-middleware` in `app/react` from "2.21.0" to "2.21.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `nodemon` in `app/react` from "1.15.1" to "1.17.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `jest-specific-snapshot` in `addons/storyshots` from "0.3.0" to "0.4.0" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `react-color` in `addons/knobs` from "2.13.8" to "2.14.0" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `webpack-hot-middleware` in `lib/core` from "2.21.0" to "2.21.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `webpack-hot-middleware` in `app/angular` from "2.21.0" to "2.21.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `nodemon` in `app/angular` from "1.15.1" to "1.17.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `webpack-hot-middleware` in `app/polymer` from "2.21.0" to "2.21.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `nodemon` in `app/polymer` from "1.15.1" to "1.17.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `webpack-hot-middleware` in `app/react-native` from "2.21.0" to "2.21.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `webpack-hot-middleware` in `app/vue` from "2.21.0" to "2.21.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `nodemon` in `app/vue` from "1.15.1" to "1.17.1" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/common` in `examples/angular-cli` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/compiler` in `examples/angular-cli` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/core` in `examples/angular-cli` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/forms` in `examples/angular-cli` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/platform-browser` in `examples/angular-cli` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/platform-browser-dynamic` in `examples/angular-cli` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/cli` in `examples/angular-cli` from "1.7.1" to "1.7.2" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Upgraded `@angular/compiler-cli` in `examples/angular-cli` from "5.2.6" to "5.2.7" [#3123](https://github.com/storybooks/storybook/pull/3123)
|
||||
- Vue example: upgrade vue-loader from 13.7.1 to 14.1.1 [#3077](https://github.com/storybooks/storybook/pull/3077)
|
||||
- Maintenance: upgrade lint-staged from `6.1.1` to `7.0.0` [#3067](https://github.com/storybooks/storybook/pull/3067)
|
||||
- Core & UI: upgrade events from 1.1.1 to 2.0.0 [#3075](https://github.com/storybooks/storybook/pull/3075)
|
||||
- Upgraded `gatsby-plugin-sharp` in `/docs` from "1.6.34" to "1.6.35" [#3109](https://github.com/storybooks/storybook/pull/3109)
|
||||
- Upgraded `gatsby-remark-images` in `/docs` from "1.5.50" to "1.5.51" [#3109](https://github.com/storybooks/storybook/pull/3109)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.215" to "1.9.216" [#3109](https://github.com/storybooks/storybook/pull/3109)
|
||||
- Upgraded `marked` in `/docs` from "0.3.16" to "0.3.17" [#3109](https://github.com/storybooks/storybook/pull/3109)
|
||||
- Upgraded `prop-types` in `/docs` from "15.6.0" to "15.6.1" [#3109](https://github.com/storybooks/storybook/pull/3109)
|
||||
- RN app: upgrade ws from 3.3.3 to 4.1.0 [#3074](https://github.com/storybooks/storybook/pull/3074)
|
||||
- Upgraded `prettier` in `/` from "1.10.2" to "1.11.0" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/background` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/events` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `acorn` in `addons/storysource` from "5.4.1" to "5.5.0" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `acorn-stage3` in `addons/storysource` from "0.5.0" to "0.6.0" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prettier` in `addons/storysource` from "1.10.2" to "1.11.0" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/storysource` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `dotenv-webpack` in `app/react` from "1.5.4" to "1.5.5" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `app/react` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/graphql` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `marked` in `addons/notes` from "0.3.16" to "0.3.17" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/notes` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/actions` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/links` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `lib/components` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/a11y` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/info` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/jest` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/knobs` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `addons/viewport` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `lib/ui` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `dotenv` in `lib/core` from "5.0.0" to "5.0.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `file-loader` in `lib/core` from "1.1.9" to "1.1.10" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `lib/core` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `examples/cra-kitchen-sink` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `examples/official-storybook` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `dotenv-webpack` in `app/angular` from "1.5.4" to "1.5.5" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `dotenv-webpack` in `app/polymer` from "1.5.4" to "1.5.5" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `prop-types` in `app/react-native` from "15.6.0" to "15.6.1" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `dotenv-webpack` in `app/vue` from "1.5.4" to "1.5.5" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `webpack-dev-server` in `examples/polymer-cli` from "2.11.1" to "2.11.2" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `file-loader` in `examples/vue-kitchen-sink` from "1.1.9" to "1.1.10" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `webpack-dev-server` in `examples/vue-kitchen-sink` from "2.11.1" to "2.11.2" [#3108](https://github.com/storybooks/storybook/pull/3108)
|
||||
- Upgraded `gatsby-source-filesystem` in `/docs` from "1.5.23" to "1.5.24" [#3103](https://github.com/storybooks/storybook/pull/3103)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.214" to "1.9.215" [#3103](https://github.com/storybooks/storybook/pull/3103)
|
||||
- Upgraded `jest-preset-angular` in `/` from "5.1.0" to "5.2.0" [#3104](https://github.com/storybooks/storybook/pull/3104)
|
||||
- Upgraded `postcss-loader` in `lib/core` from "2.1.0" to "2.1.1" [#3104](https://github.com/storybooks/storybook/pull/3104)
|
||||
- Upgraded `tslint-config-prettier` in `/` from "1.8.0" to "1.9.0" [#3097](https://github.com/storybooks/storybook/pull/3097)
|
||||
- Upgraded `babel-loader` in `app/react` from "7.1.2" to "7.1.3" [#3097](https://github.com/storybooks/storybook/pull/3097)
|
||||
- Upgraded `babel-loader` in `app/angular` from "7.1.2" to "7.1.3" [#3097](https://github.com/storybooks/storybook/pull/3097)
|
||||
- Upgraded `babel-loader` in `app/polymer` from "7.1.2" to "7.1.3" [#3097](https://github.com/storybooks/storybook/pull/3097)
|
||||
- Upgraded `babel-loader` in `app/react-native` from "7.1.2" to "7.1.3" [#3097](https://github.com/storybooks/storybook/pull/3097)
|
||||
- Upgraded `babel-loader` in `app/vue` from "7.1.2" to "7.1.3" [#3097](https://github.com/storybooks/storybook/pull/3097)
|
||||
- Upgraded `babel-loader` in `examples/polymer-cli` from "7.1.2" to "7.1.3" [#3097](https://github.com/storybooks/storybook/pull/3097)
|
||||
- Upgraded `babel-loader` in `examples/vue-kitchen-sink` from "7.1.2" to "7.1.3" [#3097](https://github.com/storybooks/storybook/pull/3097)
|
||||
- Update gatsby in /docs from 1.9.212 to 1.9.214 [#3095](https://github.com/storybooks/storybook/pull/3095)
|
||||
- Upgraded `gatsby-plugin-sharp` in `/docs` from "1.6.33" to "1.6.34" [#3071](https://github.com/storybooks/storybook/pull/3071)
|
||||
- Upgraded `gatsby-remark-images` in `/docs` from "1.5.49" to "1.5.50" [#3071](https://github.com/storybooks/storybook/pull/3071)
|
||||
- Upgraded `gatsby-source-filesystem` in `/docs` from "1.5.22" to "1.5.23" [#3071](https://github.com/storybooks/storybook/pull/3071)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.209" to "1.9.212" [#3071](https://github.com/storybooks/storybook/pull/3071)
|
||||
- Upgraded `puppeteer` in `/` from "1.1.0" to "1.1.1" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `react-syntax-highlighter` in `addons/storysource` from "7.0.0" to "7.0.1" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/react` from "1.2.0" to "1.2.2" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `puppeteer` in `addons/storyshots` from "1.0.0" to "1.1.1" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/angular` from "1.2.0" to "1.2.2" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `copy-webpack-plugin` in `app/polymer` from "4.4.1" to "4.4.2" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/polymer` from "1.2.0" to "1.2.2" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/react-native` from "1.2.0" to "1.2.2" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `uglifyjs-webpack-plugin` in `app/vue` from "1.2.0" to "1.2.2" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `copy-webpack-plugin` in `examples/polymer-cli` from "4.4.1" to "4.4.2" [#3069](https://github.com/storybooks/storybook/pull/3069)
|
||||
- Upgraded `jest` in `/` from "22.4.0" to "22.4.2" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `jest-cli` in `/` from "22.4.0" to "22.4.2" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `jest-config` in `/` from "22.4.0" to "22.4.2" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `jest-environment-jsdom` in `/` from "22.4.0" to "22.4.1" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `jest-jasmine2` in `/` from "22.4.0" to "22.4.2" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `css-loader` in `app/react` from "0.28.9" to "0.28.10" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `babel-jest` in `addons/storyshots` from "22.4.0" to "22.4.1" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `jest` in `addons/storyshots` from "22.4.0" to "22.4.2" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `jest-cli` in `addons/storyshots` from "22.4.0" to "22.4.2" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `css-loader` in `lib/core` from "0.28.9" to "0.28.10" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `babel-jest` in `examples/cra-kitchen-sink` from "22.4.0" to "22.4.1" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `jest` in `examples/cra-kitchen-sink` from "22.4.0" to "22.4.2" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `babel-jest` in `examples/official-storybook` from "22.4.0" to "22.4.1" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `jest` in `examples/official-storybook` from "22.4.0" to "22.4.2" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `css-loader` in `app/angular` from "0.28.9" to "0.28.10" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `css-loader` in `app/polymer` from "0.28.9" to "0.28.10" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `css-loader` in `app/react-native` from "0.28.9" to "0.28.10" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `css-loader` in `app/vue` from "0.28.9" to "0.28.10" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `css-loader` in `examples/vue-kitchen-sink` from "0.28.9" to "0.28.10" [#3063](https://github.com/storybooks/storybook/pull/3063)
|
||||
- Upgraded `gatsby-plugin-sharp` in `/docs` from "1.6.32" to "1.6.33" [#3064](https://github.com/storybooks/storybook/pull/3064)
|
||||
- Upgraded `gatsby-remark-copy-linked-files` in `/docs` from "1.5.27" to "1.5.28" [#3064](https://github.com/storybooks/storybook/pull/3064)
|
||||
- Upgraded `gatsby-remark-images` in `/docs` from "1.5.48" to "1.5.49" [#3064](https://github.com/storybooks/storybook/pull/3064)
|
||||
- Upgraded `gatsby-source-filesystem` in `/docs` from "1.5.21" to "1.5.22" [#3064](https://github.com/storybooks/storybook/pull/3064)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.206" to "1.9.209" [#3064](https://github.com/storybooks/storybook/pull/3064)
|
||||
- Upgraded `@angular/common` in `/` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/compiler` in `/` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/core` in `/` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/forms` in `/` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/platform-browser` in `/` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/platform-browser-dynamic` in `/` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `eslint-plugin-import` in `/` from "2.8.0" to "2.9.0" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `jest-preset-angular` in `/` from "5.0.0" to "5.1.0" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `file-loader` in `app/react` from "1.1.8" to "1.1.9" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `file-loader` in `lib/core` from "1.1.8" to "1.1.9" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `react-chromatic` in `examples/official-storybook` from "0.7.9" to "0.7.10" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `file-loader` in `app/angular` from "1.1.8" to "1.1.9" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `file-loader` in `app/polymer` from "1.1.8" to "1.1.9" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `file-loader` in `app/react-native` from "1.1.8" to "1.1.9" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `file-loader` in `app/vue` from "1.1.8" to "1.1.9" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/animations` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/common` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/compiler` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/core` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/forms` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/http` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/platform-browser` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/platform-browser-dynamic` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/router` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/cli` in `examples/angular-cli` from "1.7.0" to "1.7.1" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/compiler-cli` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `@angular/language-service` in `examples/angular-cli` from "5.2.5" to "5.2.6" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `file-loader` in `examples/vue-kitchen-sink` from "1.1.8" to "1.1.9" [#3055](https://github.com/storybooks/storybook/pull/3055)
|
||||
- Upgraded `gatsby-plugin-sharp` in `/docs` from "1.6.31" to "1.6.32" [#3056](https://github.com/storybooks/storybook/pull/3056)
|
||||
- Upgraded `gatsby-remark-images` in `/docs` from "1.5.47" to "1.5.48" [#3056](https://github.com/storybooks/storybook/pull/3056)
|
||||
- Upgraded `gatsby` in `/docs` from "1.9.204" to "1.9.206" [#3056](https://github.com/storybooks/storybook/pull/3056)
|
||||
|
||||
</details>
|
||||
|
||||
# 3.3.15
|
||||
|
||||
2018-March-07
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Unset background when switching to a non-background story [#3142](https://github.com/storybooks/storybook/pull/3142)
|
||||
- Updated testIds in RN StoryListView to use kind [#3129](https://github.com/storybooks/storybook/pull/3129)
|
||||
- Added missing key prop to NoTests component. [#3111](https://github.com/storybooks/storybook/pull/3111)
|
||||
- Events addon: fix React keys warning [#3072](https://github.com/storybooks/storybook/pull/3072)
|
||||
|
||||
# 3.4.0-alpha.9
|
||||
|
||||
2018-February-22
|
||||
@ -5,10 +453,17 @@
|
||||
#### Features
|
||||
|
||||
- Addon-storysource: story source in addon pane [#2885](https://github.com/storybooks/storybook/pull/2885)
|
||||
- Addon Storysource improvements [#3040](https://github.com/storybooks/storybook/pull/3040)
|
||||
- Add moduleMetdata decorator for supplying common Angular metadata [#2959](https://github.com/storybooks/storybook/pull/2959)
|
||||
- `Addon Storysource` Add auto scrolling to the selected story [#3025](https://github.com/storybooks/storybook/pull/3025)
|
||||
- Enable groupId option for knobs to be organized into sub panels. [#2661](https://github.com/storybooks/storybook/pull/2661)
|
||||
- Added beforeScreenshot config option to addons/storyshots, to allow testing of components with mounting animations [#2972](https://github.com/storybooks/storybook/pull/2972)
|
||||
- Add GitHub flavored markdown notes [#2946](https://github.com/storybooks/storybook/pull/2946)
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fix problem with RN on latest `master` build [#3045](https://github.com/storybooks/storybook/pull/3045)
|
||||
- Use @storybook/podda to fix npm engine version in podda [#3033](https://github.com/storybooks/storybook/pull/3033)
|
||||
|
||||
#### Documentation
|
||||
|
||||
@ -203,16 +658,6 @@
|
||||
|
||||
</details>
|
||||
|
||||
#### Other
|
||||
|
||||
- Addon Storysource improvements [#3040](https://github.com/storybooks/storybook/pull/3040)
|
||||
- #3029 use @storybook/podda to fix npm engine version in podda [#3033](https://github.com/storybooks/storybook/pull/3033)
|
||||
- Add moduleMetdata decorator for supplying common Angular metadata [#2959](https://github.com/storybooks/storybook/pull/2959)
|
||||
- `Addon Storysource` Add auto scrolling to the selected story [#3025](https://github.com/storybooks/storybook/pull/3025)
|
||||
- add GitHub flavored markdown notes [#2946](https://github.com/storybooks/storybook/pull/2946)
|
||||
- Added beforeScreenshot config option to addons/storyshots, to allow testing of components with mounting animations [#2972](https://github.com/storybooks/storybook/pull/2972)
|
||||
- Enable groupId option for knobs to be organized into sub panels. [#2661](https://github.com/storybooks/storybook/pull/2661)
|
||||
|
||||
# 3.3.14
|
||||
|
||||
2018-February-21
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
[](https://circleci.com/gh/storybooks/storybook)
|
||||
[](https://www.codefactor.io/repository/github/storybooks/storybook)
|
||||
[](https://snyk.io/test/github/storybooks/storybook/8f36abfd6697e58cd76df3526b52e4b9dc894847)
|
||||
[](https://snyk.io/test/github/storybooks/storybook)
|
||||
[](https://bettercodehub.com/results/storybooks/storybook) [](https://codecov.io/gh/storybooks/storybook)
|
||||
[](https://now-examples-slackin-rrirkqohko.now.sh/)
|
||||
[](#backers) [](#sponsors)
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-a11y",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "a11y addon for storybook",
|
||||
"keywords": [
|
||||
"a11y",
|
||||
@ -25,15 +25,15 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/components": "^3.4.0-alpha.9",
|
||||
"@storybook/components": "3.4.0-rc.3",
|
||||
"axe-core": "^2.6.1",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"glamor": "^2.20.40",
|
||||
"glamorous": "^4.11.6",
|
||||
"glamorous": "^4.12.1",
|
||||
"prop-types": "^15.6.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/react": "^3.4.0-alpha.9",
|
||||
"@storybook/react": "3.4.0-rc.3",
|
||||
"faker": "^4.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-actions",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Action Logger addon for storybook",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -20,11 +20,11 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/components": "^3.4.0-alpha.9",
|
||||
"@storybook/components": "3.4.0-rc.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"deep-equal": "^1.0.1",
|
||||
"glamor": "^2.20.40",
|
||||
"glamorous": "^4.11.6",
|
||||
"glamorous": "^4.12.1",
|
||||
"global": "^4.3.2",
|
||||
"make-error": "^1.3.4",
|
||||
"prop-types": "^15.6.1",
|
||||
|
@ -2,6 +2,7 @@ import reviver from './reviver';
|
||||
import { muteProperty } from './util';
|
||||
import { CYCLIC_KEY } from './';
|
||||
|
||||
// eslint-disable-next-line no-control-regex
|
||||
const pathReg = /^\$(?:\[(?:\d+|"(?:[^\\"\u0000-\u001f]|\\([\\"/bfnrt]|u[0-9a-zA-Z]{4}))*")])*$/;
|
||||
|
||||
export default function retrocycle(json) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-backgrounds",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "A storybook addon to show different backgrounds for your preview",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -89,6 +89,7 @@ export default class BackgroundPanel extends Component {
|
||||
this.channel.on('background-unset', () => {
|
||||
this.setState({ backgrounds: [] });
|
||||
api.setQueryParams({ background: null });
|
||||
this.updateIframe('none');
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-centered",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Storybook decorator to center components",
|
||||
"license": "MIT",
|
||||
"author": "Muhammed Thanish <mnmtanish@gmail.com>",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-events",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Add events to your Storybook stories.",
|
||||
"keywords": [
|
||||
"addon",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-graphql",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Storybook addon to display the GraphiQL IDE",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -25,11 +25,11 @@
|
||||
"babel-runtime": "^6.26.0",
|
||||
"global": "^4.3.2",
|
||||
"graphiql": "^0.11.11",
|
||||
"graphql": "^0.13.1",
|
||||
"graphql": "^0.13.2",
|
||||
"prop-types": "^15.6.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/react": "^3.4.0-alpha.9"
|
||||
"@storybook/react": "3.4.0-rc.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "*"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-info",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "A Storybook addon to show additional information for your stories.",
|
||||
"license": "MIT",
|
||||
"main": "dist/index.js",
|
||||
@ -15,11 +15,11 @@
|
||||
"storybook": "start-storybook -p 9010"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/client-logger": "^3.4.0-alpha.9",
|
||||
"@storybook/components": "^3.4.0-alpha.9",
|
||||
"@storybook/client-logger": "3.4.0-rc.3",
|
||||
"@storybook/components": "3.4.0-rc.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"glamor": "^2.20.40",
|
||||
"glamorous": "^4.11.6",
|
||||
"glamorous": "^4.12.1",
|
||||
"global": "^4.3.2",
|
||||
"marksy": "^6.0.3",
|
||||
"nested-object-assign": "^1.0.1",
|
||||
@ -28,8 +28,8 @@
|
||||
"util-deprecate": "^1.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/addon-actions": "^3.4.0-alpha.9",
|
||||
"@storybook/react": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-actions": "3.4.0-rc.3",
|
||||
"@storybook/react": "3.4.0-rc.3",
|
||||
"react-test-renderer": "^16.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-jest",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "React storybook addon that show component jest report",
|
||||
"keywords": [
|
||||
"addon",
|
||||
@ -25,10 +25,10 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/components": "^3.4.0-alpha.9",
|
||||
"@storybook/components": "3.4.0-rc.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"glamor": "^2.20.40",
|
||||
"glamorous": "^4.11.6",
|
||||
"glamorous": "^4.12.1",
|
||||
"global": "^4.3.2",
|
||||
"prop-types": "^15.6.1"
|
||||
},
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-knobs",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Storybook Addon Prop Editor Component",
|
||||
"license": "MIT",
|
||||
"main": "dist/index.js",
|
||||
@ -15,24 +15,24 @@
|
||||
"storybook": "start-storybook -p 9010"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/components": "^3.4.0-alpha.9",
|
||||
"@storybook/components": "3.4.0-rc.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"deep-equal": "^1.0.1",
|
||||
"global": "^4.3.2",
|
||||
"insert-css": "^2.0.0",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"moment": "^2.20.1",
|
||||
"moment": "^2.21.0",
|
||||
"prop-types": "^15.6.1",
|
||||
"react-color": "^2.11.4",
|
||||
"react-color": "^2.14.0",
|
||||
"react-datetime": "^2.14.0",
|
||||
"react-textarea-autosize": "^5.2.1",
|
||||
"util-deprecate": "^1.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/react": "^3.4.0-alpha.9",
|
||||
"@storybook/react": "3.4.0-rc.3",
|
||||
"raw-loader": "^0.5.1",
|
||||
"style-loader": "^0.20.2",
|
||||
"vue": "^2.5.13"
|
||||
"style-loader": "^0.20.3",
|
||||
"vue": "^2.5.16"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@storybook/addons": "^3.3.0",
|
||||
|
@ -2,17 +2,33 @@ import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
|
||||
const styles = {
|
||||
display: 'table-cell',
|
||||
boxSizing: 'border-box',
|
||||
verticalAlign: 'middle',
|
||||
height: '25px',
|
||||
width: '100%',
|
||||
outline: 'none',
|
||||
border: '1px solid #f7f4f4',
|
||||
borderRadius: 2,
|
||||
fontSize: 11,
|
||||
padding: '5px',
|
||||
color: '#444',
|
||||
common: {
|
||||
boxSizing: 'border-box',
|
||||
height: '25px',
|
||||
outline: 'none',
|
||||
border: '1px solid #f7f4f4',
|
||||
borderRadius: 2,
|
||||
fontSize: 11,
|
||||
padding: '5px',
|
||||
color: '#444',
|
||||
},
|
||||
normal: {
|
||||
display: 'table-cell',
|
||||
width: '100%',
|
||||
verticalAlign: 'middle',
|
||||
},
|
||||
range: {
|
||||
flexGrow: 1,
|
||||
},
|
||||
rangeLabel: {
|
||||
paddingLeft: 5,
|
||||
paddingRight: 5,
|
||||
},
|
||||
rangeWrapper: {
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
width: '100%',
|
||||
},
|
||||
};
|
||||
|
||||
class NumberType extends React.Component {
|
||||
@ -31,7 +47,7 @@ class NumberType extends React.Component {
|
||||
ref={c => {
|
||||
this.input = c;
|
||||
}}
|
||||
style={styles}
|
||||
style={{ ...styles.common, ...styles.normal }}
|
||||
value={knob.value}
|
||||
type="number"
|
||||
min={knob.min}
|
||||
@ -46,19 +62,23 @@ class NumberType extends React.Component {
|
||||
const { knob, onChange } = this.props;
|
||||
|
||||
return (
|
||||
<input
|
||||
id={knob.name}
|
||||
ref={c => {
|
||||
this.input = c;
|
||||
}}
|
||||
style={styles}
|
||||
value={knob.value}
|
||||
type="range"
|
||||
min={knob.min}
|
||||
max={knob.max}
|
||||
step={knob.step}
|
||||
onChange={() => onChange(parseFloat(this.input.value))}
|
||||
/>
|
||||
<div style={styles.rangeWrapper}>
|
||||
<span style={styles.rangeLabel}>{knob.min}</span>
|
||||
<input
|
||||
id={knob.name}
|
||||
ref={c => {
|
||||
this.input = c;
|
||||
}}
|
||||
style={{ ...styles.common, ...styles.range }}
|
||||
value={knob.value}
|
||||
type="range"
|
||||
min={knob.min}
|
||||
max={knob.max}
|
||||
step={knob.step}
|
||||
onChange={() => onChange(parseFloat(this.input.value))}
|
||||
/>
|
||||
<span style={styles.rangeLabel}>{`${knob.value} / ${knob.max}`}</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-links",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Story Links addon for storybook",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -22,13 +22,13 @@
|
||||
"storybook": "start-storybook -p 9001"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/components": "^3.4.0-alpha.9",
|
||||
"@storybook/components": "3.4.0-rc.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"global": "^4.3.2",
|
||||
"prop-types": "^15.6.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/react": "^3.4.0-alpha.9",
|
||||
"@storybook/react": "3.4.0-rc.3",
|
||||
"enzyme": "^3.3.0",
|
||||
"react": "^16.1.0",
|
||||
"react-dom": "^16.1.0"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-notes",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Write notes for your Storybook stories.",
|
||||
"keywords": [
|
||||
"addon",
|
||||
@ -26,13 +26,11 @@
|
||||
"util-deprecate": "^1.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/react": "^3.4.0-alpha.9"
|
||||
"@storybook/react": "3.4.0-rc.3",
|
||||
"@types/react": "^16.0.40"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@storybook/addons": "^3.3.0",
|
||||
"react": "*"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@types/react": "^16.0.20"
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-options",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Options addon for storybook",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -23,7 +23,7 @@
|
||||
"babel-runtime": "^6.26.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/react": "^3.4.0-alpha.9"
|
||||
"@storybook/react": "3.4.0-rc.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@storybook/addons": "^3.3.0",
|
||||
|
@ -29,8 +29,12 @@ npm install --save-dev @storybook/addon-storyshots
|
||||
|
||||
Usually, you might already have completed this step. If not, here are some resources for you.
|
||||
|
||||
- If you are using Create React App, it's already configured for Jest. You just need to create a filename with the extension `.test.js`.
|
||||
- Otherwise check this Egghead [lesson](https://egghead.io/lessons/javascript-test-javascript-with-jest).
|
||||
If you are using Create React App, it's already configured for Jest. You just need to create a filename with the extension `.test.js`.
|
||||
|
||||
Otherwise check these links:
|
||||
|
||||
- [Egghead lesson](https://egghead.io/lessons/javascript-test-javascript-with-jest). ***paid content***
|
||||
- [Official Docs](https://facebook.github.io/jest/docs/en/getting-started.html)
|
||||
|
||||
> Note: If you use React 16, you'll need to follow [these additional instructions](https://github.com/facebook/react/issues/9102#issuecomment-283873039).
|
||||
|
||||
@ -210,6 +214,22 @@ initStoryshots({suite: 'Image storyshots', test: imageSnapshot({storybookUrl: 'h
|
||||
|
||||
`beforeScreenshot` receives the [Puppeteer page instance](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-page) and 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. `beforeScreenshot` is part of the promise chain and is called after the browser navigation is completed but before the screenshot is taken. It allows for triggering events on the page elements and delaying the screenshot and can be used avoid regressions due to mounting animations.
|
||||
|
||||
### Specifying options to _screenshot()_
|
||||
|
||||
You might use `getScreenshotOptions` to specify options for screenshot. Will be passed to [Puppeteer .screenshot() fn](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagescreenshotoptions)
|
||||
|
||||
```js
|
||||
import initStoryshots, { imageSnapshot } from '@storybook/addon-storyshots';
|
||||
const getScreenshotOptions = ({context, url}) {
|
||||
return {
|
||||
fullPage: false // Do not take the full page screenshot. Default is 'true' in Storyshots.
|
||||
}
|
||||
}
|
||||
initStoryshots({suite: 'Image storyshots', test: imageSnapshot({storybookUrl: 'http://localhost:6006', getScreenshotOptions})});
|
||||
```
|
||||
|
||||
`getScreenshotOptions` 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.
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-storyshots",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "StoryShots is a Jest Snapshot Testing Addon for Storybook.",
|
||||
"license": "MIT",
|
||||
"main": "dist/index.js",
|
||||
@ -16,27 +16,27 @@
|
||||
"storybook": "start-storybook -p 6006"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/channels": "^3.4.0-alpha.9",
|
||||
"@storybook/node-logger": "^3.4.0-alpha.9",
|
||||
"@storybook/channels": "3.4.0-rc.3",
|
||||
"@storybook/node-logger": "3.4.0-rc.3",
|
||||
"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",
|
||||
"puppeteer": "^1.1.1",
|
||||
"jest-image-snapshot": "^2.4.0",
|
||||
"jest-specific-snapshot": "^0.5.0",
|
||||
"puppeteer": "^1.2.0",
|
||||
"read-pkg-up": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/addon-actions": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-links": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/react": "^3.4.0-alpha.9",
|
||||
"enzyme-to-json": "^3.3.1",
|
||||
"@storybook/addon-actions": "3.4.0-rc.3",
|
||||
"@storybook/addon-links": "3.4.0-rc.3",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"@storybook/react": "3.4.0-rc.3",
|
||||
"enzyme-to-json": "^3.3.3",
|
||||
"react": "^16.1.0",
|
||||
"react-dom": "^16.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"babel-core": "^6.26.0 || ^7.0.0-0"
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
import fs from 'fs';
|
||||
import glob from 'glob';
|
||||
import global, { describe, it, beforeEach, afterEach } from 'global';
|
||||
import global, { describe, it } from 'global';
|
||||
import addons from '@storybook/addons';
|
||||
import loadFramework from './frameworkLoader';
|
||||
import createChannel from './storybook-channel-mock';
|
||||
@ -27,6 +27,8 @@ export {
|
||||
imageSnapshot,
|
||||
};
|
||||
|
||||
const methods = ['beforeAll', 'beforeEach', 'afterEach', 'afterAll'];
|
||||
|
||||
export default function testStorySnapshots(options = {}) {
|
||||
if (typeof describe !== 'function') {
|
||||
throw new Error('testStorySnapshots is intended only to be used inside jest');
|
||||
@ -53,6 +55,12 @@ export default function testStorySnapshots(options = {}) {
|
||||
|
||||
const testMethod = options.test || snapshotWithOptions({ options: snapshotOptions });
|
||||
|
||||
methods.forEach(method => {
|
||||
if (typeof testMethod[method] === 'function') {
|
||||
global[method](testMethod[method]);
|
||||
}
|
||||
});
|
||||
|
||||
// eslint-disable-next-line
|
||||
for (const group of stories) {
|
||||
const { fileName, kind } = group;
|
||||
@ -63,20 +71,6 @@ export default function testStorySnapshots(options = {}) {
|
||||
}
|
||||
|
||||
describe(suite, () => {
|
||||
beforeEach(() => {
|
||||
if (typeof testMethod.beforeEach === 'function') {
|
||||
return testMethod.beforeEach();
|
||||
}
|
||||
return Promise.resolve();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
if (typeof testMethod.afterEach === 'function') {
|
||||
return testMethod.afterEach();
|
||||
}
|
||||
return Promise.resolve();
|
||||
});
|
||||
|
||||
describe(kind, () => {
|
||||
// eslint-disable-next-line
|
||||
for (const story of group.stories) {
|
||||
|
@ -4,10 +4,16 @@ import { logger } from '@storybook/node-logger';
|
||||
|
||||
expect.extend({ toMatchImageSnapshot });
|
||||
|
||||
// We consider taking the full page is a reasonnable default.
|
||||
const defaultScreenshotOptions = () => ({ fullPage: true });
|
||||
|
||||
const noop = () => {};
|
||||
|
||||
export const imageSnapshot = ({
|
||||
storybookUrl = 'http://localhost:6006',
|
||||
getMatchOptions = () => {},
|
||||
beforeScreenshot = () => {},
|
||||
getMatchOptions = noop,
|
||||
getScreenshotOptions = defaultScreenshotOptions,
|
||||
beforeScreenshot = noop,
|
||||
}) => {
|
||||
let browser; // holds ref to browser. (ie. Chrome)
|
||||
let page; // Hold ref to the page to screenshot.
|
||||
@ -36,7 +42,7 @@ export const imageSnapshot = ({
|
||||
|
||||
expect.assertions(1);
|
||||
return page
|
||||
.goto(url)
|
||||
.goto(url, { waitUntil: 'networkidle0' })
|
||||
.catch(e => {
|
||||
logger.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.`,
|
||||
@ -45,14 +51,13 @@ export const imageSnapshot = ({
|
||||
throw e;
|
||||
})
|
||||
.then(() => beforeScreenshot(page, { context, url }))
|
||||
.then(() =>
|
||||
page.screenshot().then(image => {
|
||||
expect(image).toMatchImageSnapshot(getMatchOptions({ context, url }));
|
||||
})
|
||||
);
|
||||
.then(() => page.screenshot(getScreenshotOptions({ context, url })))
|
||||
.then(image => {
|
||||
expect(image).toMatchImageSnapshot(getMatchOptions({ context, url }));
|
||||
});
|
||||
};
|
||||
|
||||
testFn.beforeEach = () =>
|
||||
testFn.beforeAll = () =>
|
||||
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'] })
|
||||
@ -64,7 +69,7 @@ export const imageSnapshot = ({
|
||||
page = p;
|
||||
});
|
||||
|
||||
testFn.afterEach = () => browser.close();
|
||||
testFn.afterAll = () => browser.close();
|
||||
|
||||
return testFn;
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/addon-storysource",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Stories addon for storybook",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
@ -20,16 +20,17 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"acorn": "^5.5.0",
|
||||
"@storybook/components": "3.4.0-rc.3",
|
||||
"acorn": "^5.5.3",
|
||||
"acorn-es7": "^0.1.0",
|
||||
"acorn-jsx": "^4.1.1",
|
||||
"acorn-stage3": "^0.6.0",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"estraverse": "^4.2.0",
|
||||
"loader-utils": "^1.1.0",
|
||||
"prettier": "^1.11.0",
|
||||
"prettier": "^1.11.1",
|
||||
"prop-types": "^15.6.1",
|
||||
"react-syntax-highlighter": "^7.0.1"
|
||||
"react-syntax-highlighter": "^7.0.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@storybook/addons": "^3.3.0",
|
||||
|
@ -1,5 +1,6 @@
|
||||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { RoutedLink } from '@storybook/components';
|
||||
import jsx from 'react-syntax-highlighter/languages/prism/jsx';
|
||||
import { darcula } from 'react-syntax-highlighter/styles/prism';
|
||||
import SyntaxHighlighter, { registerLanguage } from 'react-syntax-highlighter/prism-light';
|
||||
@ -9,7 +10,12 @@ import { EVENT_ID } from './';
|
||||
registerLanguage('jsx', jsx);
|
||||
|
||||
const styles = {
|
||||
selections: {
|
||||
story: {
|
||||
display: 'block',
|
||||
textDecoration: 'none',
|
||||
color: darcula['code[class*="language-"]'].color,
|
||||
},
|
||||
selectedStory: {
|
||||
backgroundColor: 'rgba(255, 242, 60, 0.2)',
|
||||
},
|
||||
panel: {
|
||||
@ -18,6 +24,23 @@ const styles = {
|
||||
};
|
||||
|
||||
export default class StoryPanel extends Component {
|
||||
static areLocationsEqual(a, b) {
|
||||
return (
|
||||
a.startLoc.line === b.startLoc.line &&
|
||||
a.startLoc.col === b.startLoc.col &&
|
||||
a.endLoc.line === b.endLoc.line &&
|
||||
a.endLoc.col === b.endLoc.col
|
||||
);
|
||||
}
|
||||
|
||||
static getLocationKeys(locationsMap) {
|
||||
return locationsMap
|
||||
? Array.from(Object.keys(locationsMap)).sort(
|
||||
(key1, key2) => locationsMap[key1].startLoc.line - locationsMap[key2].startLoc.line
|
||||
)
|
||||
: [];
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
@ -25,15 +48,20 @@ export default class StoryPanel extends Component {
|
||||
|
||||
const { channel } = props;
|
||||
|
||||
channel.on(EVENT_ID, ({ source, location }) => {
|
||||
channel.on(EVENT_ID, ({ source, currentLocation, locationsMap }) => {
|
||||
const locationsKeys = StoryPanel.getLocationKeys(locationsMap);
|
||||
|
||||
this.setState({
|
||||
source,
|
||||
location,
|
||||
currentLocation,
|
||||
locationsMap,
|
||||
locationsKeys,
|
||||
});
|
||||
});
|
||||
|
||||
this.setSelectedStoryRef = this.setSelectedStoryRef.bind(this);
|
||||
this.lineRenderer = this.lineRenderer.bind(this);
|
||||
this.clickOnStory = this.clickOnStory.bind(this);
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
@ -46,6 +74,14 @@ export default class StoryPanel extends Component {
|
||||
this.selectedStoryRef = ref;
|
||||
}
|
||||
|
||||
clickOnStory(kind, story) {
|
||||
const { api } = this.props;
|
||||
|
||||
if (kind && story) {
|
||||
api.selectStory(kind, story);
|
||||
}
|
||||
}
|
||||
|
||||
createPart(rows, stylesheet, useInlineStyles) {
|
||||
return rows.map((node, i) =>
|
||||
createElement({
|
||||
@ -57,29 +93,75 @@ export default class StoryPanel extends Component {
|
||||
);
|
||||
}
|
||||
|
||||
lineRenderer({ rows, stylesheet, useInlineStyles }) {
|
||||
const { location } = this.state;
|
||||
createStoryPart(rows, stylesheet, useInlineStyles, location, kindStory) {
|
||||
const { currentLocation } = this.state;
|
||||
const first = location.startLoc.line - 1;
|
||||
const last = location.endLoc.line;
|
||||
|
||||
if (location) {
|
||||
const first = location.startLoc.line - 1;
|
||||
const last = location.endLoc.line;
|
||||
|
||||
const start = this.createPart(rows.slice(0, first), stylesheet, useInlineStyles);
|
||||
const selected = this.createPart(rows.slice(first, last), stylesheet, useInlineStyles);
|
||||
const end = this.createPart(rows.slice(last), stylesheet, useInlineStyles);
|
||||
const storyRows = rows.slice(first, last);
|
||||
const story = this.createPart(storyRows, stylesheet, useInlineStyles);
|
||||
const storyKey = `${first}-${last}`;
|
||||
|
||||
if (StoryPanel.areLocationsEqual(location, currentLocation)) {
|
||||
return (
|
||||
<span>
|
||||
{start}
|
||||
<div ref={this.setSelectedStoryRef} style={styles.selections}>
|
||||
{selected}
|
||||
</div>
|
||||
{end}
|
||||
</span>
|
||||
<div key={storyKey} ref={this.setSelectedStoryRef} style={styles.selectedStory}>
|
||||
{story}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return this.createPart(rows, stylesheet, useInlineStyles);
|
||||
const [selectedKind, selectedStory] = kindStory.split('@');
|
||||
const url = `/?selectedKind=${selectedKind}&selectedStory=${selectedStory}`;
|
||||
|
||||
return (
|
||||
<RoutedLink
|
||||
href={url}
|
||||
key={storyKey}
|
||||
onClick={() => this.clickOnStory(selectedKind, selectedStory)}
|
||||
style={styles.story}
|
||||
>
|
||||
{story}
|
||||
</RoutedLink>
|
||||
);
|
||||
}
|
||||
|
||||
createParts(rows, stylesheet, useInlineStyles) {
|
||||
const { locationsMap, locationsKeys } = this.state;
|
||||
|
||||
const parts = [];
|
||||
let lastRow = 0;
|
||||
|
||||
locationsKeys.forEach(key => {
|
||||
const location = locationsMap[key];
|
||||
const first = location.startLoc.line - 1;
|
||||
const last = location.endLoc.line;
|
||||
|
||||
const start = this.createPart(rows.slice(lastRow, first), stylesheet, useInlineStyles);
|
||||
const storyPart = this.createStoryPart(rows, stylesheet, useInlineStyles, location, key);
|
||||
|
||||
parts.push(start);
|
||||
parts.push(storyPart);
|
||||
|
||||
lastRow = last;
|
||||
});
|
||||
|
||||
const lastPart = this.createPart(rows.slice(lastRow), stylesheet, useInlineStyles);
|
||||
|
||||
parts.push(lastPart);
|
||||
|
||||
return parts;
|
||||
}
|
||||
|
||||
lineRenderer({ rows, stylesheet, useInlineStyles }) {
|
||||
const { locationsMap, locationsKeys } = this.state;
|
||||
|
||||
if (!locationsMap || !locationsKeys.length) {
|
||||
return this.createPart(rows, stylesheet, useInlineStyles);
|
||||
}
|
||||
|
||||
const parts = this.createParts(rows, stylesheet, useInlineStyles);
|
||||
|
||||
return <span>{parts.map(part => part)}</span>;
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -98,6 +180,9 @@ export default class StoryPanel extends Component {
|
||||
}
|
||||
|
||||
StoryPanel.propTypes = {
|
||||
api: PropTypes.shape({
|
||||
selectStory: PropTypes.func.isRequired,
|
||||
}).isRequired,
|
||||
channel: PropTypes.shape({
|
||||
emit: PropTypes.func,
|
||||
on: PropTypes.func,
|
||||
|
@ -4,11 +4,11 @@ import StoryPanel from './StoryPanel';
|
||||
import { ADDON_ID, PANEL_ID } from './';
|
||||
|
||||
export function register() {
|
||||
addons.register(ADDON_ID, () => {
|
||||
addons.register(ADDON_ID, api => {
|
||||
const channel = addons.getChannel();
|
||||
addons.addPanel(PANEL_ID, {
|
||||
title: 'Story',
|
||||
render: () => <StoryPanel channel={channel} />,
|
||||
render: () => <StoryPanel channel={channel} api={api} />,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -7,11 +7,12 @@ function getLocation(context, locationsMap) {
|
||||
|
||||
function setStorySource(context, source, locationsMap) {
|
||||
const channel = addons.getChannel();
|
||||
const location = getLocation(context, locationsMap);
|
||||
const currentLocation = getLocation(context, locationsMap);
|
||||
|
||||
channel.emit(EVENT_ID, {
|
||||
source,
|
||||
location,
|
||||
currentLocation,
|
||||
locationsMap,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Storybook Viewport Addon
|
||||
|
||||
Storybook Viewport Addon allows your stories to be displayed in different sizes and layouts in [Storybook](https://storybookjs.org). This helps build responsive components inside of Storybook.
|
||||
Storybook Viewport Addon allows your stories to be displayed in different sizes and layouts in [Storybook](https://storybook.js.org). This helps build responsive components inside of Storybook.
|
||||
|
||||
[Framework Support](https://github.com/storybooks/storybook/blob/master/ADDONS_SUPPORT.md)
|
||||
|
||||
@ -16,7 +16,26 @@ or with yarn:
|
||||
|
||||
yarn add -D @storybook/addon-viewport
|
||||
|
||||
## Basic Usage
|
||||
|
||||
## Configuration
|
||||
|
||||
Import and use the `configure` function in your `config.js` file.
|
||||
|
||||
```js
|
||||
import { configure } from '@storybook/addon-viewport';
|
||||
```
|
||||
|
||||
### defaultViewport : String
|
||||
----
|
||||
Setting this property to, let say `iphone6`, will make `iPhone 6` the default device/viewport for all stories. Default is `'responsive'` which fills 100% of the preview area.
|
||||
|
||||
### viewports : Object
|
||||
----
|
||||
A key-value pair of viewport's key and properties for all viewports to be displayed. Default is [`INITIAL_VIEWPORTS`](src/shared/index.js)
|
||||
|
||||
## Examples
|
||||
|
||||
### Basic Usage
|
||||
|
||||
Simply import the Storybook Viewport Addon in the `addons.js` file in your `.storybook` directory.
|
||||
|
||||
@ -26,12 +45,78 @@ import '@storybook/addon-viewport/register'
|
||||
|
||||
This will register the Viewport Addon to Storybook and will show up in the action area.
|
||||
|
||||
## FAQ
|
||||
|
||||
#### How do I add a new device?
|
||||
### Use Custom Set of Devices
|
||||
|
||||
Unfortunately, this is currently not supported.
|
||||
This will replace all previous devices with `Kindle Fire 2` and `Kindle Fire HD` by simply calling `configure` with the two devices as `viewports` in `config.js` file in your `.storybook` directory.
|
||||
|
||||
#### How can I make a custom screen size?
|
||||
```js
|
||||
import { configure } from '@storybook/addon-viewport';
|
||||
|
||||
Unfortunately, this is currently not supported.
|
||||
const newViewports = {
|
||||
kindleFire2: {
|
||||
name: 'Kindle Fire 2',
|
||||
styles: {
|
||||
width: '600px',
|
||||
height: '963px'
|
||||
}
|
||||
},
|
||||
kindleFireHD: {
|
||||
name: 'Kindle Fire HD',
|
||||
styles: {
|
||||
width: '533px',
|
||||
height: '801px'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
configure({
|
||||
viewports: newViewports
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
### Add New Device
|
||||
|
||||
This will add both `Kindle Fire 2` and `Kindle Fire HD` to the list of devices. This is acheived by making use of the exported [`INITIAL_VIEWPORTS`](src/shared/index.js) property, by merging it with the new viewports and pass the result as `viewports` to `configure` function
|
||||
|
||||
```js
|
||||
import { configure, INITIAL_VIEWPORTS } from '@storybook/addon-viewport';
|
||||
|
||||
const newViewports = {
|
||||
kindleFire2: {
|
||||
name: 'Kindle Fire 2',
|
||||
styles: {
|
||||
width: '600px',
|
||||
height: '963px'
|
||||
}
|
||||
},
|
||||
kindleFireHD: {
|
||||
name: 'Kindle Fire HD',
|
||||
styles: {
|
||||
width: '533px',
|
||||
height: '801px'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
configure({
|
||||
viewports: {
|
||||
...INITIAL_VIEWPORTS,
|
||||
...newViewports
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
### Change The Default Viewport
|
||||
|
||||
This will make `iPhone 6` the default viewport for all stories.
|
||||
|
||||
```js
|
||||
import { configure } from '@storybook/addon-viewport';
|
||||
|
||||
configure({
|
||||
defaultViewport: 'iphone6'
|
||||
});
|
||||
```
|
||||
|
@ -1,17 +1,17 @@
|
||||
{
|
||||
"name": "@storybook/addon-viewport",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Storybook addon to change the viewport size to mobile",
|
||||
"keywords": [
|
||||
"storybook"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "register.js",
|
||||
"main": "preview.js",
|
||||
"scripts": {
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/components": "^3.4.0-alpha.9",
|
||||
"@storybook/components": "3.4.0-rc.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"global": "^4.3.2",
|
||||
"prop-types": "^15.6.1"
|
||||
|
7
addons/viewport/preview.js
Normal file
@ -0,0 +1,7 @@
|
||||
const preview = require('./dist/preview');
|
||||
|
||||
exports.configure = preview.configure;
|
||||
exports.DEFAULT_VIEWPORT = preview.DEFAULT_VIEWPORT;
|
||||
exports.INITIAL_VIEWPORTS = preview.INITIAL_VIEWPORTS;
|
||||
exports.withViewport = preview.withViewport;
|
||||
exports.Viewport = preview.Viewport;
|
@ -1,119 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { baseFonts } from '@storybook/components';
|
||||
import { document } from 'global';
|
||||
|
||||
import { viewports, defaultViewport, resetViewport } from './viewportInfo';
|
||||
import { SelectViewport } from './SelectViewport';
|
||||
import { RotateViewport } from './RotateViewport';
|
||||
|
||||
import * as styles from './styles';
|
||||
|
||||
const storybookIframe = 'storybook-preview-iframe';
|
||||
const containerStyles = {
|
||||
padding: 15,
|
||||
width: '100%',
|
||||
boxSizing: 'border-box',
|
||||
...baseFonts,
|
||||
};
|
||||
|
||||
export class Panel extends Component {
|
||||
static propTypes = {
|
||||
channel: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this.state = {
|
||||
viewport: defaultViewport,
|
||||
isLandscape: false,
|
||||
};
|
||||
|
||||
this.props.channel.on('addon:viewport:update', this.changeViewport);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.iframe = document.getElementById(storybookIframe);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.props.channel.removeListener('addon:viewport:update', this.changeViewport);
|
||||
}
|
||||
|
||||
iframe = undefined;
|
||||
|
||||
changeViewport = viewport => {
|
||||
const { viewport: previousViewport } = this.state;
|
||||
|
||||
if (previousViewport !== viewport) {
|
||||
this.setState(
|
||||
{
|
||||
viewport,
|
||||
isLandscape: false,
|
||||
},
|
||||
this.updateIframe
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
toggleLandscape = () => {
|
||||
const { isLandscape } = this.state;
|
||||
|
||||
this.setState({ isLandscape: !isLandscape }, this.updateIframe);
|
||||
};
|
||||
|
||||
updateIframe = () => {
|
||||
const { viewport: viewportKey, isLandscape } = this.state;
|
||||
const viewport = viewports[viewportKey] || resetViewport;
|
||||
|
||||
if (!this.iframe) {
|
||||
throw new Error('Cannot find Storybook iframe');
|
||||
}
|
||||
|
||||
Object.keys(viewport.styles).forEach(prop => {
|
||||
this.iframe.style[prop] = viewport.styles[prop];
|
||||
});
|
||||
|
||||
if (isLandscape) {
|
||||
this.iframe.style.height = viewport.styles.width;
|
||||
this.iframe.style.width = viewport.styles.height;
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const { isLandscape, viewport } = this.state;
|
||||
|
||||
const disableDefault = viewport === defaultViewport;
|
||||
const disabledStyles = disableDefault ? styles.disabled : {};
|
||||
|
||||
const buttonStyles = {
|
||||
...styles.button,
|
||||
...disabledStyles,
|
||||
marginTop: 30,
|
||||
padding: 20,
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={containerStyles}>
|
||||
<SelectViewport
|
||||
activeViewport={viewport}
|
||||
onChange={e => this.changeViewport(e.target.value)}
|
||||
/>
|
||||
|
||||
<RotateViewport
|
||||
onClick={this.toggleLandscape}
|
||||
disabled={disableDefault}
|
||||
active={isLandscape}
|
||||
/>
|
||||
|
||||
<button
|
||||
style={buttonStyles}
|
||||
onClick={() => this.changeViewport(defaultViewport)}
|
||||
disabled={disableDefault}
|
||||
>
|
||||
Reset Viewport
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
import { viewports, resetViewport, configuredStyles } from '../viewportInfo';
|
||||
|
||||
describe('Viewport/constants', () => {
|
||||
describe('viewports', () => {
|
||||
it('includes the default styles on every custom viewport', () => {
|
||||
const keys = Object.keys(viewports);
|
||||
|
||||
keys.forEach(key => {
|
||||
expect(viewports[key].styles).toEqual(expect.objectContaining(configuredStyles));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('resetViewport', () => {
|
||||
it('does not include the styles for a responsive iframe', () => {
|
||||
expect(resetViewport).not.toEqual(expect.objectContaining(configuredStyles));
|
||||
});
|
||||
});
|
||||
});
|
204
addons/viewport/src/manager/components/Panel.js
Normal file
@ -0,0 +1,204 @@
|
||||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { baseFonts } from '@storybook/components';
|
||||
import { document } from 'global';
|
||||
|
||||
import { resetViewport, viewportsTransformer } from './viewportInfo';
|
||||
import { SelectViewport } from './SelectViewport';
|
||||
import { RotateViewport } from './RotateViewport';
|
||||
import {
|
||||
SET_STORY_DEFAULT_VIEWPORT_EVENT_ID,
|
||||
UNSET_STORY_DEFAULT_VIEWPORT_EVENT_ID,
|
||||
CONFIGURE_VIEWPORT_EVENT_ID,
|
||||
UPDATE_VIEWPORT_EVENT_ID,
|
||||
INITIAL_VIEWPORTS,
|
||||
DEFAULT_VIEWPORT,
|
||||
} from '../../shared';
|
||||
|
||||
import * as styles from './styles';
|
||||
|
||||
const storybookIframe = 'storybook-preview-iframe';
|
||||
const containerStyles = {
|
||||
padding: 15,
|
||||
width: '100%',
|
||||
boxSizing: 'border-box',
|
||||
...baseFonts,
|
||||
};
|
||||
|
||||
const getDefaultViewport = (viewports, candidateViewport) =>
|
||||
candidateViewport in viewports ? candidateViewport : Object.keys(viewports)[0];
|
||||
|
||||
const getViewports = viewports =>
|
||||
Object.keys(viewports).length > 0 ? viewports : INITIAL_VIEWPORTS;
|
||||
|
||||
export class Panel extends Component {
|
||||
static propTypes = {
|
||||
channel: PropTypes.shape({}).isRequired,
|
||||
api: PropTypes.shape({}).isRequired,
|
||||
};
|
||||
|
||||
static defaultOptions = {
|
||||
viewports: INITIAL_VIEWPORTS,
|
||||
defaultViewport: DEFAULT_VIEWPORT,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this.state = {
|
||||
viewport: DEFAULT_VIEWPORT,
|
||||
defaultViewport: DEFAULT_VIEWPORT,
|
||||
viewports: viewportsTransformer(INITIAL_VIEWPORTS),
|
||||
isLandscape: false,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { channel, api } = this.props;
|
||||
|
||||
this.iframe = document.getElementById(storybookIframe);
|
||||
|
||||
channel.on(UPDATE_VIEWPORT_EVENT_ID, this.changeViewport);
|
||||
channel.on(CONFIGURE_VIEWPORT_EVENT_ID, this.configure);
|
||||
channel.on(SET_STORY_DEFAULT_VIEWPORT_EVENT_ID, this.setStoryDefaultViewport);
|
||||
channel.on(UNSET_STORY_DEFAULT_VIEWPORT_EVENT_ID, this.unsetStoryDefaultViewport);
|
||||
|
||||
this.unsubscribeFromOnStory = api.onStory(() => {
|
||||
this.changeViewport(this.state.defaultViewport);
|
||||
});
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
const { channel } = this.props;
|
||||
|
||||
if (this.unsubscribeFromOnStory) {
|
||||
this.unsubscribeFromOnStory();
|
||||
}
|
||||
|
||||
channel.removeListener(UPDATE_VIEWPORT_EVENT_ID, this.changeViewport);
|
||||
channel.removeListener(CONFIGURE_VIEWPORT_EVENT_ID, this.configure);
|
||||
channel.removeListener(SET_STORY_DEFAULT_VIEWPORT_EVENT_ID, this.setStoryDefaultViewport);
|
||||
channel.removeListener(UNSET_STORY_DEFAULT_VIEWPORT_EVENT_ID, this.unsetStoryDefaultViewport);
|
||||
}
|
||||
|
||||
setStoryDefaultViewport = viewport => {
|
||||
const { viewports } = this.state;
|
||||
const defaultViewport = getDefaultViewport(viewports, viewport);
|
||||
|
||||
this.setState(
|
||||
{
|
||||
storyDefaultViewport: defaultViewport,
|
||||
viewport: defaultViewport,
|
||||
},
|
||||
this.updateIframe
|
||||
);
|
||||
};
|
||||
|
||||
unsetStoryDefaultViewport = () => {
|
||||
this.setState(
|
||||
{
|
||||
storyDefaultViewport: undefined,
|
||||
viewport: this.state.defaultViewport,
|
||||
},
|
||||
this.updateIframe
|
||||
);
|
||||
};
|
||||
|
||||
configure = (options = Panel.defaultOptions) => {
|
||||
const viewports = getViewports(options.viewports);
|
||||
const defaultViewport = getDefaultViewport(viewports, options.defaultViewport);
|
||||
|
||||
this.setState(
|
||||
{
|
||||
defaultViewport,
|
||||
viewport: defaultViewport,
|
||||
viewports: viewportsTransformer(viewports),
|
||||
},
|
||||
this.updateIframe
|
||||
);
|
||||
};
|
||||
|
||||
iframe = undefined;
|
||||
|
||||
changeViewport = viewport => {
|
||||
const { viewport: previousViewport } = this.state;
|
||||
|
||||
if (previousViewport !== viewport) {
|
||||
this.setState(
|
||||
{
|
||||
viewport,
|
||||
isLandscape: false,
|
||||
},
|
||||
this.updateIframe
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
toggleLandscape = () => {
|
||||
const { isLandscape } = this.state;
|
||||
|
||||
this.setState({ isLandscape: !isLandscape }, this.updateIframe);
|
||||
};
|
||||
|
||||
updateIframe = () => {
|
||||
const { viewports, viewport: viewportKey, isLandscape } = this.state;
|
||||
const viewport = viewports[viewportKey] || resetViewport;
|
||||
|
||||
if (!this.iframe) {
|
||||
throw new Error('Cannot find Storybook iframe');
|
||||
}
|
||||
|
||||
Object.keys(viewport.styles).forEach(prop => {
|
||||
this.iframe.style[prop] = viewport.styles[prop];
|
||||
});
|
||||
|
||||
if (isLandscape) {
|
||||
this.iframe.style.height = viewport.styles.width;
|
||||
this.iframe.style.width = viewport.styles.height;
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
isLandscape,
|
||||
defaultViewport,
|
||||
storyDefaultViewport = defaultViewport,
|
||||
viewport,
|
||||
viewports,
|
||||
} = this.state;
|
||||
|
||||
const disableDefault = viewport === storyDefaultViewport;
|
||||
const disabledStyles = disableDefault ? styles.disabled : {};
|
||||
|
||||
const buttonStyles = {
|
||||
...styles.button,
|
||||
...disabledStyles,
|
||||
marginTop: 30,
|
||||
padding: 20,
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={containerStyles}>
|
||||
<SelectViewport
|
||||
viewports={viewports}
|
||||
defaultViewport={storyDefaultViewport}
|
||||
activeViewport={viewport}
|
||||
onChange={e => this.changeViewport(e.target.value)}
|
||||
/>
|
||||
|
||||
<RotateViewport
|
||||
onClick={this.toggleLandscape}
|
||||
disabled={disableDefault}
|
||||
active={isLandscape}
|
||||
/>
|
||||
|
||||
<button
|
||||
style={buttonStyles}
|
||||
onClick={() => this.changeViewport(storyDefaultViewport)}
|
||||
disabled={disableDefault}
|
||||
>
|
||||
Reset Viewport
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
@ -1,22 +1,23 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import { viewports, defaultViewport } from './viewportInfo';
|
||||
import * as styles from './styles';
|
||||
|
||||
export function SelectViewport({ activeViewport, onChange }) {
|
||||
export function SelectViewport({ viewports, defaultViewport, activeViewport, onChange }) {
|
||||
return (
|
||||
<div style={styles.row}>
|
||||
<label htmlFor="device" style={styles.label}>
|
||||
Device
|
||||
</label>
|
||||
<select style={styles.action} id="device" value={activeViewport} onChange={onChange}>
|
||||
<option value={defaultViewport}>Default</option>
|
||||
{Object.keys(viewports).map(key => (
|
||||
<option value={key} key={key}>
|
||||
{viewports[key].name}
|
||||
</option>
|
||||
))}
|
||||
{Object.keys(viewports).map(key => {
|
||||
const { name } = viewports[key];
|
||||
return (
|
||||
<option value={key} key={key}>
|
||||
{key === defaultViewport ? `(Default) ${name}` : name}
|
||||
</option>
|
||||
);
|
||||
})}
|
||||
</select>
|
||||
</div>
|
||||
);
|
||||
@ -25,4 +26,6 @@ export function SelectViewport({ activeViewport, onChange }) {
|
||||
SelectViewport.propTypes = {
|
||||
onChange: PropTypes.func.isRequired,
|
||||
activeViewport: PropTypes.string.isRequired,
|
||||
viewports: PropTypes.shape({}).isRequired,
|
||||
defaultViewport: PropTypes.string.isRequired,
|
||||
};
|
@ -3,8 +3,11 @@ import { shallow } from 'enzyme';
|
||||
import { document } from 'global';
|
||||
|
||||
import { Panel } from '../Panel';
|
||||
import { viewports, defaultViewport, resetViewport } from '../viewportInfo';
|
||||
import { resetViewport, viewportsTransformer } from '../viewportInfo';
|
||||
import * as styles from '../styles';
|
||||
import { DEFAULT_VIEWPORT, INITIAL_VIEWPORTS } from '../../../shared';
|
||||
|
||||
const initialViewportAt = index => Object.keys(INITIAL_VIEWPORTS)[index];
|
||||
|
||||
describe('Viewport/Panel', () => {
|
||||
const props = {
|
||||
@ -12,6 +15,9 @@ describe('Viewport/Panel', () => {
|
||||
on: jest.fn(),
|
||||
removeListener: jest.fn(),
|
||||
},
|
||||
api: {
|
||||
onStory: jest.fn(),
|
||||
},
|
||||
};
|
||||
|
||||
let subject;
|
||||
@ -23,17 +29,12 @@ describe('Viewport/Panel', () => {
|
||||
describe('construct', () => {
|
||||
it('creates the initial state', () => {
|
||||
expect(subject.instance().state).toEqual({
|
||||
viewport: defaultViewport,
|
||||
viewport: DEFAULT_VIEWPORT,
|
||||
defaultViewport: DEFAULT_VIEWPORT,
|
||||
viewports: viewportsTransformer(INITIAL_VIEWPORTS),
|
||||
isLandscape: false,
|
||||
});
|
||||
});
|
||||
|
||||
it('listens on the channel', () => {
|
||||
expect(props.channel.on).toHaveBeenCalledWith(
|
||||
'addon:viewport:update',
|
||||
subject.instance().changeViewport
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('componentDidMount', () => {
|
||||
@ -53,6 +54,34 @@ describe('Viewport/Panel', () => {
|
||||
it('gets the iframe', () => {
|
||||
expect(subject.instance().iframe).toEqual('iframe');
|
||||
});
|
||||
|
||||
it('listens on `configure` channel', () => {
|
||||
expect(props.channel.on).toHaveBeenCalledWith(
|
||||
'addon:viewport:configure',
|
||||
subject.instance().configure
|
||||
);
|
||||
});
|
||||
|
||||
it('listens on `update` channel', () => {
|
||||
expect(props.channel.on).toHaveBeenCalledWith(
|
||||
'addon:viewport:update',
|
||||
subject.instance().changeViewport
|
||||
);
|
||||
});
|
||||
|
||||
it('listens on `setStoryDefaultViewport` channel', () => {
|
||||
expect(props.channel.on).toHaveBeenCalledWith(
|
||||
'addon:viewport:setStoryDefaultViewport',
|
||||
subject.instance().setStoryDefaultViewport
|
||||
);
|
||||
});
|
||||
|
||||
it('listens on `unsetStoryDefaultViewport` channel', () => {
|
||||
expect(props.channel.on).toHaveBeenCalledWith(
|
||||
'addon:viewport:unsetStoryDefaultViewport',
|
||||
subject.instance().unsetStoryDefaultViewport
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('componentWillUnmount', () => {
|
||||
@ -60,12 +89,97 @@ describe('Viewport/Panel', () => {
|
||||
subject.instance().componentWillUnmount();
|
||||
});
|
||||
|
||||
it('removes the channel listener', () => {
|
||||
it('removes `update` channel listener', () => {
|
||||
expect(props.channel.removeListener).toHaveBeenCalledWith(
|
||||
'addon:viewport:update',
|
||||
subject.instance().changeViewport
|
||||
);
|
||||
});
|
||||
|
||||
it('removes `configure` channel listener', () => {
|
||||
expect(props.channel.removeListener).toHaveBeenCalledWith(
|
||||
'addon:viewport:configure',
|
||||
subject.instance().configure
|
||||
);
|
||||
});
|
||||
|
||||
it('removes `setStoryDefaultViewport` channel listener', () => {
|
||||
expect(props.channel.removeListener).toHaveBeenCalledWith(
|
||||
'addon:viewport:setStoryDefaultViewport',
|
||||
subject.instance().setStoryDefaultViewport
|
||||
);
|
||||
});
|
||||
|
||||
it('removes `unsetStoryDefaultViewport` channel listener', () => {
|
||||
expect(props.channel.removeListener).toHaveBeenCalledWith(
|
||||
'addon:viewport:unsetStoryDefaultViewport',
|
||||
subject.instance().unsetStoryDefaultViewport
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('configure', () => {
|
||||
const initialConfigs = {
|
||||
defaultViewport: 'bar',
|
||||
viewports: {
|
||||
foo: {
|
||||
styles: {
|
||||
width: '0',
|
||||
},
|
||||
},
|
||||
bar: {
|
||||
styles: {
|
||||
width: '0',
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
subject.instance().setState = jest.fn();
|
||||
subject.instance().updateIframe = jest.fn();
|
||||
subject.instance().configure(initialConfigs);
|
||||
});
|
||||
|
||||
it('sets the state with the new information', () => {
|
||||
expect(subject.instance().setState).toHaveBeenCalledWith(
|
||||
{
|
||||
...initialConfigs,
|
||||
viewport: 'bar',
|
||||
viewports: viewportsTransformer(initialConfigs.viewports),
|
||||
},
|
||||
subject.instance().updateIframe
|
||||
);
|
||||
});
|
||||
|
||||
it('makes first viewport default if default does not exist', () => {
|
||||
subject.instance().configure({
|
||||
...initialConfigs,
|
||||
defaultViewport: 'iphone6',
|
||||
});
|
||||
expect(subject.instance().setState).toHaveBeenCalledWith(
|
||||
{
|
||||
defaultViewport: 'foo',
|
||||
viewport: 'foo',
|
||||
viewports: viewportsTransformer(initialConfigs.viewports),
|
||||
},
|
||||
subject.instance().updateIframe
|
||||
);
|
||||
});
|
||||
|
||||
it('sets viewports to INITIAL_VIEWPORTS if viewports is empty', () => {
|
||||
subject.instance().configure({
|
||||
viewports: {},
|
||||
});
|
||||
expect(subject.instance().setState).toHaveBeenCalledWith(
|
||||
{
|
||||
defaultViewport: DEFAULT_VIEWPORT,
|
||||
viewport: DEFAULT_VIEWPORT,
|
||||
viewports: viewportsTransformer(INITIAL_VIEWPORTS),
|
||||
},
|
||||
subject.instance().updateIframe
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('changeViewport', () => {
|
||||
@ -76,13 +190,13 @@ describe('Viewport/Panel', () => {
|
||||
|
||||
describe('new viewport', () => {
|
||||
beforeEach(() => {
|
||||
subject.instance().changeViewport(viewports[0]);
|
||||
subject.instance().changeViewport(initialViewportAt(1));
|
||||
});
|
||||
|
||||
it('sets the state with the new information', () => {
|
||||
expect(subject.instance().setState).toHaveBeenCalledWith(
|
||||
{
|
||||
viewport: viewports[0],
|
||||
viewport: initialViewportAt(1),
|
||||
isLandscape: false,
|
||||
},
|
||||
subject.instance().updateIframe
|
||||
@ -92,7 +206,7 @@ describe('Viewport/Panel', () => {
|
||||
|
||||
describe('same as previous viewport', () => {
|
||||
beforeEach(() => {
|
||||
subject.instance().changeViewport(defaultViewport);
|
||||
subject.instance().changeViewport(DEFAULT_VIEWPORT);
|
||||
});
|
||||
|
||||
it('doesnt update the state', () => {
|
||||
@ -101,6 +215,42 @@ describe('Viewport/Panel', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('setStoryDefaultViewport', () => {
|
||||
beforeEach(() => {
|
||||
subject.instance().setState = jest.fn();
|
||||
subject.instance().updateIframe = jest.fn();
|
||||
subject.instance().setStoryDefaultViewport(initialViewportAt(1));
|
||||
});
|
||||
|
||||
it('sets the state with the new information', () => {
|
||||
expect(subject.instance().setState).toHaveBeenCalledWith(
|
||||
{
|
||||
viewport: initialViewportAt(1),
|
||||
storyDefaultViewport: initialViewportAt(1),
|
||||
},
|
||||
subject.instance().updateIframe
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('unsetStoryDefaultViewport', () => {
|
||||
beforeEach(() => {
|
||||
subject.instance().setState = jest.fn();
|
||||
subject.instance().updateIframe = jest.fn();
|
||||
subject.instance().unsetStoryDefaultViewport();
|
||||
});
|
||||
|
||||
it('resets the state', () => {
|
||||
expect(subject.instance().setState).toHaveBeenCalledWith(
|
||||
{
|
||||
viewport: DEFAULT_VIEWPORT,
|
||||
storyDefaultViewport: undefined,
|
||||
},
|
||||
subject.instance().updateIframe
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('toggleLandscape', () => {
|
||||
beforeEach(() => {
|
||||
subject.setState({ isLandscape: false });
|
||||
@ -184,7 +334,7 @@ describe('Viewport/Panel', () => {
|
||||
|
||||
it('toggles the landscape on click', () => {
|
||||
resetBtn.simulate('click');
|
||||
expect(subject.instance().changeViewport).toHaveBeenCalledWith(defaultViewport);
|
||||
expect(subject.instance().changeViewport).toHaveBeenCalledWith(DEFAULT_VIEWPORT);
|
||||
});
|
||||
});
|
||||
|
||||
@ -199,7 +349,23 @@ describe('Viewport/Panel', () => {
|
||||
it('passes the activeViewport', () => {
|
||||
expect(select.props()).toEqual(
|
||||
expect.objectContaining({
|
||||
activeViewport: defaultViewport,
|
||||
activeViewport: DEFAULT_VIEWPORT,
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
it('passes the defaultViewport', () => {
|
||||
expect(select.props()).toEqual(
|
||||
expect.objectContaining({
|
||||
defaultViewport: DEFAULT_VIEWPORT,
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
it('passes the INITIAL_VIEWPORTS', () => {
|
||||
expect(select.props()).toEqual(
|
||||
expect.objectContaining({
|
||||
viewports: viewportsTransformer(INITIAL_VIEWPORTS),
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -226,7 +392,7 @@ describe('Viewport/Panel', () => {
|
||||
|
||||
describe('is on the default viewport', () => {
|
||||
beforeEach(() => {
|
||||
subject.setState({ viewport: defaultViewport });
|
||||
subject.setState({ viewport: DEFAULT_VIEWPORT });
|
||||
});
|
||||
|
||||
it('sets the disabled property', () => {
|
||||
@ -234,7 +400,7 @@ describe('Viewport/Panel', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('is on a responsive viewport', () => {
|
||||
describe('is on a non-default viewport', () => {
|
||||
beforeEach(() => {
|
||||
subject.setState({ viewport: 'iphone6' });
|
||||
toggle = subject.find('RotateViewport');
|
@ -1,7 +1,7 @@
|
||||
import React from 'react';
|
||||
import { shallow } from 'enzyme';
|
||||
import { SelectViewport } from '../SelectViewport';
|
||||
import { viewports, defaultViewport } from '../viewportInfo';
|
||||
import { INITIAL_VIEWPORTS, DEFAULT_VIEWPORT } from '../../../shared';
|
||||
import * as styles from '../styles';
|
||||
|
||||
describe('Viewport/SelectViewport', () => {
|
||||
@ -11,7 +11,9 @@ describe('Viewport/SelectViewport', () => {
|
||||
beforeEach(() => {
|
||||
props = {
|
||||
onChange: jest.fn(),
|
||||
activeViewport: defaultViewport,
|
||||
activeViewport: DEFAULT_VIEWPORT,
|
||||
viewports: INITIAL_VIEWPORTS,
|
||||
defaultViewport: DEFAULT_VIEWPORT,
|
||||
};
|
||||
|
||||
subject = shallow(<SelectViewport {...props} />);
|
||||
@ -31,21 +33,23 @@ describe('Viewport/SelectViewport', () => {
|
||||
describe('select', () => {
|
||||
it('has a default option first', () => {
|
||||
const firstOption = subject.find('option').first();
|
||||
expect(firstOption.props().value).toEqual(defaultViewport);
|
||||
expect(firstOption.props().value).toEqual(DEFAULT_VIEWPORT);
|
||||
});
|
||||
|
||||
describe('dynamic options', () => {
|
||||
const viewportKeys = Object.keys(viewports);
|
||||
const viewportKeys = Object.keys(INITIAL_VIEWPORTS);
|
||||
it('has at least 1 option', () => {
|
||||
expect(viewportKeys.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
viewportKeys.forEach(key => {
|
||||
let option;
|
||||
const { name } = INITIAL_VIEWPORTS[key];
|
||||
const expectedText = key === DEFAULT_VIEWPORT ? `(Default) ${name}` : name;
|
||||
|
||||
it(`renders an option for ${viewports[key].name}`, () => {
|
||||
option = subject.find(`[value="${key}"]`);
|
||||
expect(option.text()).toEqual(viewports[key].name);
|
||||
it(`renders an option for ${name}`, () => {
|
||||
option = subject.find(`option[value="${key}"]`);
|
||||
expect(option.text()).toEqual(expectedText);
|
||||
});
|
||||
});
|
||||
});
|
@ -0,0 +1,61 @@
|
||||
import {
|
||||
resetViewport,
|
||||
configuredStyles,
|
||||
applyStyles,
|
||||
viewportsTransformer,
|
||||
} from '../viewportInfo';
|
||||
|
||||
describe('Viewport/constants', () => {
|
||||
describe('resetViewport', () => {
|
||||
it('does not include the styles for a responsive iframe', () => {
|
||||
expect(resetViewport).not.toEqual(expect.objectContaining(configuredStyles));
|
||||
});
|
||||
});
|
||||
|
||||
describe('applyStyles', () => {
|
||||
it('creates a new viewport with all given styles applied', () => {
|
||||
const viewport = {
|
||||
styles: {
|
||||
width: '50px',
|
||||
},
|
||||
};
|
||||
const styles = {
|
||||
foo: 'bar',
|
||||
john: 'doe',
|
||||
};
|
||||
const newViewport = applyStyles(viewport, styles);
|
||||
|
||||
expect(newViewport.styles).toEqual(
|
||||
expect.objectContaining({
|
||||
width: '50px',
|
||||
foo: 'bar',
|
||||
john: 'doe',
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('viewportsTransformer', () => {
|
||||
it('includes the default styles on every viewport', () => {
|
||||
const viewports = {
|
||||
foo: {
|
||||
styles: {
|
||||
width: '50px',
|
||||
},
|
||||
},
|
||||
bar: {
|
||||
styles: {
|
||||
width: '100px',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
const transformedViewports = viewportsTransformer(viewports);
|
||||
const keys = Object.keys(transformedViewports);
|
||||
|
||||
keys.forEach(key => {
|
||||
expect(transformedViewports[key].styles).toEqual(expect.objectContaining(configuredStyles));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
45
addons/viewport/src/manager/components/viewportInfo.js
Normal file
@ -0,0 +1,45 @@
|
||||
export const configuredStyles = {
|
||||
border: '1px solid #728099',
|
||||
display: 'flex',
|
||||
margin: '0 auto',
|
||||
boxShadow: 'rgba(0,0,0,0.2) 0px 0px 60px 12px',
|
||||
};
|
||||
|
||||
export const resetViewport = {
|
||||
name: 'Reset',
|
||||
styles: {
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
border: 'none',
|
||||
display: 'block',
|
||||
margin: '0',
|
||||
boxShadow: 'none',
|
||||
},
|
||||
};
|
||||
|
||||
export function applyStyles(viewport, styles) {
|
||||
const mixedStyles = {
|
||||
...styles,
|
||||
...viewport.styles,
|
||||
};
|
||||
|
||||
return {
|
||||
...viewport,
|
||||
styles: mixedStyles,
|
||||
};
|
||||
}
|
||||
|
||||
export function applyDefaultStyles(viewport) {
|
||||
return applyStyles(viewport, configuredStyles);
|
||||
}
|
||||
|
||||
export const transformViewports = transformer => viewports =>
|
||||
Object.keys(viewports).reduce(
|
||||
(all, key) => ({
|
||||
...all,
|
||||
[key]: transformer(viewports[key]),
|
||||
}),
|
||||
{}
|
||||
);
|
||||
|
||||
export const viewportsTransformer = transformViewports(applyDefaultStyles);
|
@ -3,8 +3,7 @@ import addons from '@storybook/addons';
|
||||
|
||||
import { Panel } from './components/Panel';
|
||||
|
||||
const ADDON_ID = 'storybook-addon-viewport';
|
||||
const PANEL_ID = `${ADDON_ID}/addon-panel`;
|
||||
import { ADDON_ID, PANEL_ID } from '../shared';
|
||||
|
||||
const addChannel = api => {
|
||||
const channel = addons.getChannel();
|
@ -1,5 +1,5 @@
|
||||
import addons from '@storybook/addons';
|
||||
import { init, addChannel } from '../manager';
|
||||
import { init, addChannel } from '../';
|
||||
|
||||
jest.mock('@storybook/addons');
|
||||
|
47
addons/viewport/src/preview/index.js
Normal file
@ -0,0 +1,47 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import addons from '@storybook/addons';
|
||||
import {
|
||||
CONFIGURE_VIEWPORT_EVENT_ID,
|
||||
SET_STORY_DEFAULT_VIEWPORT_EVENT_ID,
|
||||
UNSET_STORY_DEFAULT_VIEWPORT_EVENT_ID,
|
||||
} from '../shared';
|
||||
|
||||
export { INITIAL_VIEWPORTS, DEFAULT_VIEWPORT } from '../shared';
|
||||
|
||||
export function configure(configs = {}) {
|
||||
const channel = addons.getChannel();
|
||||
|
||||
if (channel) {
|
||||
channel.emit(CONFIGURE_VIEWPORT_EVENT_ID, configs);
|
||||
}
|
||||
}
|
||||
|
||||
export function withViewport(name) {
|
||||
return getStory => <Viewport name={name}>{getStory()}</Viewport>;
|
||||
}
|
||||
|
||||
export class Viewport extends React.Component {
|
||||
static propTypes = {
|
||||
name: PropTypes.string.isRequired,
|
||||
children: PropTypes.node.isRequired,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.channel = addons.getChannel();
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.channel.emit(SET_STORY_DEFAULT_VIEWPORT_EVENT_ID, this.props.name);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.channel.emit(UNSET_STORY_DEFAULT_VIEWPORT_EVENT_ID);
|
||||
}
|
||||
|
||||
render() {
|
||||
return this.props.children;
|
||||
}
|
||||
}
|
64
addons/viewport/src/preview/tests/index.test.js
Normal file
@ -0,0 +1,64 @@
|
||||
import React from 'react';
|
||||
import addons from '@storybook/addons';
|
||||
import { shallow } from 'enzyme';
|
||||
import { configure, Viewport } from '../';
|
||||
|
||||
jest.mock('@storybook/addons');
|
||||
|
||||
describe('Viewport preview', () => {
|
||||
const channel = {
|
||||
emit: jest.fn(),
|
||||
};
|
||||
addons.getChannel.mockReturnValue(channel);
|
||||
|
||||
describe('configure', () => {
|
||||
it('publishes configure event with all passed configurations', () => {
|
||||
const configs = {
|
||||
foo: 'bar',
|
||||
john: 'Doe',
|
||||
};
|
||||
configure(configs);
|
||||
|
||||
expect(channel.emit).toHaveBeenCalledTimes(1);
|
||||
expect(channel.emit).toHaveBeenCalledWith('addon:viewport:configure', {
|
||||
foo: 'bar',
|
||||
john: 'Doe',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Viewport', () => {
|
||||
const props = {
|
||||
name: 'iphone6',
|
||||
children: '1337',
|
||||
};
|
||||
|
||||
let subject;
|
||||
|
||||
beforeEach(() => {
|
||||
subject = shallow(<Viewport {...props} />);
|
||||
});
|
||||
|
||||
describe('componentWillMount', () => {
|
||||
it('publishes `set` event with `iphone6`', () => {
|
||||
expect(channel.emit).toHaveBeenCalledTimes(1);
|
||||
expect(channel.emit).toHaveBeenCalledWith(
|
||||
'addon:viewport:setStoryDefaultViewport',
|
||||
'iphone6'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('componentWillUnmount', () => {
|
||||
beforeEach(() => {
|
||||
channel.emit.mockReset();
|
||||
subject.unmount();
|
||||
});
|
||||
|
||||
it('publishes `unset` event', () => {
|
||||
expect(channel.emit).toHaveBeenCalledTimes(1);
|
||||
expect(channel.emit).toHaveBeenCalledWith('addon:viewport:unsetStoryDefaultViewport');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
@ -1,30 +1,26 @@
|
||||
export const configuredStyles = {
|
||||
border: '1px solid #728099',
|
||||
display: 'flex',
|
||||
margin: '0 auto',
|
||||
boxShadow: 'rgba(0,0,0,0.2) 0px 0px 60px 12px',
|
||||
};
|
||||
|
||||
export const defaultViewport = 'default';
|
||||
export const resetViewport = {
|
||||
name: 'Reset',
|
||||
styles: {
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
border: 'none',
|
||||
display: 'block',
|
||||
margin: '0',
|
||||
boxShadow: 'none',
|
||||
export const ADDON_ID = 'storybook-addon-viewport';
|
||||
export const PANEL_ID = `${ADDON_ID}/addon-panel`;
|
||||
export const UPDATE_VIEWPORT_EVENT_ID = 'addon:viewport:update';
|
||||
export const CONFIGURE_VIEWPORT_EVENT_ID = 'addon:viewport:configure';
|
||||
export const SET_STORY_DEFAULT_VIEWPORT_EVENT_ID = 'addon:viewport:setStoryDefaultViewport';
|
||||
export const UNSET_STORY_DEFAULT_VIEWPORT_EVENT_ID = 'addon:viewport:unsetStoryDefaultViewport';
|
||||
export const INITIAL_VIEWPORTS = {
|
||||
responsive: {
|
||||
name: 'Responsive',
|
||||
styles: {
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
border: 'none',
|
||||
display: 'block',
|
||||
margin: '0',
|
||||
boxShadow: 'none',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const viewports = {
|
||||
iphone5: {
|
||||
name: 'iPhone 5',
|
||||
styles: {
|
||||
height: '568px',
|
||||
width: '320px',
|
||||
...configuredStyles,
|
||||
},
|
||||
},
|
||||
iphone6: {
|
||||
@ -32,7 +28,6 @@ export const viewports = {
|
||||
styles: {
|
||||
height: '667px',
|
||||
width: '375px',
|
||||
...configuredStyles,
|
||||
},
|
||||
},
|
||||
iphone6p: {
|
||||
@ -40,7 +35,6 @@ export const viewports = {
|
||||
styles: {
|
||||
height: '736px',
|
||||
width: '414px',
|
||||
...configuredStyles,
|
||||
},
|
||||
},
|
||||
ipad: {
|
||||
@ -48,7 +42,6 @@ export const viewports = {
|
||||
styles: {
|
||||
height: '1024px',
|
||||
width: '768px',
|
||||
...configuredStyles,
|
||||
},
|
||||
},
|
||||
galaxys5: {
|
||||
@ -56,7 +49,6 @@ export const viewports = {
|
||||
styles: {
|
||||
height: '640px',
|
||||
width: '360px',
|
||||
...configuredStyles,
|
||||
},
|
||||
},
|
||||
nexus5x: {
|
||||
@ -64,7 +56,6 @@ export const viewports = {
|
||||
styles: {
|
||||
height: '660px',
|
||||
width: '412px',
|
||||
...configuredStyles,
|
||||
},
|
||||
},
|
||||
nexus6p: {
|
||||
@ -72,7 +63,7 @@ export const viewports = {
|
||||
styles: {
|
||||
height: '732px',
|
||||
width: '412px',
|
||||
...configuredStyles,
|
||||
},
|
||||
},
|
||||
};
|
||||
export const DEFAULT_VIEWPORT = 'responsive';
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/angular",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Storybook for Angular: Develop Angular Components in isolation with Hot Reloading.",
|
||||
"homepage": "https://github.com/storybooks/storybook/tree/master/apps/angular",
|
||||
"bugs": {
|
||||
@ -23,44 +23,44 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/channel-postmessage": "^3.4.0-alpha.9",
|
||||
"@storybook/core": "^3.4.0-alpha.9",
|
||||
"@storybook/node-logger": "^3.4.0-alpha.9",
|
||||
"@storybook/ui": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"@storybook/channel-postmessage": "3.4.0-rc.3",
|
||||
"@storybook/core": "3.4.0-rc.3",
|
||||
"@storybook/node-logger": "3.4.0-rc.3",
|
||||
"@storybook/ui": "3.4.0-rc.3",
|
||||
"airbnb-js-shims": "^1.4.1",
|
||||
"angular2-template-loader": "^0.6.2",
|
||||
"babel-loader": "^7.1.3",
|
||||
"babel-plugin-macros": "^2.1.0",
|
||||
"babel-loader": "^7.1.4",
|
||||
"babel-plugin-macros": "^2.2.0",
|
||||
"babel-preset-env": "^1.6.0",
|
||||
"babel-preset-stage-0": "^6.24.1",
|
||||
"babel-runtime": "^6.23.0",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.0.0",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.2",
|
||||
"core-js": "^2.4.1",
|
||||
"cross-env": "^5.1.1",
|
||||
"cross-env": "^5.1.4",
|
||||
"dotenv-webpack": "^1.5.5",
|
||||
"global": "^4.3.2",
|
||||
"html-loader": "^0.5.5",
|
||||
"html-webpack-plugin": "^2.30.1",
|
||||
"json5": "^0.5.1",
|
||||
"markdown-loader": "^2.0.2",
|
||||
"node-sass": "^4.7.2",
|
||||
"node-sass": "^4.8.3",
|
||||
"raw-loader": "^0.5.1",
|
||||
"react": "^16.0.0",
|
||||
"react-dev-utils": "^5.0.0",
|
||||
"react-dom": "^16.0.0",
|
||||
"redux": "^3.6.0",
|
||||
"sass-loader": "^6.0.6",
|
||||
"sass-loader": "^6.0.7",
|
||||
"ts-loader": "^3.5.0",
|
||||
"uglifyjs-webpack-plugin": "^1.2.2",
|
||||
"uglifyjs-webpack-plugin": "^1.2.4",
|
||||
"util-deprecate": "^1.0.2",
|
||||
"webpack": "^3.11.0",
|
||||
"webpack-hot-middleware": "^2.21.0",
|
||||
"webpack-hot-middleware": "^2.21.2",
|
||||
"zone.js": "^0.8.20"
|
||||
},
|
||||
"devDependencies": {
|
||||
"mock-fs": "^4.3.0",
|
||||
"nodemon": "^1.15.1"
|
||||
"nodemon": "^1.17.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": ">=4.0.0",
|
||||
|
9
app/angular/src/client/preview/index.js
vendored
@ -34,9 +34,10 @@ export const {
|
||||
getStorybook,
|
||||
} = clientApi;
|
||||
|
||||
let channel;
|
||||
if (isBrowser) {
|
||||
// create preview channel
|
||||
const channel = createChannel({ page: 'preview' });
|
||||
channel = createChannel({ page: 'preview' });
|
||||
channel.on('setCurrentStory', data => {
|
||||
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
|
||||
});
|
||||
@ -47,9 +48,13 @@ if (isBrowser) {
|
||||
|
||||
// Handle keyboard shortcuts
|
||||
window.onkeydown = handleKeyboardShortcuts(channel);
|
||||
}
|
||||
|
||||
// Provide access to external scripts
|
||||
// Provide access to external scripts if `window` is defined.
|
||||
// NOTE this is different to isBrowser, primarily for the JSDOM use case
|
||||
if (typeof window !== 'undefined') {
|
||||
window.__STORYBOOK_CLIENT_API__ = clientApi;
|
||||
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
|
||||
}
|
||||
|
||||
const configApi = new ConfigApi({ ...context, clearDecorators });
|
||||
|
@ -2,9 +2,10 @@ import path from 'path';
|
||||
import webpack from 'webpack';
|
||||
import Dotenv from 'dotenv-webpack';
|
||||
import InterpolateHtmlPlugin from 'react-dev-utils/InterpolateHtmlPlugin';
|
||||
import WatchMissingNodeModulesPlugin from 'react-dev-utils/WatchMissingNodeModulesPlugin';
|
||||
import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
|
||||
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
||||
import { WatchMissingNodeModulesPlugin, managerPath } from '@storybook/core/server';
|
||||
import { managerPath } from '@storybook/core/server';
|
||||
|
||||
import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils';
|
||||
import babelLoaderConfig from './babel';
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/polymer",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Storybook for Polymer: Develop Polymer components in isolation with Hot Reloading.",
|
||||
"homepage": "https://github.com/storybooks/storybook/tree/master/apps/polymer",
|
||||
"bugs": {
|
||||
@ -22,16 +22,16 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/channel-postmessage": "^3.4.0-alpha.9",
|
||||
"@storybook/client-logger": "^3.4.0-alpha.9",
|
||||
"@storybook/core": "^3.4.0-alpha.9",
|
||||
"@storybook/node-logger": "^3.4.0-alpha.9",
|
||||
"@storybook/ui": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"@storybook/channel-postmessage": "3.4.0-rc.3",
|
||||
"@storybook/client-logger": "3.4.0-rc.3",
|
||||
"@storybook/core": "3.4.0-rc.3",
|
||||
"@storybook/node-logger": "3.4.0-rc.3",
|
||||
"@storybook/ui": "3.4.0-rc.3",
|
||||
"@webcomponents/webcomponentsjs": "^1.1.0",
|
||||
"airbnb-js-shims": "^1.4.1",
|
||||
"babel-loader": "^7.1.3",
|
||||
"babel-plugin-macros": "^2.1.0",
|
||||
"babel-loader": "^7.1.4",
|
||||
"babel-plugin-macros": "^2.2.0",
|
||||
"babel-plugin-transform-regenerator": "^6.26.0",
|
||||
"babel-plugin-transform-runtime": "^6.23.0",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
@ -39,30 +39,31 @@
|
||||
"babel-preset-minify": "^0.3.0",
|
||||
"babel-preset-stage-0": "^6.24.1",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.1",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.2",
|
||||
"common-tags": "^1.4.0",
|
||||
"copy-webpack-plugin": "^4.4.2",
|
||||
"copy-webpack-plugin": "^4.5.1",
|
||||
"core-js": "^2.5.1",
|
||||
"dotenv-webpack": "^1.5.5",
|
||||
"find-cache-dir": "^1.0.0",
|
||||
"global": "^4.3.2",
|
||||
"html-webpack-plugin": "^2.30.1",
|
||||
"json5": "^0.5.1",
|
||||
"polymer-webpack-loader": "2.0.1",
|
||||
"react": "^16.0.0",
|
||||
"react-dev-utils": "^5.0.0",
|
||||
"react-dom": "^16.0.0",
|
||||
"redux": "^3.7.2",
|
||||
"uglifyjs-webpack-plugin": "^1.2.2",
|
||||
"uglifyjs-webpack-plugin": "^1.2.4",
|
||||
"util-deprecate": "^1.0.2",
|
||||
"webpack": "^3.11.0",
|
||||
"webpack-hot-middleware": "^2.21.0"
|
||||
"webpack-hot-middleware": "^2.21.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^1.15.1"
|
||||
"nodemon": "^1.17.2",
|
||||
"polymer-webpack-loader": "^2.0.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"babel-core": "^6.26.0 || ^7.0.0-0",
|
||||
"babel-runtime": ">=6.0.0"
|
||||
"babel-runtime": ">=6.0.0",
|
||||
"polymer-webpack-loader": "2.0.2"
|
||||
}
|
||||
}
|
||||
|
@ -36,9 +36,10 @@ export const {
|
||||
getStorybook,
|
||||
} = clientApi;
|
||||
|
||||
let channel;
|
||||
if (isBrowser) {
|
||||
// setup preview channel
|
||||
const channel = createChannel({ page: 'preview' });
|
||||
channel = createChannel({ page: 'preview' });
|
||||
channel.on('setCurrentStory', data => {
|
||||
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
|
||||
});
|
||||
@ -49,9 +50,13 @@ if (isBrowser) {
|
||||
|
||||
// Handle keyboard shortcuts
|
||||
window.onkeydown = handleKeyboardShortcuts(channel);
|
||||
}
|
||||
|
||||
// Provide access to external scripts
|
||||
// Provide access to external scripts if `window` is defined.
|
||||
// NOTE this is different to isBrowser, primarily for the JSDOM use case
|
||||
if (typeof window !== 'undefined') {
|
||||
window.__STORYBOOK_CLIENT_API__ = clientApi;
|
||||
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
|
||||
}
|
||||
|
||||
const configApi = new ConfigApi({ clearDecorators, ...context });
|
||||
|
@ -2,10 +2,11 @@ import path from 'path';
|
||||
import webpack from 'webpack';
|
||||
import Dotenv from 'dotenv-webpack';
|
||||
import InterpolateHtmlPlugin from 'react-dev-utils/InterpolateHtmlPlugin';
|
||||
import WatchMissingNodeModulesPlugin from 'react-dev-utils/WatchMissingNodeModulesPlugin';
|
||||
import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
|
||||
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
||||
import CopyWebpackPlugin from 'copy-webpack-plugin';
|
||||
import { WatchMissingNodeModulesPlugin, managerPath } from '@storybook/core/server';
|
||||
import { managerPath } from '@storybook/core/server';
|
||||
|
||||
import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils';
|
||||
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/react-native",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "A better way to develop React Native Components for your app",
|
||||
"keywords": [
|
||||
"react",
|
||||
@ -25,14 +25,14 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addon-actions": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-links": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/channel-websocket": "^3.4.0-alpha.9",
|
||||
"@storybook/core": "^3.4.0-alpha.9",
|
||||
"@storybook/ui": "^3.4.0-alpha.9",
|
||||
"babel-loader": "^7.1.3",
|
||||
"babel-plugin-macros": "^2.1.0",
|
||||
"@storybook/addon-actions": "3.4.0-rc.3",
|
||||
"@storybook/addon-links": "3.4.0-rc.3",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"@storybook/channel-websocket": "3.4.0-rc.3",
|
||||
"@storybook/core": "3.4.0-rc.3",
|
||||
"@storybook/ui": "3.4.0-rc.3",
|
||||
"babel-loader": "^7.1.4",
|
||||
"babel-plugin-macros": "^2.2.0",
|
||||
"babel-plugin-syntax-async-functions": "^6.13.0",
|
||||
"babel-plugin-syntax-trailing-function-commas": "^6.22.0",
|
||||
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||
@ -43,9 +43,9 @@
|
||||
"babel-preset-minify": "^0.3.0",
|
||||
"babel-preset-react": "^6.24.1",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.1",
|
||||
"commander": "^2.14.1",
|
||||
"express": "^4.16.2",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.2",
|
||||
"commander": "^2.15.0",
|
||||
"express": "^4.16.3",
|
||||
"find-cache-dir": "^1.0.0",
|
||||
"global": "^4.3.2",
|
||||
"html-loader": "^0.5.5",
|
||||
@ -53,16 +53,17 @@
|
||||
"json5": "^0.5.1",
|
||||
"markdown-loader": "^2.0.2",
|
||||
"prop-types": "^15.6.1",
|
||||
"react-dev-utils": "^5.0.0",
|
||||
"react-native-compat": "^1.0.0",
|
||||
"react-native-iphone-x-helper": "^1.0.2",
|
||||
"shelljs": "^0.8.1",
|
||||
"uglifyjs-webpack-plugin": "^1.2.2",
|
||||
"uglifyjs-webpack-plugin": "^1.2.4",
|
||||
"url-parse": "^1.1.9",
|
||||
"util-deprecate": "^1.0.2",
|
||||
"uuid": "^3.2.1",
|
||||
"webpack": "^3.11.0",
|
||||
"webpack-dev-middleware": "^1.12.2",
|
||||
"webpack-hot-middleware": "^2.21.0",
|
||||
"webpack-hot-middleware": "^2.21.2",
|
||||
"ws": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -14,12 +14,12 @@ SectionHeader.propTypes = {
|
||||
selected: PropTypes.bool.isRequired,
|
||||
};
|
||||
|
||||
const ListItem = ({ title, selected, onPress }) => (
|
||||
const ListItem = ({ kind, title, selected, onPress }) => (
|
||||
<TouchableOpacity
|
||||
key={title}
|
||||
style={style.item}
|
||||
onPress={onPress}
|
||||
testID={`Storybook.ListItem.${title}`}
|
||||
testID={`Storybook.ListItem.${kind}.${title}`}
|
||||
accessibilityLabel={`Storybook.ListItem.${title}`}
|
||||
>
|
||||
<Text style={[style.itemText, selected && style.itemTextSelected]}>{title}</Text>
|
||||
@ -28,6 +28,7 @@ const ListItem = ({ title, selected, onPress }) => (
|
||||
|
||||
ListItem.propTypes = {
|
||||
title: PropTypes.string.isRequired,
|
||||
kind: PropTypes.string.isRequired,
|
||||
onPress: PropTypes.func.isRequired,
|
||||
selected: PropTypes.bool.isRequired,
|
||||
};
|
||||
@ -92,10 +93,12 @@ export default class StoryListView extends Component {
|
||||
render() {
|
||||
return (
|
||||
<ListView
|
||||
testID="Storybook.ListView"
|
||||
style={[style.list, { width: this.props.width }]}
|
||||
renderRow={item => (
|
||||
<ListItem
|
||||
title={item.name}
|
||||
kind={item.kind}
|
||||
selected={
|
||||
item.kind === this.props.selectedKind && item.name === this.props.selectedStory
|
||||
}
|
||||
|
2
app/react-native/src/server/config/utils.js
vendored
@ -10,3 +10,5 @@ export const OccurenceOrderPlugin =
|
||||
export const includePaths = [path.resolve('./')];
|
||||
|
||||
export const excludePaths = [path.resolve('./node_modules')];
|
||||
|
||||
export const nodeModulesPaths = path.resolve('./node_modules');
|
||||
|
@ -1,8 +1,9 @@
|
||||
import path from 'path';
|
||||
import webpack from 'webpack';
|
||||
import WatchMissingNodeModulesPlugin from 'react-dev-utils/WatchMissingNodeModulesPlugin';
|
||||
import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
|
||||
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
||||
import { OccurenceOrderPlugin, includePaths, excludePaths } from './utils';
|
||||
import { OccurenceOrderPlugin, includePaths, excludePaths, nodeModulesPaths } from './utils';
|
||||
|
||||
const getConfig = options => ({
|
||||
devtool: '#cheap-module-eval-source-map',
|
||||
@ -25,6 +26,7 @@ const getConfig = options => ({
|
||||
new OccurenceOrderPlugin(),
|
||||
new webpack.HotModuleReplacementPlugin(),
|
||||
new CaseSensitivePathsPlugin(),
|
||||
new WatchMissingNodeModulesPlugin(nodeModulesPaths),
|
||||
],
|
||||
module: {
|
||||
rules: [
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/react",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Storybook for React: Develop React Component in isolation with Hot Reloading.",
|
||||
"homepage": "https://github.com/storybooks/storybook/tree/master/app/react",
|
||||
"bugs": {
|
||||
@ -23,18 +23,18 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addon-actions": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-links": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/channel-postmessage": "^3.4.0-alpha.9",
|
||||
"@storybook/client-logger": "^3.4.0-alpha.9",
|
||||
"@storybook/core": "^3.4.0-alpha.9",
|
||||
"@storybook/node-logger": "^3.4.0-alpha.9",
|
||||
"@storybook/ui": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-actions": "3.4.0-rc.3",
|
||||
"@storybook/addon-links": "3.4.0-rc.3",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"@storybook/channel-postmessage": "3.4.0-rc.3",
|
||||
"@storybook/client-logger": "3.4.0-rc.3",
|
||||
"@storybook/core": "3.4.0-rc.3",
|
||||
"@storybook/node-logger": "3.4.0-rc.3",
|
||||
"@storybook/ui": "3.4.0-rc.3",
|
||||
"airbnb-js-shims": "^1.4.1",
|
||||
"babel-loader": "^7.1.3",
|
||||
"babel-plugin-macros": "^2.1.0",
|
||||
"babel-plugin-react-docgen": "^1.8.2",
|
||||
"babel-loader": "^7.1.4",
|
||||
"babel-plugin-macros": "^2.2.0",
|
||||
"babel-plugin-react-docgen": "^1.8.3",
|
||||
"babel-plugin-transform-regenerator": "^6.26.0",
|
||||
"babel-plugin-transform-runtime": "^6.23.0",
|
||||
"babel-preset-env": "^1.6.1",
|
||||
@ -42,13 +42,13 @@
|
||||
"babel-preset-react": "^6.24.1",
|
||||
"babel-preset-stage-0": "^6.24.1",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.1",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.2",
|
||||
"common-tags": "^1.7.2",
|
||||
"core-js": "^2.5.3",
|
||||
"dotenv-webpack": "^1.5.5",
|
||||
"find-cache-dir": "^1.0.0",
|
||||
"glamor": "^2.20.40",
|
||||
"glamorous": "^4.11.6",
|
||||
"glamorous": "^4.12.1",
|
||||
"global": "^4.3.2",
|
||||
"html-loader": "^0.5.5",
|
||||
"html-webpack-plugin": "^2.30.1",
|
||||
@ -58,13 +58,13 @@
|
||||
"prop-types": "^15.6.1",
|
||||
"react-dev-utils": "^5.0.0",
|
||||
"redux": "^3.7.2",
|
||||
"uglifyjs-webpack-plugin": "^1.2.2",
|
||||
"uglifyjs-webpack-plugin": "^1.2.4",
|
||||
"util-deprecate": "^1.0.2",
|
||||
"webpack": "^3.11.0",
|
||||
"webpack-hot-middleware": "^2.21.0"
|
||||
"webpack-hot-middleware": "^2.21.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^1.15.1"
|
||||
"nodemon": "^1.17.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"babel-core": "^6.26.0 || ^7.0.0-0",
|
||||
|
@ -36,9 +36,10 @@ export const {
|
||||
getStorybook,
|
||||
} = clientApi;
|
||||
|
||||
let channel;
|
||||
if (isBrowser) {
|
||||
// setup preview channel
|
||||
const channel = createChannel({ page: 'preview' });
|
||||
channel = createChannel({ page: 'preview' });
|
||||
channel.on('setCurrentStory', data => {
|
||||
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
|
||||
});
|
||||
@ -49,9 +50,13 @@ if (isBrowser) {
|
||||
|
||||
// Handle keyboard shortcuts
|
||||
window.onkeydown = handleKeyboardShortcuts(channel);
|
||||
}
|
||||
|
||||
// Provide access to external scripts
|
||||
// Provide access to external scripts if `window` is defined.
|
||||
// NOTE this is different to isBrowser, primarily for the JSDOM use case
|
||||
if (typeof window !== 'undefined') {
|
||||
window.__STORYBOOK_CLIENT_API__ = clientApi;
|
||||
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
|
||||
}
|
||||
|
||||
const configApi = new ConfigApi({ clearDecorators, ...context });
|
||||
|
@ -2,9 +2,10 @@ import path from 'path';
|
||||
import webpack from 'webpack';
|
||||
import Dotenv from 'dotenv-webpack';
|
||||
import InterpolateHtmlPlugin from 'react-dev-utils/InterpolateHtmlPlugin';
|
||||
import WatchMissingNodeModulesPlugin from 'react-dev-utils/WatchMissingNodeModulesPlugin';
|
||||
import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
|
||||
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
||||
import { WatchMissingNodeModulesPlugin, managerPath } from '@storybook/core/server';
|
||||
import { managerPath } from '@storybook/core/server';
|
||||
|
||||
import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils';
|
||||
import babelLoaderConfig from './babel';
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@storybook/vue",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"description": "Storybook for Vue: Develop Vue Component in isolation with Hot Reloading.",
|
||||
"homepage": "https://github.com/storybooks/storybook/tree/master/apps/vue",
|
||||
"bugs": {
|
||||
@ -23,20 +23,20 @@
|
||||
"prepare": "node ../../scripts/prepare.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/channel-postmessage": "^3.4.0-alpha.9",
|
||||
"@storybook/core": "^3.4.0-alpha.9",
|
||||
"@storybook/ui": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"@storybook/channel-postmessage": "3.4.0-rc.3",
|
||||
"@storybook/core": "3.4.0-rc.3",
|
||||
"@storybook/ui": "3.4.0-rc.3",
|
||||
"airbnb-js-shims": "^1.4.1",
|
||||
"babel-loader": "^7.1.3",
|
||||
"babel-plugin-macros": "^2.1.0",
|
||||
"babel-loader": "^7.1.4",
|
||||
"babel-plugin-macros": "^2.2.0",
|
||||
"babel-plugin-transform-regenerator": "^6.26.0",
|
||||
"babel-plugin-transform-runtime": "^6.23.0",
|
||||
"babel-preset-env": "^1.6.0",
|
||||
"babel-preset-minify": "^0.3.0",
|
||||
"babel-preset-stage-0": "^6.24.1",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.1",
|
||||
"case-sensitive-paths-webpack-plugin": "^2.1.2",
|
||||
"common-tags": "^1.7.2",
|
||||
"core-js": "^2.5.3",
|
||||
"dotenv-webpack": "^1.5.5",
|
||||
@ -50,22 +50,22 @@
|
||||
"react-dev-utils": "^5.0.0",
|
||||
"react-dom": "^16.2.0",
|
||||
"redux": "^3.7.2",
|
||||
"uglifyjs-webpack-plugin": "^1.2.2",
|
||||
"uglifyjs-webpack-plugin": "^1.2.4",
|
||||
"util-deprecate": "^1.0.2",
|
||||
"webpack": "^3.11.0",
|
||||
"webpack-hot-middleware": "^2.21.0"
|
||||
"webpack-hot-middleware": "^2.21.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^1.15.1",
|
||||
"vue": "^2.5.13",
|
||||
"vue-loader": "^14.1.1",
|
||||
"vue-template-compiler": "^2.5.13"
|
||||
"nodemon": "^1.17.2",
|
||||
"vue": "^2.5.16",
|
||||
"vue-loader": "^14.2.1",
|
||||
"vue-template-compiler": "^2.5.16"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"babel-core": "^6.26.0 || ^7.0.0-0",
|
||||
"babel-runtime": ">=6.0.0",
|
||||
"vue": ">=2.0.0",
|
||||
"vue-loader": ">=13.0.0",
|
||||
"vue-template-compiler": ">=2.0.0"
|
||||
"vue": "2.5.16",
|
||||
"vue-loader": "14.2.1",
|
||||
"vue-template-compiler": "2.5.16"
|
||||
}
|
||||
}
|
||||
|
@ -53,9 +53,10 @@ export const {
|
||||
getStorybook,
|
||||
} = clientApi;
|
||||
|
||||
let channel;
|
||||
if (isBrowser) {
|
||||
// create preview channel
|
||||
const channel = createChannel({ page: 'preview' });
|
||||
channel = createChannel({ page: 'preview' });
|
||||
channel.on('setCurrentStory', data => {
|
||||
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
|
||||
});
|
||||
@ -66,9 +67,13 @@ if (isBrowser) {
|
||||
|
||||
// Handle keyboard shortcuts
|
||||
window.onkeydown = handleKeyboardShortcuts(channel);
|
||||
}
|
||||
|
||||
// Provide access to external scripts
|
||||
// Provide access to external scripts if `window` is defined.
|
||||
// NOTE this is different to isBrowser, primarily for the JSDOM use case
|
||||
if (typeof window !== 'undefined') {
|
||||
window.__STORYBOOK_CLIENT_API__ = clientApi;
|
||||
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
|
||||
}
|
||||
|
||||
const configApi = new ConfigApi({ ...context, clearDecorators });
|
||||
|
@ -2,9 +2,10 @@ import path from 'path';
|
||||
import webpack from 'webpack';
|
||||
import Dotenv from 'dotenv-webpack';
|
||||
import InterpolateHtmlPlugin from 'react-dev-utils/InterpolateHtmlPlugin';
|
||||
import WatchMissingNodeModulesPlugin from 'react-dev-utils/WatchMissingNodeModulesPlugin';
|
||||
import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin';
|
||||
import HtmlWebpackPlugin from 'html-webpack-plugin';
|
||||
import { WatchMissingNodeModulesPlugin, managerPath } from '@storybook/core/server';
|
||||
import { managerPath } from '@storybook/core/server';
|
||||
|
||||
import { includePaths, excludePaths, nodeModulesPaths, loadEnv, nodePaths } from './utils';
|
||||
import { getPreviewHeadHtml, getManagerHeadHtml } from '../utils';
|
||||
|
@ -1,17 +1,37 @@
|
||||
import { fail, danger } from 'danger';
|
||||
import { flatten, intersection, isEmpty, includes } from 'lodash';
|
||||
import { flatten, intersection, isEmpty } from 'lodash';
|
||||
|
||||
const pkg = require('./package.json'); // eslint-disable-line import/newline-after-import
|
||||
const prLogConfig = pkg['pr-log'];
|
||||
|
||||
const Versions = {
|
||||
PATCH: 'PATCH',
|
||||
MINOR: 'MINOR',
|
||||
MAJOR: 'MAJOR',
|
||||
};
|
||||
|
||||
const branchVersion = Versions.MAJOR;
|
||||
|
||||
const checkRequiredLabels = labels => {
|
||||
const forbiddenLabels = flatten([
|
||||
'do not merge',
|
||||
'in progress',
|
||||
branchVersion !== Versions.MAJOR ? 'BREAKING CHANGE' : [],
|
||||
branchVersion === Versions.PATCH ? 'feature request' : [],
|
||||
]);
|
||||
|
||||
const requiredLabels = flatten([
|
||||
prLogConfig.skipLabels || [],
|
||||
Object.keys(prLogConfig.validLabels || {}),
|
||||
]);
|
||||
|
||||
if (includes(labels, 'do not merge')) {
|
||||
fail('PR is marked with "do not merge" label.');
|
||||
const blockingLabels = intersection(forbiddenLabels, labels);
|
||||
if (!isEmpty(blockingLabels)) {
|
||||
fail(
|
||||
`PR is marked with ${blockingLabels.map(label => `"${label}"`).join(', ')} label${
|
||||
blockingLabels.length > 1 ? 's' : ''
|
||||
}.`
|
||||
);
|
||||
}
|
||||
|
||||
const foundLabels = intersection(requiredLabels, labels);
|
||||
|
@ -18,21 +18,21 @@
|
||||
"storybook": "start-storybook -p 9009 -s src/pages"
|
||||
},
|
||||
"dependencies": {
|
||||
"@storybook/addon-actions": "^3.3.14",
|
||||
"@storybook/addon-links": "^3.3.14",
|
||||
"@storybook/addons": "^3.3.14",
|
||||
"@storybook/react": "^3.3.14",
|
||||
"@storybook/addon-actions": "^3.3.15",
|
||||
"@storybook/addon-links": "^3.3.15",
|
||||
"@storybook/addons": "^3.3.15",
|
||||
"@storybook/react": "^3.3.15",
|
||||
"babel-loader": "^6.4.1",
|
||||
"bootstrap": "^3.3.7",
|
||||
"gatsby": "^1.9.216",
|
||||
"gatsby-link": "^1.6.37",
|
||||
"gatsby-plugin-sharp": "^1.6.35",
|
||||
"gatsby-remark-autolink-headers": "^1.4.12",
|
||||
"gatsby-remark-copy-linked-files": "^1.5.28",
|
||||
"gatsby-remark-images": "^1.5.51",
|
||||
"gatsby-remark-smartypants": "^1.4.11",
|
||||
"gatsby-source-filesystem": "^1.5.24",
|
||||
"gatsby-transformer-remark": "^1.7.33",
|
||||
"gatsby": "^1.9.236",
|
||||
"gatsby-link": "^1.6.39",
|
||||
"gatsby-plugin-sharp": "^1.6.41",
|
||||
"gatsby-remark-autolink-headers": "^1.4.13",
|
||||
"gatsby-remark-copy-linked-files": "^1.5.30",
|
||||
"gatsby-remark-images": "^1.5.56",
|
||||
"gatsby-remark-smartypants": "^1.4.12",
|
||||
"gatsby-source-filesystem": "^1.5.27",
|
||||
"gatsby-transformer-remark": "^1.7.37",
|
||||
"gh-pages": "^1.1.0",
|
||||
"global": "^4.3.2",
|
||||
"highlight.js": "^9.12.0",
|
||||
|
@ -48,7 +48,7 @@ With this addon, you can switch between background colors and background images
|
||||
|
||||
### [Viewport](https://github.com/storybooks/storybook/tree/master/addons/viewport)
|
||||
|
||||
Viewport allows your stories to be displayed in different sizes and layouts in [Storybook](https://storybookjs.org). This helps build responsive components inside of Storybook.
|
||||
Viewport allows your stories to be displayed in different sizes and layouts in [Storybook](https://storybook.js.org). This helps build responsive components inside of Storybook.
|
||||
|
||||
## Community Addons
|
||||
|
||||
|
@ -165,3 +165,19 @@ storiesOf('My Panel', module)
|
||||
}
|
||||
}));
|
||||
```
|
||||
## Trouble Shooting
|
||||
|
||||
If you have problems running @angular/cli using "ng serve" after install specifically the following error:
|
||||
|
||||
```ERROR in node_modules/@storybook/angular/index.d.ts(31,44): error TS2304: Cannot find name 'NodeRequire'.```
|
||||
|
||||
You may need to exclude your stories from being compiled when running your angular dev environment. To do this add "stories", "\*\*/\*.stories.ts" to the exclude section in src/app/tsconfig.app.json:
|
||||
|
||||
```json
|
||||
{
|
||||
"exclude": [
|
||||
"stories",
|
||||
"**/*.stories.ts"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
@ -11,7 +11,7 @@ You may have tried to use our quick start guide to setup your project for Storyb
|
||||
|
||||
Storybook has its own Webpack setup and a dev server. Webpack setup is very similar to [Create React App](https://github.com/facebookincubator/create-react-app), but allows you to configure as you want.
|
||||
|
||||
In this guide, we are trying to set up Storybook for your React project.
|
||||
In this guide, we will set up Storybook for your React project.
|
||||
|
||||
## Table of contents
|
||||
|
||||
|
@ -16,6 +16,5 @@ You can also build a [static version](/basics/exporting-storybook) of your story
|
||||
|
||||
Here are some featured storybooks that you can reference to see how Storybook works:
|
||||
|
||||
- [React Button](http://kadira-samples.github.io/react-button) - [source](https://github.com/kadira-samples/react-button)
|
||||
- [Demo of React Dates](http://airbnb.io/react-dates/) - [source](https://github.com/airbnb/react-dates)
|
||||
- [Demo of React Native Web](http://necolas.github.io/react-native-web/storybook/) - [source](https://github.com/necolas/react-native-web)
|
||||
|
@ -19,7 +19,7 @@ Specifically, testing is important when working with teams since it allows diffe
|
||||
|
||||
## Different Aspects of UI Testing
|
||||
|
||||
We refer UI for many things. To put this in focus, let's narrow it down to React based user interfaces.
|
||||
We refer to UI for many things. To put this in focus, let's narrow it down to React based user interfaces.
|
||||
|
||||
### 1. Structural Testing
|
||||
|
||||
@ -30,7 +30,7 @@ For an example, let's say we have a "login component" as shown below:
|
||||
|
||||
For structural testing, we are testing whether or not it has following content:
|
||||
|
||||
- A title with "Login in to Facebook"
|
||||
- A title with "Log in to Facebook"
|
||||
- Two inputs for the username and password.
|
||||
- A submit button.
|
||||
- An error screen to show errors.
|
||||
|
360
docs/yarn.lock
@ -2,9 +2,9 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@storybook/addon-actions@^3.3.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.3.14.tgz#b78e707b32130ad16ea8a0af62a66f23b5df502b"
|
||||
"@storybook/addon-actions@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.3.15.tgz#2831e52947dc258208dd17804b479f7acc62d859"
|
||||
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.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.3.14.tgz#1de63e9b3819927fbb2f963fdabc65f86fde33cc"
|
||||
"@storybook/addon-links@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.3.15.tgz#b0ad4151de729aaa134ece86947e9df951583afe"
|
||||
dependencies:
|
||||
"@storybook/components" "^3.3.14"
|
||||
"@storybook/components" "^3.3.15"
|
||||
global "^4.3.2"
|
||||
prop-types "^15.5.10"
|
||||
|
||||
"@storybook/addons@^3.3.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.3.14.tgz#20a65085b834898ea6154b9061ebc65a74c6cb33"
|
||||
"@storybook/addons@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.3.15.tgz#564c5c7a8759b56fc566c4d1e983856bf8994a85"
|
||||
|
||||
"@storybook/channel-postmessage@^3.3.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.3.14.tgz#324fe89323b10fe300c746b452ec0dc7e2f5d72c"
|
||||
"@storybook/channel-postmessage@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.3.15.tgz#d7e0b94978549d87f58e901021e8e1cee093e71e"
|
||||
dependencies:
|
||||
"@storybook/channels" "^3.3.14"
|
||||
"@storybook/channels" "^3.3.15"
|
||||
global "^4.3.2"
|
||||
json-stringify-safe "^5.0.1"
|
||||
|
||||
"@storybook/channels@^3.3.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.3.14.tgz#b43f767f7775bb17cec5ab0696f918a475043df9"
|
||||
"@storybook/channels@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.3.15.tgz#42179cf0a1f19cd28bbd5e3796e6833fd2e40642"
|
||||
|
||||
"@storybook/client-logger@^3.3.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.3.14.tgz#03d5bc6036a8e82351a349bec11a8c89f06c901e"
|
||||
"@storybook/client-logger@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.3.15.tgz#d1ae40bcbd537bae1896531f8f099a963d0fdeff"
|
||||
|
||||
"@storybook/components@^3.3.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.3.14.tgz#84ffcb5ac6a7d40e145402ed0d1521e6ad1b2d4d"
|
||||
"@storybook/components@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.3.15.tgz#50dc213958b18a0e64c1624c50bdfdaf023609aa"
|
||||
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.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.3.14.tgz#c769a0763053ff6d32d52d29172fb61acab1122f"
|
||||
"@storybook/node-logger@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.3.15.tgz#57e88b941ed516d86ffca0b723e3685e61c7ff6b"
|
||||
dependencies:
|
||||
chalk "^2.3.0"
|
||||
npmlog "^4.1.2"
|
||||
@ -94,17 +94,17 @@
|
||||
dependencies:
|
||||
babel-runtime "^6.5.0"
|
||||
|
||||
"@storybook/react@^3.3.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.3.14.tgz#89a11e786846b7bcbca8a2baf8972733b3609ab2"
|
||||
"@storybook/react@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.3.15.tgz#8d9eaac77e6e8597fccb74d3cf2405b7f0827760"
|
||||
dependencies:
|
||||
"@storybook/addon-actions" "^3.3.14"
|
||||
"@storybook/addon-links" "^3.3.14"
|
||||
"@storybook/addons" "^3.3.14"
|
||||
"@storybook/channel-postmessage" "^3.3.14"
|
||||
"@storybook/client-logger" "^3.3.14"
|
||||
"@storybook/node-logger" "^3.3.14"
|
||||
"@storybook/ui" "^3.3.14"
|
||||
"@storybook/addon-actions" "^3.3.15"
|
||||
"@storybook/addon-links" "^3.3.15"
|
||||
"@storybook/addons" "^3.3.15"
|
||||
"@storybook/channel-postmessage" "^3.3.15"
|
||||
"@storybook/client-logger" "^3.3.15"
|
||||
"@storybook/node-logger" "^3.3.15"
|
||||
"@storybook/ui" "^3.3.15"
|
||||
airbnb-js-shims "^1.4.0"
|
||||
autoprefixer "^7.2.3"
|
||||
babel-loader "^7.1.2"
|
||||
@ -156,11 +156,11 @@
|
||||
webpack-dev-middleware "^1.12.2"
|
||||
webpack-hot-middleware "^2.21.0"
|
||||
|
||||
"@storybook/ui@^3.3.14":
|
||||
version "3.3.14"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.3.14.tgz#85fdbb08d77edf79e8d4a3dee42673157e4b132d"
|
||||
"@storybook/ui@^3.3.15":
|
||||
version "3.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.3.15.tgz#6430c18990461e5c9f4db08ec497b5fb9541a654"
|
||||
dependencies:
|
||||
"@storybook/components" "^3.3.14"
|
||||
"@storybook/components" "^3.3.15"
|
||||
"@storybook/mantra-core" "^1.7.2"
|
||||
"@storybook/podda" "^1.2.3"
|
||||
"@storybook/react-komposer" "^2.0.3"
|
||||
@ -184,6 +184,30 @@
|
||||
react-treebeard "^2.1.0"
|
||||
redux "^3.7.2"
|
||||
|
||||
"@types/configstore@^2.1.1":
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/configstore/-/configstore-2.1.1.tgz#cd1e8553633ad3185c3f2f239ecff5d2643e92b6"
|
||||
|
||||
"@types/debug@^0.0.29":
|
||||
version "0.0.29"
|
||||
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.29.tgz#a1e514adfbd92f03a224ba54d693111dbf1f3754"
|
||||
|
||||
"@types/events@*":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86"
|
||||
|
||||
"@types/get-port@^0.0.4":
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-0.0.4.tgz#eb6bb7423d9f888b632660dc7d2fd3e69a35643e"
|
||||
|
||||
"@types/glob@^5.0.30":
|
||||
version "5.0.35"
|
||||
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.35.tgz#1ae151c802cece940443b5ac246925c85189f32a"
|
||||
dependencies:
|
||||
"@types/events" "*"
|
||||
"@types/minimatch" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/history@*", "@types/history@^4.6.2":
|
||||
version "4.6.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.6.2.tgz#12cfaba693ba20f114ed5765467ff25fdf67ddb0"
|
||||
@ -192,6 +216,14 @@
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/inline-style-prefixer/-/inline-style-prefixer-3.0.1.tgz#8541e636b029124b747952e9a28848286d2b5bf6"
|
||||
|
||||
"@types/minimatch@*":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||
|
||||
"@types/mkdirp@^0.3.29":
|
||||
version "0.3.29"
|
||||
resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.3.29.tgz#7f2ad7ec55f914482fc9b1ec4bb1ae6028d46066"
|
||||
|
||||
"@types/node@*":
|
||||
version "9.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.0.tgz#b85a0bcf1e1cc84eb4901b7e96966aedc6f078d1"
|
||||
@ -200,6 +232,10 @@
|
||||
version "6.0.90"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.90.tgz#0ed74833fa1b73dcdb9409dcb1c97ec0a8b13b02"
|
||||
|
||||
"@types/node@^7.0.11":
|
||||
version "7.0.56"
|
||||
resolved "http://registry.npmjs.org/@types/node/-/node-7.0.56.tgz#b6b659049191822be43c14610c1785d4b9cddecf"
|
||||
|
||||
"@types/react-router-dom@^4.2.2":
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-4.2.3.tgz#06e0b67ff536adc0681dffdbe592ae91fb85887d"
|
||||
@ -223,6 +259,10 @@
|
||||
version "16.0.22"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.22.tgz#19ad106e124aceebd2b4d430a278d55413ee8759"
|
||||
|
||||
"@types/tmp@^0.0.32":
|
||||
version "0.0.32"
|
||||
resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.32.tgz#0d3cb31022f8427ea58c008af32b80da126ca4e3"
|
||||
|
||||
abbrev@1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
@ -2559,6 +2599,10 @@ comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1:
|
||||
dependencies:
|
||||
trim "0.0.1"
|
||||
|
||||
command-exists@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.2.tgz#12819c64faf95446ec0ae07fe6cafb6eb3708b22"
|
||||
|
||||
commander@2.11.0, commander@^2.11.0, commander@^2.9.0:
|
||||
version "2.11.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
|
||||
@ -3036,7 +3080,7 @@ death@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318"
|
||||
|
||||
debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@~2.6.4, debug@~2.6.6, debug@~2.6.9:
|
||||
debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8, debug@~2.6.4, debug@~2.6.6, debug@~2.6.9:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
dependencies:
|
||||
@ -3229,6 +3273,27 @@ detect-port@1.2.1, detect-port@^1.2.1:
|
||||
address "^1.0.1"
|
||||
debug "^2.6.0"
|
||||
|
||||
devcert-san@^0.3.3:
|
||||
version "0.3.3"
|
||||
resolved "https://registry.yarnpkg.com/devcert-san/-/devcert-san-0.3.3.tgz#aa77244741b2d831771c011f22ee25e396ad4ba9"
|
||||
dependencies:
|
||||
"@types/configstore" "^2.1.1"
|
||||
"@types/debug" "^0.0.29"
|
||||
"@types/get-port" "^0.0.4"
|
||||
"@types/glob" "^5.0.30"
|
||||
"@types/mkdirp" "^0.3.29"
|
||||
"@types/node" "^7.0.11"
|
||||
"@types/tmp" "^0.0.32"
|
||||
command-exists "^1.2.2"
|
||||
configstore "^3.0.0"
|
||||
debug "^2.6.3"
|
||||
eol "^0.8.1"
|
||||
get-port "^3.0.0"
|
||||
glob "^7.1.1"
|
||||
mkdirp "^0.5.1"
|
||||
tmp "^0.0.31"
|
||||
tslib "^1.6.0"
|
||||
|
||||
diffie-hellman@^5.0.0:
|
||||
version "5.0.2"
|
||||
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
|
||||
@ -3511,6 +3576,10 @@ entities@^1.1.1, entities@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
|
||||
|
||||
eol@^0.8.1:
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/eol/-/eol-0.8.1.tgz#defc3224990c7eca73bb34461a56cf9dc24761d0"
|
||||
|
||||
err-code@^1.0.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
|
||||
@ -3845,6 +3914,10 @@ expand-range@^1.8.1:
|
||||
dependencies:
|
||||
fill-range "^2.1.0"
|
||||
|
||||
expand-template@^1.0.2:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc"
|
||||
|
||||
expand-tilde@^1.2.0, expand-tilde@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449"
|
||||
@ -4286,6 +4359,10 @@ front-matter@^2.1.0:
|
||||
dependencies:
|
||||
js-yaml "^3.4.6"
|
||||
|
||||
fs-copy-file-sync@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fs-copy-file-sync/-/fs-copy-file-sync-1.0.1.tgz#fc93d25af984ab94b8a751c3e1df055d1afea204"
|
||||
|
||||
fs-exists-sync@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
|
||||
@ -4365,15 +4442,22 @@ fuse.js@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.2.0.tgz#f0448e8069855bf2a3e683cdc1d320e7e2a07ef4"
|
||||
|
||||
gatsby-1-config-css-modules@^1.0.9:
|
||||
version "1.0.9"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-1-config-css-modules/-/gatsby-1-config-css-modules-1.0.9.tgz#ae7ebffcaea4b1cc821951b71c123107d697bfaa"
|
||||
gatsby-1-config-css-modules@^1.0.10:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-1-config-css-modules/-/gatsby-1-config-css-modules-1.0.10.tgz#56967add247213d56167715539229afe39d4ccf6"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
|
||||
gatsby-cli@^1.1.44:
|
||||
version "1.1.44"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-1.1.44.tgz#74c881e01e09d406bb8cd81d3397c2950d3560d9"
|
||||
gatsby-1-config-extract-plugin@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-1-config-extract-plugin/-/gatsby-1-config-extract-plugin-1.0.2.tgz#2ca0779f212009d06e444cb084d182f957b7190c"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
extract-text-webpack-plugin "^1.0.1"
|
||||
|
||||
gatsby-cli@^1.1.46:
|
||||
version "1.1.46"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-1.1.46.tgz#ebbca830805c63f6ef5be0a0c4d308dd597ad10b"
|
||||
dependencies:
|
||||
babel-code-frame "^6.26.0"
|
||||
babel-runtime "^6.26.0"
|
||||
@ -4393,9 +4477,9 @@ gatsby-cli@^1.1.44:
|
||||
yargs "^8.0.2"
|
||||
yurnalist "^0.2.1"
|
||||
|
||||
gatsby-link@^1.6.37:
|
||||
version "1.6.37"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-1.6.37.tgz#d132290c0239dc2e11a9106353c586f969194673"
|
||||
gatsby-link@^1.6.39:
|
||||
version "1.6.39"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-1.6.39.tgz#4189d26a66476b61fb524c2c8dd97b74aee728d4"
|
||||
dependencies:
|
||||
"@types/history" "^4.6.2"
|
||||
"@types/react-router-dom" "^4.2.2"
|
||||
@ -4403,16 +4487,16 @@ gatsby-link@^1.6.37:
|
||||
prop-types "^15.5.8"
|
||||
ric "^1.3.0"
|
||||
|
||||
gatsby-module-loader@^1.0.10:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-module-loader/-/gatsby-module-loader-1.0.10.tgz#32560de487ea5523097917bc1dc76b9a1247bbe9"
|
||||
gatsby-module-loader@^1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-module-loader/-/gatsby-module-loader-1.0.11.tgz#35f269456f6a6d85c693bdc2b3b3b3432987f55b"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
loader-utils "^0.2.16"
|
||||
|
||||
gatsby-plugin-sharp@^1.6.35:
|
||||
version "1.6.35"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-plugin-sharp/-/gatsby-plugin-sharp-1.6.35.tgz#3ef8578163b47842377f14825c98d27dc32f061d"
|
||||
gatsby-plugin-sharp@^1.6.39:
|
||||
version "1.6.39"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-plugin-sharp/-/gatsby-plugin-sharp-1.6.39.tgz#842a814f0f68470b703830e36c51c95083678265"
|
||||
dependencies:
|
||||
async "^2.1.2"
|
||||
babel-runtime "^6.26.0"
|
||||
@ -4424,29 +4508,46 @@ gatsby-plugin-sharp@^1.6.35:
|
||||
potrace "^2.1.1"
|
||||
probe-image-size "^3.2.0"
|
||||
progress "^1.1.8"
|
||||
sharp "^0.19.1"
|
||||
sharp "^0.20.0"
|
||||
svgo "^0.7.2"
|
||||
|
||||
gatsby-react-router-scroll@^1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-1.0.11.tgz#1ad3bdfc7f0a897abf24e4d89111ee49de516691"
|
||||
gatsby-plugin-sharp@^1.6.41:
|
||||
version "1.6.41"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-plugin-sharp/-/gatsby-plugin-sharp-1.6.41.tgz#87dc28d226d70e63408bf31983268efdf10e8b1d"
|
||||
dependencies:
|
||||
async "^2.1.2"
|
||||
babel-runtime "^6.26.0"
|
||||
bluebird "^3.5.0"
|
||||
imagemin "^5.2.2"
|
||||
imagemin-pngquant "^5.0.0"
|
||||
imagemin-webp "^4.0.0"
|
||||
lodash "^4.17.4"
|
||||
potrace "^2.1.1"
|
||||
probe-image-size "^3.2.0"
|
||||
progress "^1.1.8"
|
||||
sharp "^0.20.0"
|
||||
svgo "^0.7.2"
|
||||
|
||||
gatsby-react-router-scroll@^1.0.13:
|
||||
version "1.0.13"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-1.0.13.tgz#d1cfd43c334497ad174ae9409c24bb5d4dcda3aa"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
scroll-behavior "^0.9.9"
|
||||
warning "^3.0.0"
|
||||
|
||||
gatsby-remark-autolink-headers@^1.4.12:
|
||||
version "1.4.12"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-remark-autolink-headers/-/gatsby-remark-autolink-headers-1.4.12.tgz#98d1cc3b2d08dd24fe145db6360d7afb04c3874c"
|
||||
gatsby-remark-autolink-headers@^1.4.13:
|
||||
version "1.4.13"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-remark-autolink-headers/-/gatsby-remark-autolink-headers-1.4.13.tgz#226ac480149a1d6d7715889b10b5906636106cb9"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
github-slugger "^1.1.1"
|
||||
mdast-util-to-string "^1.0.2"
|
||||
unist-util-visit "^1.1.1"
|
||||
|
||||
gatsby-remark-copy-linked-files@^1.5.28:
|
||||
version "1.5.28"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-1.5.28.tgz#e590a604f4758da7e88ec7c59e12ee0b7bc845ef"
|
||||
gatsby-remark-copy-linked-files@^1.5.30:
|
||||
version "1.5.30"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-1.5.30.tgz#5834fb6d4a8a50c58e7e91309bd0af396474dd29"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
cheerio "^1.0.0-rc.2"
|
||||
@ -4457,30 +4558,30 @@ gatsby-remark-copy-linked-files@^1.5.28:
|
||||
probe-image-size "^3.2.0"
|
||||
unist-util-visit "^1.1.1"
|
||||
|
||||
gatsby-remark-images@^1.5.51:
|
||||
version "1.5.51"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-remark-images/-/gatsby-remark-images-1.5.51.tgz#0c32af341cbc777cbfeb023355a85d5791a4fdb0"
|
||||
gatsby-remark-images@^1.5.56:
|
||||
version "1.5.56"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-remark-images/-/gatsby-remark-images-1.5.56.tgz#f3dd9323b6eed803d5388a3a688ae22c82578d97"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
cheerio "^1.0.0-rc.2"
|
||||
gatsby-plugin-sharp "^1.6.35"
|
||||
gatsby-plugin-sharp "^1.6.39"
|
||||
is-relative-url "^2.0.0"
|
||||
lodash "^4.17.4"
|
||||
slash "^1.0.0"
|
||||
unist-util-select "^1.5.0"
|
||||
|
||||
gatsby-remark-smartypants@^1.4.11:
|
||||
version "1.4.11"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-remark-smartypants/-/gatsby-remark-smartypants-1.4.11.tgz#86e756aa9f093f25627961b00c14bcec6ebd1894"
|
||||
gatsby-remark-smartypants@^1.4.12:
|
||||
version "1.4.12"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-remark-smartypants/-/gatsby-remark-smartypants-1.4.12.tgz#d783518b8bf0943aa78def717fdf2e9b9f893552"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
retext "^4.0.0"
|
||||
retext-smartypants "^2.0.0"
|
||||
unist-util-visit "^1.1.1"
|
||||
|
||||
gatsby-source-filesystem@^1.5.24:
|
||||
version "1.5.24"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-1.5.24.tgz#5d1ff9b3994fff967be92f6fea27e6cf1ba75fbe"
|
||||
gatsby-source-filesystem@^1.5.27:
|
||||
version "1.5.27"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-1.5.27.tgz#0063e9e4c87f9172a1a08296d1c4c27d03f97d01"
|
||||
dependencies:
|
||||
babel-cli "^6.26.0"
|
||||
babel-runtime "^6.26.0"
|
||||
@ -4494,9 +4595,9 @@ gatsby-source-filesystem@^1.5.24:
|
||||
slash "^1.0.0"
|
||||
valid-url "^1.0.9"
|
||||
|
||||
gatsby-transformer-remark@^1.7.33:
|
||||
version "1.7.33"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-1.7.33.tgz#02fc88206bbdac989442c243c3229b6468e8999b"
|
||||
gatsby-transformer-remark@^1.7.37:
|
||||
version "1.7.37"
|
||||
resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-1.7.37.tgz#30ad37403a7dd647e69fc7696e024dade526a12f"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
bluebird "^3.5.0"
|
||||
@ -4519,9 +4620,9 @@ gatsby-transformer-remark@^1.7.33:
|
||||
unist-util-select "^1.5.0"
|
||||
unist-util-visit "^1.1.1"
|
||||
|
||||
gatsby@^1.9.216:
|
||||
version "1.9.216"
|
||||
resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.216.tgz#41269eb89150c871a62d11ae09a6efa3a8034dd3"
|
||||
gatsby@^1.9.236:
|
||||
version "1.9.236"
|
||||
resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.236.tgz#ece3784aac05be3ade58e6eb2e99c5557464e65c"
|
||||
dependencies:
|
||||
async "^2.1.2"
|
||||
babel-code-frame "^6.22.0"
|
||||
@ -4550,26 +4651,27 @@ gatsby@^1.9.216:
|
||||
debug "^2.6.0"
|
||||
del "^3.0.0"
|
||||
detect-port "^1.2.1"
|
||||
devcert-san "^0.3.3"
|
||||
domready "^1.0.8"
|
||||
dotenv "^4.0.0"
|
||||
express "^4.14.0"
|
||||
express-graphql "^0.6.6"
|
||||
extract-text-webpack-plugin "^1.0.1"
|
||||
fast-levenshtein "~2.0.4"
|
||||
file-loader "^0.9.0"
|
||||
flat "^2.0.1"
|
||||
friendly-errors-webpack-plugin "^1.6.1"
|
||||
front-matter "^2.1.0"
|
||||
fs-extra "^4.0.1"
|
||||
gatsby-1-config-css-modules "^1.0.9"
|
||||
gatsby-cli "^1.1.44"
|
||||
gatsby-link "^1.6.37"
|
||||
gatsby-module-loader "^1.0.10"
|
||||
gatsby-react-router-scroll "^1.0.11"
|
||||
gatsby-1-config-css-modules "^1.0.10"
|
||||
gatsby-1-config-extract-plugin "^1.0.2"
|
||||
gatsby-cli "^1.1.46"
|
||||
gatsby-link "^1.6.39"
|
||||
gatsby-module-loader "^1.0.11"
|
||||
gatsby-react-router-scroll "^1.0.13"
|
||||
glob "^7.1.1"
|
||||
graphql "^0.11.7"
|
||||
graphql-relay "^0.5.1"
|
||||
graphql-skip-limit "^1.0.10"
|
||||
graphql-skip-limit "^1.0.11"
|
||||
history "^4.6.2"
|
||||
invariant "^2.2.2"
|
||||
is-relative "^0.2.1"
|
||||
@ -4663,6 +4765,10 @@ get-params@^0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/get-params/-/get-params-0.1.2.tgz#bae0dfaba588a0c60d7834c0d8dc2ff60eeef2fe"
|
||||
|
||||
get-port@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc"
|
||||
|
||||
get-proxy@^1.0.1:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-1.1.0.tgz#894854491bc591b0f147d7ae570f5c678b7256eb"
|
||||
@ -4699,6 +4805,10 @@ gh-pages@^1.1.0:
|
||||
graceful-fs "4.1.11"
|
||||
rimraf "^2.6.2"
|
||||
|
||||
github-from-package@0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
|
||||
|
||||
github-slugger@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.0.tgz#8ada3286fd046d8951c3c952a8d7854cfd90fd9a"
|
||||
@ -4929,9 +5039,9 @@ graphql-relay@^0.5.1:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/graphql-relay/-/graphql-relay-0.5.3.tgz#56a78ac07c87d89795a34db6b8e9681b827be5b5"
|
||||
|
||||
graphql-skip-limit@^1.0.10:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/graphql-skip-limit/-/graphql-skip-limit-1.0.10.tgz#0923b8b2e333cfc5d47283fa3e376657a1378452"
|
||||
graphql-skip-limit@^1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/graphql-skip-limit/-/graphql-skip-limit-1.0.11.tgz#c6970d11bdfe7aa001f96c8ba41b9a93a6dc805c"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
graphql "^0.11.7"
|
||||
@ -7152,6 +7262,12 @@ no-case@^2.2.0:
|
||||
dependencies:
|
||||
lower-case "^1.1.1"
|
||||
|
||||
node-abi@^2.2.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986"
|
||||
dependencies:
|
||||
semver "^5.4.1"
|
||||
|
||||
node-dir@^0.1.10:
|
||||
version "0.1.17"
|
||||
resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
|
||||
@ -7265,6 +7381,10 @@ noms@0.0.0:
|
||||
inherits "^2.0.1"
|
||||
readable-stream "~1.0.31"
|
||||
|
||||
noop-logger@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
|
||||
|
||||
nopt@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
|
||||
@ -7314,7 +7434,7 @@ npmlog@2.0.3:
|
||||
are-we-there-yet "~1.1.2"
|
||||
gauge "~1.2.5"
|
||||
|
||||
npmlog@^4.0.2, npmlog@^4.1.2:
|
||||
npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
dependencies:
|
||||
@ -7520,7 +7640,7 @@ os-locale@^2.0.0:
|
||||
lcid "^1.0.0"
|
||||
mem "^1.1.0"
|
||||
|
||||
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
|
||||
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
|
||||
@ -8480,6 +8600,26 @@ potrace@^2.1.1:
|
||||
dependencies:
|
||||
jimp "^0.2.24"
|
||||
|
||||
prebuild-install@^2.5.1:
|
||||
version "2.5.1"
|
||||
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da"
|
||||
dependencies:
|
||||
detect-libc "^1.0.3"
|
||||
expand-template "^1.0.2"
|
||||
github-from-package "0.0.0"
|
||||
minimist "^1.2.0"
|
||||
mkdirp "^0.5.1"
|
||||
node-abi "^2.2.0"
|
||||
noop-logger "^0.1.1"
|
||||
npmlog "^4.0.1"
|
||||
os-homedir "^1.0.1"
|
||||
pump "^2.0.1"
|
||||
rc "^1.1.6"
|
||||
simple-get "^2.7.0"
|
||||
tar-fs "^1.13.0"
|
||||
tunnel-agent "^0.6.0"
|
||||
which-pm-runs "^1.0.0"
|
||||
|
||||
prepend-http@^1.0.0, prepend-http@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
|
||||
@ -8619,6 +8759,13 @@ pump@^1.0.0:
|
||||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
pump@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
|
||||
dependencies:
|
||||
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"
|
||||
@ -9727,7 +9874,7 @@ semver@^4.0.3, semver@^4.3.3:
|
||||
version "4.3.6"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
|
||||
|
||||
semver@^5.5.0:
|
||||
semver@^5.4.1, semver@^5.5.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
|
||||
|
||||
@ -9883,13 +10030,16 @@ shallowequal@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.0.2.tgz#1561dbdefb8c01408100319085764da3fcf83f8f"
|
||||
|
||||
sharp@^0.19.1:
|
||||
version "0.19.1"
|
||||
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.19.1.tgz#819bf11f5c3f4ff32eb465f255b5fb87e43ceea1"
|
||||
sharp@^0.20.0:
|
||||
version "0.20.0"
|
||||
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.20.0.tgz#2ff9f1ae11f068ce7d7591f531cad52c7821d033"
|
||||
dependencies:
|
||||
color "^3.0.0"
|
||||
detect-libc "^1.0.3"
|
||||
fs-copy-file-sync "^1.0.1"
|
||||
nan "^2.9.2"
|
||||
npmlog "^4.1.2"
|
||||
prebuild-install "^2.5.1"
|
||||
semver "^5.5.0"
|
||||
simple-get "^2.7.0"
|
||||
tar "^4.4.0"
|
||||
@ -10704,6 +10854,12 @@ tinycolor2@^1.1.2:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
|
||||
|
||||
tmp@^0.0.31:
|
||||
version "0.0.31"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
|
||||
dependencies:
|
||||
os-tmpdir "~1.0.1"
|
||||
|
||||
tmp@^0.0.33:
|
||||
version "0.0.33"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
||||
@ -10809,6 +10965,10 @@ trough@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86"
|
||||
|
||||
tslib@^1.6.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8"
|
||||
|
||||
tty-browserify@0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
|
||||
@ -11587,6 +11747,10 @@ which-module@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||
|
||||
which-pm-runs@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
|
||||
|
||||
which@^1.0.9, which@^1.1.1, which@^1.2.12, which@^1.2.14, which@^1.2.9:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "angular-cli",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"private": true,
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
@ -13,37 +13,38 @@
|
||||
"test": "ng test"
|
||||
},
|
||||
"dependencies": {
|
||||
"@angular/common": "^5.2.6",
|
||||
"@angular/compiler": "^5.2.6",
|
||||
"@angular/core": "^5.2.6",
|
||||
"@angular/forms": "^5.2.6",
|
||||
"@angular/platform-browser": "^5.2.6",
|
||||
"@angular/platform-browser-dynamic": "^5.2.6",
|
||||
"@angular/common": "^5.2.9",
|
||||
"@angular/compiler": "^5.2.9",
|
||||
"@angular/core": "^5.2.9",
|
||||
"@angular/forms": "^5.2.9",
|
||||
"@angular/platform-browser": "^5.2.9",
|
||||
"@angular/platform-browser-dynamic": "^5.2.9",
|
||||
"@ngrx/store": "^5.2.0",
|
||||
"core-js": "^2.4.1",
|
||||
"rxjs": "^5.4.2",
|
||||
"rxjs": "^5.5.7",
|
||||
"zone.js": "^0.8.20"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular/cli": "1.7.1",
|
||||
"@angular/compiler-cli": "^5.2.6",
|
||||
"@storybook/addon-actions": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-knobs": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-links": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-notes": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-options": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-storyshots": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-storysource": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/angular": "^3.4.0-alpha.9",
|
||||
"@angular/cli": "1.7.3",
|
||||
"@angular/compiler-cli": "^5.2.9",
|
||||
"@storybook/addon-actions": "3.4.0-rc.3",
|
||||
"@storybook/addon-knobs": "3.4.0-rc.3",
|
||||
"@storybook/addon-links": "3.4.0-rc.3",
|
||||
"@storybook/addon-notes": "3.4.0-rc.3",
|
||||
"@storybook/addon-options": "3.4.0-rc.3",
|
||||
"@storybook/addon-storyshots": "3.4.0-rc.3",
|
||||
"@storybook/addon-storysource": "3.4.0-rc.3",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"@storybook/angular": "3.4.0-rc.3",
|
||||
"@types/jasmine": "~2.8.6",
|
||||
"@types/node": "~9.4.6",
|
||||
"@types/node": "~9.4.7",
|
||||
"global": "^4.3.2",
|
||||
"jasmine-core": "~2.99.1",
|
||||
"jasmine-spec-reporter": "~4.2.1",
|
||||
"karma": "~2.0.0",
|
||||
"karma-chrome-launcher": "~2.2.0",
|
||||
"karma-cli": "~1.0.1",
|
||||
"karma-coverage-istanbul-reporter": "^1.4.1",
|
||||
"karma-coverage-istanbul-reporter": "^1.4.2",
|
||||
"karma-jasmine": "~1.1.0",
|
||||
"karma-jasmine-html-reporter": "^0.2.2",
|
||||
"protractor": "~5.3.0",
|
||||
|
@ -7,7 +7,41 @@ exports[`Storyshots Metadata|Individual Individual 1 1`] = `
|
||||
target={[Function ViewContainerRef_]}
|
||||
>
|
||||
<ng-component>
|
||||
<storybook-simple-token-component />
|
||||
<storybook-simple-token-component
|
||||
ng-reflect-name="Prop Name"
|
||||
>
|
||||
|
||||
|
||||
<h3>
|
||||
Prop Name
|
||||
</h3>
|
||||
|
||||
|
||||
<p>
|
||||
Items:
|
||||
</p>
|
||||
|
||||
|
||||
<ul>
|
||||
|
||||
|
||||
|
||||
<li>
|
||||
|
||||
Joe
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
Jane
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
</storybook-simple-token-component>
|
||||
</ng-component>
|
||||
</storybook-dynamic-app-root>
|
||||
`;
|
||||
|
@ -0,0 +1,31 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Storyshots ngrx|Store With component 1`] = `
|
||||
<storybook-dynamic-app-root
|
||||
cfr={[Function CodegenComponentFactoryResolver]}
|
||||
data={[Function Object]}
|
||||
target={[Function ViewContainerRef_]}
|
||||
>
|
||||
<storybook-comp-with-store>
|
||||
<div>
|
||||
Store is injected
|
||||
</div>
|
||||
</storybook-comp-with-store>
|
||||
</storybook-dynamic-app-root>
|
||||
`;
|
||||
|
||||
exports[`Storyshots ngrx|Store With template 1`] = `
|
||||
<storybook-dynamic-app-root
|
||||
cfr={[Function CodegenComponentFactoryResolver]}
|
||||
data={[Function Object]}
|
||||
target={[Function ViewContainerRef_]}
|
||||
>
|
||||
<ng-component>
|
||||
<storybook-comp-with-store>
|
||||
<div>
|
||||
Store is injected
|
||||
</div>
|
||||
</storybook-comp-with-store>
|
||||
</ng-component>
|
||||
</storybook-dynamic-app-root>
|
||||
`;
|
@ -9,7 +9,7 @@ storiesOf('Metadata|Individual', module)
|
||||
},
|
||||
moduleMetadata: {
|
||||
imports: [],
|
||||
declarations: [],
|
||||
declarations: [TokenComponent],
|
||||
providers: [
|
||||
{
|
||||
provide: ITEMS,
|
||||
|
17
examples/angular-cli/src/stories/ngrx-store.stories.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { StoreModule } from '@ngrx/store';
|
||||
import { storiesOf, moduleMetadata } from '@storybook/angular';
|
||||
import { WithStoreComponent } from './ngrx/WithStoreComponent';
|
||||
|
||||
storiesOf('ngrx|Store', module)
|
||||
.addDecorator(
|
||||
moduleMetadata({
|
||||
imports: [StoreModule.forRoot({})],
|
||||
declarations: [WithStoreComponent],
|
||||
})
|
||||
)
|
||||
.add('With component', () => ({
|
||||
component: WithStoreComponent,
|
||||
}))
|
||||
.add('With template', () => ({
|
||||
template: `<storybook-comp-with-store></storybook-comp-with-store>`,
|
||||
}));
|
18
examples/angular-cli/src/stories/ngrx/WithStoreComponent.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { Store } from '@ngrx/store';
|
||||
|
||||
@Component({
|
||||
selector: 'storybook-comp-with-store',
|
||||
template: '<div>{{this.getSotreState()}}</div>',
|
||||
})
|
||||
export class WithStoreComponent {
|
||||
private store: Store<any>;
|
||||
|
||||
constructor(store: Store<any>) {
|
||||
this.store = store;
|
||||
}
|
||||
|
||||
getSotreState() {
|
||||
return this.store === undefined ? 'Store is NOT injected' : 'Store is injected';
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cra-kitchen-sink",
|
||||
"version": "3.4.0-alpha.9",
|
||||
"version": "3.4.0-rc.3",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "react-scripts build",
|
||||
@ -17,25 +17,25 @@
|
||||
"react-dom": "^16.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/addon-a11y": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-actions": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-backgrounds": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-centered": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-events": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-info": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-jest": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-knobs": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-links": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-notes": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-options": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-storyshots": "^3.4.0-alpha.9",
|
||||
"@storybook/addons": "^3.4.0-alpha.9",
|
||||
"@storybook/client-logger": "^3.4.0-alpha.9",
|
||||
"@storybook/react": "^3.4.0-alpha.9",
|
||||
"@storybook/addon-a11y": "3.4.0-rc.3",
|
||||
"@storybook/addon-actions": "3.4.0-rc.3",
|
||||
"@storybook/addon-backgrounds": "3.4.0-rc.3",
|
||||
"@storybook/addon-centered": "3.4.0-rc.3",
|
||||
"@storybook/addon-events": "3.4.0-rc.3",
|
||||
"@storybook/addon-info": "3.4.0-rc.3",
|
||||
"@storybook/addon-jest": "3.4.0-rc.3",
|
||||
"@storybook/addon-knobs": "3.4.0-rc.3",
|
||||
"@storybook/addon-links": "3.4.0-rc.3",
|
||||
"@storybook/addon-notes": "3.4.0-rc.3",
|
||||
"@storybook/addon-options": "3.4.0-rc.3",
|
||||
"@storybook/addon-storyshots": "3.4.0-rc.3",
|
||||
"@storybook/addons": "3.4.0-rc.3",
|
||||
"@storybook/client-logger": "3.4.0-rc.3",
|
||||
"@storybook/react": "3.4.0-rc.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"enzyme": "^3.3.0",
|
||||
"enzyme-adapter-react-16": "^1.1.0",
|
||||
"enzyme-to-json": "^3.3.1",
|
||||
"enzyme-to-json": "^3.3.3",
|
||||
"jest": "^20.0.4",
|
||||
"react-scripts": "^1.1.1",
|
||||
"webpack": "^3.11.0"
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { configure } from '@storybook/react';
|
||||
import { setOptions } from '@storybook/addon-options';
|
||||
import { configure as configureViewport, INITIAL_VIEWPORTS } from '@storybook/addon-viewport';
|
||||
import 'react-chromatic/storybook-addon';
|
||||
import addHeadWarning from './head-warning';
|
||||
import extraViewports from './extra-viewports.json';
|
||||
|
||||
addHeadWarning('Preview head not loaded', 'preview-head-not-loaded');
|
||||
addHeadWarning('Dotenv file not loaded', 'dotenv-file-not-loaded');
|
||||
@ -11,6 +13,13 @@ setOptions({
|
||||
hierarchyRootSeparator: /\|/,
|
||||
});
|
||||
|
||||
configureViewport({
|
||||
viewports: {
|
||||
...INITIAL_VIEWPORTS,
|
||||
...extraViewports,
|
||||
},
|
||||
});
|
||||
|
||||
function importAll(req) {
|
||||
req.keys().forEach(filename => req(filename));
|
||||
}
|
||||
|
16
examples/official-storybook/extra-viewports.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"kindleFire2": {
|
||||
"name": "Kindle Fire 2",
|
||||
"styles": {
|
||||
"width": "600px",
|
||||
"height": "963px"
|
||||
}
|
||||
},
|
||||
"kindleFireHD": {
|
||||
"name": "Kindle Fire HD",
|
||||
"styles": {
|
||||
"width": "533px",
|
||||
"height": "801px"
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 8.4 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 5.3 KiB |