From c1e359dedd19fd522e0c2ea383dd8bdfcaeef589 Mon Sep 17 00:00:00 2001 From: Tom Coleman Date: Thu, 22 Mar 2018 21:16:27 +1100 Subject: [PATCH 01/24] Refactor all startup code into `@storybook/core` also --- app/angular/package.json | 1 - app/angular/src/client/preview/index.js | 63 ++--------------------- app/polymer/package.json | 1 - app/polymer/src/client/preview/index.js | 63 ++--------------------- app/react/package.json | 1 - app/react/src/client/preview/index.js | 63 ++--------------------- app/vue/package.json | 1 - app/vue/src/client/preview/index.js | 66 ++----------------------- lib/core/package.json | 1 + lib/core/src/client/preview/index.js | 3 +- lib/core/src/client/preview/start.js | 65 ++++++++++++++++++++++++ yarn.lock | 2 +- 12 files changed, 84 insertions(+), 246 deletions(-) create mode 100644 lib/core/src/client/preview/start.js diff --git a/app/angular/package.json b/app/angular/package.json index 2eac21ae8e7..03ea8b24e07 100644 --- a/app/angular/package.json +++ b/app/angular/package.json @@ -49,7 +49,6 @@ "react": "^16.0.0", "react-dev-utils": "^5.0.0", "react-dom": "^16.0.0", - "redux": "^3.6.0", "sass-loader": "^6.0.7", "ts-loader": "^3.5.0", "uglifyjs-webpack-plugin": "^1.2.4", diff --git a/app/angular/src/client/preview/index.js b/app/angular/src/client/preview/index.js index 5f4e9bb8d16..b04f8439b60 100644 --- a/app/angular/src/client/preview/index.js +++ b/app/angular/src/client/preview/index.js @@ -1,30 +1,9 @@ -import { window, navigator } from 'global'; -import { createStore } from 'redux'; -import addons from '@storybook/addons'; -import createChannel from '@storybook/channel-postmessage'; -import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events'; -import { - StoryStore, - ClientApi, - ConfigApi, - Actions, - reducer, - syncUrlWithStore, -} from '@storybook/core/client'; +import { start } from '@storybook/core/client'; + import render from './render'; -// check whether we're running on node/browser -const isBrowser = - navigator && - navigator.userAgent && - navigator.userAgent !== 'storyshots' && - !(navigator.userAgent.indexOf('Node.js') > -1) && - !(navigator.userAgent.indexOf('jsdom') > -1); +const { clientApi, configApi, forceReRender } = start(render); -const storyStore = new StoryStore(); -const reduxStore = createStore(reducer); -const context = { storyStore, reduxStore }; -const clientApi = new ClientApi(context); export const { storiesOf, setAddon, @@ -34,39 +13,5 @@ export const { getStorybook, } = clientApi; -let channel; -if (isBrowser) { - // create preview channel - channel = createChannel({ page: 'preview' }); - channel.on('setCurrentStory', data => { - reduxStore.dispatch(Actions.selectStory(data.kind, data.story)); - }); - addons.setChannel(channel); - Object.assign(context, { channel }); - - syncUrlWithStore(reduxStore); - - // Handle keyboard shortcuts - window.onkeydown = handleKeyboardShortcuts(channel); -} - -// 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 }); export const { configure } = configApi; - -// initialize the UI -const renderUI = () => { - if (isBrowser) { - render(context); - } -}; - -reduxStore.subscribe(renderUI); - -export const forceReRender = () => render(context, true); +export { forceReRender }; diff --git a/app/polymer/package.json b/app/polymer/package.json index 4e3e10a74fb..51c0f1c1dab 100644 --- a/app/polymer/package.json +++ b/app/polymer/package.json @@ -51,7 +51,6 @@ "react": "^16.0.0", "react-dev-utils": "^5.0.0", "react-dom": "^16.0.0", - "redux": "^3.7.2", "uglifyjs-webpack-plugin": "^1.2.4", "util-deprecate": "^1.0.2", "webpack": "^3.11.0", diff --git a/app/polymer/src/client/preview/index.js b/app/polymer/src/client/preview/index.js index 063e2edb583..b04f8439b60 100644 --- a/app/polymer/src/client/preview/index.js +++ b/app/polymer/src/client/preview/index.js @@ -1,32 +1,9 @@ -import { createStore } from 'redux'; -import addons from '@storybook/addons'; -import { navigator, window } from 'global'; -import createChannel from '@storybook/channel-postmessage'; -import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events'; -import { - StoryStore, - ClientApi, - ConfigApi, - Actions, - reducer, - syncUrlWithStore, -} from '@storybook/core/client'; +import { start } from '@storybook/core/client'; import render from './render'; -// check whether we're running on node/browser -const isBrowser = - navigator && - navigator.userAgent && - navigator.userAgent !== 'storyshots' && - !(navigator.userAgent.indexOf('Node.js') > -1) && - !(navigator.userAgent.indexOf('jsdom') > -1); +const { clientApi, configApi, forceReRender } = start(render); -const storyStore = new StoryStore(); -const reduxStore = createStore(reducer); -const context = { storyStore, reduxStore }; - -const clientApi = new ClientApi(context); export const { storiesOf, setAddon, @@ -36,39 +13,5 @@ export const { getStorybook, } = clientApi; -let channel; -if (isBrowser) { - // setup preview channel - channel = createChannel({ page: 'preview' }); - channel.on('setCurrentStory', data => { - reduxStore.dispatch(Actions.selectStory(data.kind, data.story)); - }); - addons.setChannel(channel); - Object.assign(context, { channel }); - - syncUrlWithStore(reduxStore); - - // Handle keyboard shortcuts - window.onkeydown = handleKeyboardShortcuts(channel); -} - -// 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 }); export const { configure } = configApi; - -// initialize the UI -const renderUI = () => { - if (isBrowser) { - render(context); - } -}; - -reduxStore.subscribe(renderUI); - -export const forceReRender = () => render(context, true); +export { forceReRender }; diff --git a/app/react/package.json b/app/react/package.json index 0fdcf085682..ec33b5f4e67 100644 --- a/app/react/package.json +++ b/app/react/package.json @@ -57,7 +57,6 @@ "markdown-loader": "^2.0.2", "prop-types": "^15.6.1", "react-dev-utils": "^5.0.0", - "redux": "^3.7.2", "uglifyjs-webpack-plugin": "^1.2.4", "util-deprecate": "^1.0.2", "webpack": "^3.11.0", diff --git a/app/react/src/client/preview/index.js b/app/react/src/client/preview/index.js index 063e2edb583..b04f8439b60 100644 --- a/app/react/src/client/preview/index.js +++ b/app/react/src/client/preview/index.js @@ -1,32 +1,9 @@ -import { createStore } from 'redux'; -import addons from '@storybook/addons'; -import { navigator, window } from 'global'; -import createChannel from '@storybook/channel-postmessage'; -import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events'; -import { - StoryStore, - ClientApi, - ConfigApi, - Actions, - reducer, - syncUrlWithStore, -} from '@storybook/core/client'; +import { start } from '@storybook/core/client'; import render from './render'; -// check whether we're running on node/browser -const isBrowser = - navigator && - navigator.userAgent && - navigator.userAgent !== 'storyshots' && - !(navigator.userAgent.indexOf('Node.js') > -1) && - !(navigator.userAgent.indexOf('jsdom') > -1); +const { clientApi, configApi, forceReRender } = start(render); -const storyStore = new StoryStore(); -const reduxStore = createStore(reducer); -const context = { storyStore, reduxStore }; - -const clientApi = new ClientApi(context); export const { storiesOf, setAddon, @@ -36,39 +13,5 @@ export const { getStorybook, } = clientApi; -let channel; -if (isBrowser) { - // setup preview channel - channel = createChannel({ page: 'preview' }); - channel.on('setCurrentStory', data => { - reduxStore.dispatch(Actions.selectStory(data.kind, data.story)); - }); - addons.setChannel(channel); - Object.assign(context, { channel }); - - syncUrlWithStore(reduxStore); - - // Handle keyboard shortcuts - window.onkeydown = handleKeyboardShortcuts(channel); -} - -// 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 }); export const { configure } = configApi; - -// initialize the UI -const renderUI = () => { - if (isBrowser) { - render(context); - } -}; - -reduxStore.subscribe(renderUI); - -export const forceReRender = () => render(context, true); +export { forceReRender }; diff --git a/app/vue/package.json b/app/vue/package.json index ff14a4eab5a..cccabe61939 100644 --- a/app/vue/package.json +++ b/app/vue/package.json @@ -49,7 +49,6 @@ "react": "^16.2.0", "react-dev-utils": "^5.0.0", "react-dom": "^16.2.0", - "redux": "^3.7.2", "uglifyjs-webpack-plugin": "^1.2.4", "util-deprecate": "^1.0.2", "webpack": "^3.11.0", diff --git a/app/vue/src/client/preview/index.js b/app/vue/src/client/preview/index.js index c916f494d7a..b082c2545dd 100644 --- a/app/vue/src/client/preview/index.js +++ b/app/vue/src/client/preview/index.js @@ -1,30 +1,7 @@ -import { createStore } from 'redux'; -import addons from '@storybook/addons'; -import createChannel from '@storybook/channel-postmessage'; -import { navigator, window } from 'global'; -import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events'; -import { - StoryStore, - ClientApi, - ConfigApi, - Actions, - reducer, - syncUrlWithStore, -} from '@storybook/core/client'; +import { start } from '@storybook/core/client'; import render from './render'; -// check whether we're running on node/browser -const isBrowser = - navigator && - navigator.userAgent && - navigator.userAgent !== 'storyshots' && - !(navigator.userAgent.indexOf('Node.js') > -1) && - !(navigator.userAgent.indexOf('jsdom') > -1); - -const storyStore = new StoryStore(); -const reduxStore = createStore(reducer); - const createWrapperComponent = Target => ({ functional: true, render(h, c) { @@ -42,8 +19,9 @@ const decorateStory = (getStory, decorators) => }, getStory ); -const context = { storyStore, reduxStore, decorateStory }; -const clientApi = new ClientApi(context); + +const { clientApi, configApi, forceReRender } = start(render, { decorateStory }); + export const { storiesOf, setAddon, @@ -53,39 +31,5 @@ export const { getStorybook, } = clientApi; -let channel; -if (isBrowser) { - // create preview channel - channel = createChannel({ page: 'preview' }); - channel.on('setCurrentStory', data => { - reduxStore.dispatch(Actions.selectStory(data.kind, data.story)); - }); - addons.setChannel(channel); - Object.assign(context, { channel }); - - syncUrlWithStore(reduxStore); - - // Handle keyboard shortcuts - window.onkeydown = handleKeyboardShortcuts(channel); -} - -// 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 }); export const { configure } = configApi; - -// initialize the UI -const renderUI = () => { - if (isBrowser) { - render(context); - } -}; - -reduxStore.subscribe(renderUI); - -export const forceReRender = () => render(context, true); +export { forceReRender }; diff --git a/lib/core/package.json b/lib/core/package.json index 81a0181eb4a..79194b5daab 100644 --- a/lib/core/package.json +++ b/lib/core/package.json @@ -39,6 +39,7 @@ "qs": "^6.5.1", "react": "^16.0.0", "react-dom": "^16.0.0", + "redux": "^3.7.2", "serve-favicon": "^2.4.5", "shelljs": "^0.8.1", "style-loader": "^0.20.3", diff --git a/lib/core/src/client/preview/index.js b/lib/core/src/client/preview/index.js index f7597eec562..394707f5a58 100644 --- a/lib/core/src/client/preview/index.js +++ b/lib/core/src/client/preview/index.js @@ -1,3 +1,4 @@ +import start from './start'; import * as Actions from './actions'; import ClientApi from './client_api'; import ConfigApi from './config_api'; @@ -5,4 +6,4 @@ import StoryStore from './story_store'; import reducer from './reducer'; import syncUrlWithStore from './syncUrlWithStore'; -export default { Actions, ClientApi, ConfigApi, StoryStore, reducer, syncUrlWithStore }; +export default { start, Actions, ClientApi, ConfigApi, StoryStore, reducer, syncUrlWithStore }; diff --git a/lib/core/src/client/preview/start.js b/lib/core/src/client/preview/start.js new file mode 100644 index 00000000000..426f887ad95 --- /dev/null +++ b/lib/core/src/client/preview/start.js @@ -0,0 +1,65 @@ +import { createStore } from 'redux'; +import addons from '@storybook/addons'; +import { navigator, window } from 'global'; +import createChannel from '@storybook/channel-postmessage'; +import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events'; + +import StoryStore from './story_store'; +import ClientApi from './client_api'; +import ConfigApi from './config_api'; +import reducer from './reducer'; +import * as Actions from './actions'; +import syncUrlWithStore from './syncUrlWithStore'; + +export default function start(render, { decorateStory } = {}) { + // check whether we're running on node/browser + const isBrowser = + navigator && + navigator.userAgent && + navigator.userAgent !== 'storyshots' && + !(navigator.userAgent.indexOf('Node.js') > -1) && + !(navigator.userAgent.indexOf('jsdom') > -1); + + const storyStore = new StoryStore(); + const reduxStore = createStore(reducer); + const context = { storyStore, reduxStore, decorateStory }; + + const clientApi = new ClientApi(context); + + let channel; + if (isBrowser) { + // setup preview channel + channel = createChannel({ page: 'preview' }); + channel.on('setCurrentStory', data => { + reduxStore.dispatch(Actions.selectStory(data.kind, data.story)); + }); + addons.setChannel(channel); + Object.assign(context, { channel }); + + syncUrlWithStore(reduxStore); + + // Handle keyboard shortcuts + window.onkeydown = handleKeyboardShortcuts(channel); + } + + // 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 { clearDecorators } = clientApi; + const configApi = new ConfigApi({ clearDecorators, ...context }); + + // initialize the UI + const renderUI = () => { + if (isBrowser) { + render(context); + } + }; + + reduxStore.subscribe(renderUI); + + return { context, clientApi, configApi, forceReRender: () => render(context, true) }; +} diff --git a/yarn.lock b/yarn.lock index 7526c56f04f..d8095f937ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13395,7 +13395,7 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -redux@^3.6.0, redux@^3.7.2: +redux@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" dependencies: From fe018ae4fa78b9a1c8292556943b588d3b9a5bfb Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Thu, 22 Mar 2018 16:37:20 +0000 Subject: [PATCH 02/24] Update gatsby from 1.9.238 to 1.9.239 --- docs/package.json | 2 +- docs/yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/package.json b/docs/package.json index 750433075f0..2c23e1c98c2 100644 --- a/docs/package.json +++ b/docs/package.json @@ -24,7 +24,7 @@ "@storybook/react": "^3.3.15", "babel-loader": "^6.4.1", "bootstrap": "^3.3.7", - "gatsby": "^1.9.238", + "gatsby": "^1.9.239", "gatsby-link": "^1.6.39", "gatsby-plugin-sharp": "^1.6.41", "gatsby-remark-autolink-headers": "^1.4.13", diff --git a/docs/yarn.lock b/docs/yarn.lock index bde91dca7d0..b2f4da1d321 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -4455,9 +4455,9 @@ gatsby-1-config-extract-plugin@^1.0.2: 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" +gatsby-cli@^1.1.47: + version "1.1.47" + resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-1.1.47.tgz#75474ca674ea7f4e018825f3ad4ec070c915a7cd" dependencies: babel-code-frame "^6.26.0" babel-runtime "^6.26.0" @@ -4620,9 +4620,9 @@ gatsby-transformer-remark@^1.7.37: unist-util-select "^1.5.0" unist-util-visit "^1.1.1" -gatsby@^1.9.238: - version "1.9.238" - resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.238.tgz#b97354208e60140c2d7f2a369494b20e8138f540" +gatsby@^1.9.239: + version "1.9.239" + resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.239.tgz#ce5f111ac066da7354c01bc132a78f2466ece4ab" dependencies: async "^2.1.2" babel-code-frame "^6.22.0" @@ -4664,7 +4664,7 @@ gatsby@^1.9.238: fs-extra "^4.0.1" gatsby-1-config-css-modules "^1.0.10" gatsby-1-config-extract-plugin "^1.0.2" - gatsby-cli "^1.1.46" + gatsby-cli "^1.1.47" gatsby-link "^1.6.39" gatsby-module-loader "^1.0.11" gatsby-react-router-scroll "^1.0.14" From 0673cbb9d1ef347210eefbcc3cbb08030abc7e02 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:15:16 +0000 Subject: [PATCH 03/24] Update marked from 0.3.17 to 0.3.18 --- docs/package.json | 2 +- docs/yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/package.json b/docs/package.json index 2c23e1c98c2..08c6fd71084 100644 --- a/docs/package.json +++ b/docs/package.json @@ -37,7 +37,7 @@ "global": "^4.3.2", "highlight.js": "^9.12.0", "lodash": "^4.17.5", - "marked": "^0.3.17", + "marked": "^0.3.18", "prop-types": "^15.6.1", "react": "^15.6.1", "react-document-title": "^2.0.3", diff --git a/docs/yarn.lock b/docs/yarn.lock index b2f4da1d321..36dc2e88713 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -6847,9 +6847,9 @@ markdown-table@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c" -marked@^0.3.17: - version "0.3.17" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.17.tgz#607f06668b3c6b1246b28f13da76116ac1aa2d2b" +marked@^0.3.18: + version "0.3.18" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.18.tgz#3ef058cd926101849b92a7a7c15db18c7fc76b2f" marked@^0.3.6: version "0.3.9" From 4ae5ff85683f6f2f73b864add08fa189a7d4e129 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:15:58 +0000 Subject: [PATCH 04/24] Update eslint from 4.19.0 to 4.19.1 in / --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7b32f7124c4..234f234895d 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "danger": "^3.3.2", "enzyme": "^3.3.0", "enzyme-adapter-react-16": "^1.1.1", - "eslint": "^4.19.0", + "eslint": "^4.19.1", "eslint-config-airbnb": "^16.1.0", "eslint-config-prettier": "^2.9.0", "eslint-plugin-import": "^2.9.0", From f12734bdede213f3ce77ad6f3bb524c1c9060295 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:15:59 +0000 Subject: [PATCH 05/24] Update marked from 0.3.17 to 0.3.18 in addons/notes --- addons/notes/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/notes/package.json b/addons/notes/package.json index 133bc964fe6..c46f0a4892f 100644 --- a/addons/notes/package.json +++ b/addons/notes/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "babel-runtime": "^6.26.0", - "marked": "^0.3.17", + "marked": "^0.3.18", "prop-types": "^15.6.1", "util-deprecate": "^1.0.2" }, From f900f414c876a8f340f6aed4f1351bbf035a2353 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:15:59 +0000 Subject: [PATCH 06/24] Update autoprefixer from 8.1.0 to 8.2.0 in lib/core --- lib/core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/core/package.json b/lib/core/package.json index 79194b5daab..95054c8b5df 100644 --- a/lib/core/package.json +++ b/lib/core/package.json @@ -22,7 +22,7 @@ "@storybook/client-logger": "3.4.0-rc.3", "@storybook/node-logger": "3.4.0-rc.3", "@storybook/ui": "3.4.0-rc.3", - "autoprefixer": "^8.1.0", + "autoprefixer": "^8.2.0", "babel-runtime": "^6.26.0", "chalk": "^2.3.2", "commander": "^2.15.1", From a4f55229b5c8c17bdbf42fdcd160dd4eca1c7af5 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:16:00 +0000 Subject: [PATCH 07/24] Update @webcomponents/webcomponentsjs from 1.1.0 to 1.1.1 in app/polymer --- app/polymer/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/polymer/package.json b/app/polymer/package.json index 51c0f1c1dab..fb1e0dffc0f 100644 --- a/app/polymer/package.json +++ b/app/polymer/package.json @@ -28,7 +28,7 @@ "@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", + "@webcomponents/webcomponentsjs": "^1.1.1", "airbnb-js-shims": "^1.4.1", "babel-loader": "^7.1.4", "babel-plugin-macros": "^2.2.0", From 0328686bd9e79350be2a93fe4347da9cfe0a679b Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:16:01 +0000 Subject: [PATCH 08/24] Update @types/node from 9.4.7 to 9.6.0 in examples/angular-cli --- examples/angular-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/angular-cli/package.json b/examples/angular-cli/package.json index d0293c7cd63..a66a2ae6c72 100644 --- a/examples/angular-cli/package.json +++ b/examples/angular-cli/package.json @@ -37,7 +37,7 @@ "@storybook/addons": "3.4.0-rc.3", "@storybook/angular": "3.4.0-rc.3", "@types/jasmine": "~2.8.6", - "@types/node": "~9.4.7", + "@types/node": "~9.6.0", "global": "^4.3.2", "jasmine-core": "~2.99.1", "jasmine-spec-reporter": "~4.2.1", From 49ddad645616476863510f984328b6ef2890fee9 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:16:02 +0000 Subject: [PATCH 09/24] Update @polymer/polymer from 2.5.0 to 2.6.0 in examples/polymer-cli --- examples/polymer-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/polymer-cli/package.json b/examples/polymer-cli/package.json index 48506a304a8..c1dd6bd9c98 100644 --- a/examples/polymer-cli/package.json +++ b/examples/polymer-cli/package.json @@ -8,7 +8,7 @@ "storybook": "start-storybook -p 9001 -c .storybook" }, "dependencies": { - "@polymer/polymer": "^2.5.0", + "@polymer/polymer": "^2.6.0", "@storybook/addon-actions": "3.4.0-rc.3", "@storybook/addon-knobs": "3.4.0-rc.3", "@storybook/addon-links": "3.4.0-rc.3", From 3d495ecb0e3e0bd106353cee463ce520601f37cd Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:16:02 +0000 Subject: [PATCH 10/24] Update @webcomponents/webcomponentsjs from 1.1.0 to 1.1.1 in examples/polymer-cli --- examples/polymer-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/polymer-cli/package.json b/examples/polymer-cli/package.json index c1dd6bd9c98..b9d26da20f5 100644 --- a/examples/polymer-cli/package.json +++ b/examples/polymer-cli/package.json @@ -17,7 +17,7 @@ "@storybook/addon-storysource": "3.4.0-rc.3", "@storybook/addon-viewport": "3.4.0-rc.3", "@storybook/polymer": "3.4.0-rc.3", - "@webcomponents/webcomponentsjs": "^1.1.0", + "@webcomponents/webcomponentsjs": "^1.1.1", "global": "^4.3.2", "polymer-webpack-loader": "^2.0.2", "webpack": "^3.11.0" From 7ae382ffeb2f4210cbe3cc4c26da1cda4aa325e1 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Fri, 23 Mar 2018 00:21:38 +0000 Subject: [PATCH 11/24] batch bootstrap --- yarn.lock | 66 +++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/yarn.lock b/yarn.lock index d8095f937ba..cbd7eb19ff4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -250,9 +250,9 @@ lodash "^4.17.4" url-template "^2.0.8" -"@polymer/polymer@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@polymer/polymer/-/polymer-2.5.0.tgz#261439f5ab691c230d0c5dfb518b9247064ac13d" +"@polymer/polymer@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@polymer/polymer/-/polymer-2.6.0.tgz#98601124122a045e74f4b41f55975006ef327dbc" "@schematics/angular@0.3.2": version "0.3.2" @@ -336,9 +336,9 @@ version "6.0.96" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.96.tgz#7bf0bf40d6ce51e93762cc47d010c8cc5ebb2179" -"@types/node@~9.4.7": - version "9.4.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.7.tgz#57d81cd98719df2c9de118f2d5f3b1120dcd7275" +"@types/node@~9.6.0": + version "9.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.0.tgz#d3480ee666df9784b1001a1872a2f6ccefb6c2d7" "@types/parse5@^2.2.32": version "2.2.34" @@ -366,9 +366,9 @@ version "0.0.30" resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" -"@webcomponents/webcomponentsjs@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.0.tgz#1392799c266fca142622a720176f688beb74d181" +"@webcomponents/webcomponentsjs@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.1.tgz#50caffdf8a901e5357532b7d85e776637a56446a" JSONStream@^1.0.3, JSONStream@^1.0.4, JSONStream@~1.3.1: version "1.3.2" @@ -988,15 +988,15 @@ autoprefixer@^7.2.3: postcss "^6.0.16" postcss-value-parser "^3.2.3" -autoprefixer@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.1.0.tgz#374cf35be1c0e8fce97408d876f95f66f5cb4641" +autoprefixer@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.2.0.tgz#1e49b611b31a5259b86b7a6b2b1b8faf091abe2a" dependencies: - browserslist "^3.1.1" - caniuse-lite "^1.0.30000810" + browserslist "^3.2.0" + caniuse-lite "^1.0.30000817" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.19" + postcss "^6.0.20" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: @@ -2699,12 +2699,12 @@ browserslist@^2.1.2, browserslist@^2.11.1, browserslist@^2.5.1: caniuse-lite "^1.0.30000789" electron-to-chromium "^1.3.30" -browserslist@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.0.tgz#3d4a99710c12101e4567c9aeedade49c958cb883" +browserslist@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.1.tgz#4960a45fbfe39b2be36fe5ba07cce9ea32c8221c" dependencies: - caniuse-lite "^1.0.30000815" - electron-to-chromium "^1.3.39" + caniuse-lite "^1.0.30000819" + electron-to-chromium "^1.3.40" bser@1.0.2: version "1.0.2" @@ -2953,9 +2953,9 @@ caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000789, caniuse-lite@^1.0.300007 version "1.0.30000791" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000791.tgz#8e35745efd483a3e23bb7d350990326d2319fc16" -caniuse-lite@^1.0.30000810, caniuse-lite@^1.0.30000815: - version "1.0.30000817" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000817.tgz#e993c380eb4bfe76a2aed4223f841c02d6e0d832" +caniuse-lite@^1.0.30000817, caniuse-lite@^1.0.30000819: + version "1.0.30000819" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz#aabee5fd15a080febab6ae5d30c9ea15f4c6d4e2" capture-stack-trace@^1.0.0: version "1.0.0" @@ -4890,7 +4890,7 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: dependencies: electron-releases "^2.1.0" -electron-to-chromium@^1.3.39: +electron-to-chromium@^1.3.40: version "1.3.40" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz#1fbd6d97befd72b8a6f921dc38d22413d2f6fddf" @@ -5435,9 +5435,9 @@ eslint@4.10.0: table "^4.0.1" text-table "~0.2.0" -eslint@^4.19.0: - version "4.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.0.tgz#9e900efb5506812ac374557034ef6f5c3642fc4c" +eslint@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -10128,9 +10128,9 @@ markdown-table@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c" -marked@^0.3.17: - version "0.3.17" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.17.tgz#607f06668b3c6b1246b28f13da76116ac1aa2d2b" +marked@^0.3.18: + version "0.3.18" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.18.tgz#3ef058cd926101849b92a7a7c15db18c7fc76b2f" marked@^0.3.9: version "0.3.12" @@ -12282,9 +12282,9 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13, postcss@^6.0.16, postcss@^6.0.8 source-map "^0.6.1" supports-color "^5.1.0" -postcss@^6.0.19: - version "6.0.20" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.20.tgz#686107e743a12d5530cb68438c590d5b2bf72c3c" +postcss@^6.0.20: + version "6.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.21.tgz#8265662694eddf9e9a5960db6da33c39e4cd069d" dependencies: chalk "^2.3.2" source-map "^0.6.1" From 01eed246a33cc6c6dd5fa53f0bcff97cd07b5b16 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Thu, 22 Mar 2018 18:13:36 -0700 Subject: [PATCH 12/24] Add uber example to docs site --- docs/src/pages/examples/_examples.yml | 7 +++++++ docs/src/pages/examples/thumbnails/uber.png | Bin 0 -> 77554 bytes 2 files changed, 7 insertions(+) create mode 100644 docs/src/pages/examples/thumbnails/uber.png diff --git a/docs/src/pages/examples/_examples.yml b/docs/src/pages/examples/_examples.yml index b7adb153de4..5e95044393c 100644 --- a/docs/src/pages/examples/_examples.yml +++ b/docs/src/pages/examples/_examples.yml @@ -19,6 +19,13 @@ lonelyplanet: source: https://github.com/lonelyplanet/backpack-ui demo: https://lonelyplanet.github.io/backpack-ui/ site: https://www.lonelyplanet.com/ +uber: + thumbnail: uber.png + title: Uber React-Vis + description: A composable charting library. + source: https://github.com/uber/react-vis + demo: https://uber.github.io/react-vis/website/dist/storybook/index.html + site: https://uber.github.io/react-vis/ atlassian: thumbnail: atlassian.png title: Atlassian AtlasKit diff --git a/docs/src/pages/examples/thumbnails/uber.png b/docs/src/pages/examples/thumbnails/uber.png new file mode 100644 index 0000000000000000000000000000000000000000..624ad6245725e98ac97437f761cc7b5eca436c6f GIT binary patch literal 77554 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�%?$fK#Z4!QvprZJRR-x#cpP{KEFx>b( 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 literal 0 HcmV?d00001 From 41cc1a166fdfa86248256366306d01cc65ce9b26 Mon Sep 17 00:00:00 2001 From: Daniel Duan <1474548+danielduan@users.noreply.github.com> Date: Fri, 23 Mar 2018 14:02:34 -0400 Subject: [PATCH 13/24] rephrase getting started with jest --- addons/storyshots/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/storyshots/README.md b/addons/storyshots/README.md index 5d1af946335..a0e3f70c2c7 100644 --- a/addons/storyshots/README.md +++ b/addons/storyshots/README.md @@ -31,10 +31,10 @@ Usually, you might already have completed this step. If not, here are some resou 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: +If you aren't familiar with Jest, here are some resources: -- [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) +- [Getting Started - Jest Official Documentation](https://facebook.github.io/jest/docs/en/getting-started.html) +- [Javascript Testing with Jest - Egghead](https://egghead.io/lessons/javascript-test-javascript-with-jest). ***paid content*** > Note: If you use React 16, you'll need to follow [these additional instructions](https://github.com/facebook/react/issues/9102#issuecomment-283873039). From 557b03aa906ea1007ef1e03c5496674d5fd53bb2 Mon Sep 17 00:00:00 2001 From: Gytis Vinclovas Date: Fri, 23 Mar 2018 22:10:25 +0200 Subject: [PATCH 14/24] Added option to disable onDeviceUI animation --- .../preview/components/OnDeviceUI/index.js | 44 ++++++++++++------- app/react-native/src/preview/index.js | 13 +++--- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/app/react-native/src/preview/components/OnDeviceUI/index.js b/app/react-native/src/preview/components/OnDeviceUI/index.js index fae7c8ea141..7a25430e9f4 100644 --- a/app/react-native/src/preview/components/OnDeviceUI/index.js +++ b/app/react-native/src/preview/components/OnDeviceUI/index.js @@ -73,11 +73,13 @@ export default class OnDeviceUI extends Component { handleToggleMenu = () => { const isMenuOpen = !this.state.isMenuOpen; - Animated.timing(this.state.menuAnimation, { - toValue: isMenuOpen ? 1 : 0, - duration: 150, - easing: Easing.linear, - }).start(); + if (this.props.animated) { + Animated.timing(this.state.menuAnimation, { + toValue: isMenuOpen ? 1 : 0, + duration: 150, + easing: Easing.linear, + }).start(); + } this.setState({ isMenuOpen, @@ -85,8 +87,8 @@ export default class OnDeviceUI extends Component { }; render() { - const { stories, events, url } = this.props; - const { isPortrait, menuAnimation, selectedKind, selectedStory } = this.state; + const { stories, animated, events, url } = this.props; + const { isPortrait, isMenuOpen, menuAnimation, selectedKind, selectedStory } = this.state; const iPhoneXStyles = ifIphoneX( isPortrait @@ -99,15 +101,23 @@ export default class OnDeviceUI extends Component { {} ); + let translateX; + + if (animated) { + translateX = menuAnimation.interpolate({ + inputRange: [0, 1], + outputRange: [-DRAWER_WIDTH - 30, 0], + }); + } else { + translateX = isMenuOpen ? 0 : -DRAWER_WIDTH - 30; + } + const menuStyles = [ style.menuContainer, { transform: [ { - translateX: menuAnimation.interpolate({ - inputRange: [0, 1], - outputRange: [-DRAWER_WIDTH - 30, 0], - }), + translateX, }, ], }, @@ -117,10 +127,12 @@ export default class OnDeviceUI extends Component { const headerStyles = [ style.headerContainer, { - opacity: menuAnimation.interpolate({ - inputRange: [0, 1], - outputRange: [1, 0], - }), + opacity: animated + ? menuAnimation.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0], + }) + : +!isMenuOpen, }, ]; @@ -200,8 +212,10 @@ OnDeviceUI.propTypes = { removeListener: PropTypes.func.isRequired, }).isRequired, url: PropTypes.string, + animated: PropTypes.bool, }; OnDeviceUI.defaultProps = { url: '', + animated: true, }; diff --git a/app/react-native/src/preview/index.js b/app/react-native/src/preview/index.js index a52bcf840ca..dd8a64575a4 100644 --- a/app/react-native/src/preview/index.js +++ b/app/react-native/src/preview/index.js @@ -73,11 +73,14 @@ export default class Preview { this._sendGetCurrentStory(); // finally return the preview component - return params.onDeviceUI ? ( - - ) : ( - - ); + return params.onDeviceUI + ? + : ; }; } From f68987441ffaa7b73f6b289231832ded2c528021 Mon Sep 17 00:00:00 2001 From: Gytis Vinclovas Date: Fri, 23 Mar 2018 22:12:46 +0200 Subject: [PATCH 15/24] Renamed option --- app/react-native/src/preview/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/react-native/src/preview/index.js b/app/react-native/src/preview/index.js index dd8a64575a4..3375d018732 100644 --- a/app/react-native/src/preview/index.js +++ b/app/react-native/src/preview/index.js @@ -78,7 +78,7 @@ export default class Preview { stories={this._stories} events={this._events} url={webUrl} - animated={params.animated} + animated={params.onDeviceUIAnimated} /> : ; }; From 87e75e8ea20fcba98d78427edcc491aa5054446a Mon Sep 17 00:00:00 2001 From: Daniel Duan <1474548+danielduan@users.noreply.github.com> Date: Fri, 23 Mar 2018 16:34:55 -0400 Subject: [PATCH 16/24] decrease stale timing --- .github/stale.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/stale.yml b/.github/stale.yml index efba9956a07..5bc311dcf54 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -1,7 +1,7 @@ # Number of days of inactivity before an issue becomes stale -daysUntilStale: 45 +daysUntilStale: 21 # Number of days of inactivity before a stale issue is closed -daysUntilClose: 15 +daysUntilClose: 30 # Issues with these labels will never be considered stale exemptLabels: - todo @@ -20,7 +20,7 @@ markComment: > If there are still questions, comments, or bugs, please feel free to continue the discussion. Unfortunately, we don't have time to get to every issue. We are always open to contributions so please send us a pull request if you would - like to help. Inactive issues will be closed after 60 days. Thanks! + like to help. Inactive issues will be closed after 30 days. Thanks! # Comment to post when closing a stale issue. Set to `false` to disable closeComment: > Hey there, it's me again! I am going close this issue to help our maintainers From 16ee33ab2417224d8c1566178fd8c1823ad7b273 Mon Sep 17 00:00:00 2001 From: Gytis Vinclovas Date: Fri, 23 Mar 2018 22:57:22 +0200 Subject: [PATCH 17/24] Removed animation completely --- .../preview/components/OnDeviceUI/index.js | 58 ++++--------------- app/react-native/src/preview/index.js | 7 +-- 2 files changed, 11 insertions(+), 54 deletions(-) diff --git a/app/react-native/src/preview/components/OnDeviceUI/index.js b/app/react-native/src/preview/components/OnDeviceUI/index.js index 7a25430e9f4..c967fe73eee 100644 --- a/app/react-native/src/preview/components/OnDeviceUI/index.js +++ b/app/react-native/src/preview/components/OnDeviceUI/index.js @@ -2,16 +2,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { ifIphoneX } from 'react-native-iphone-x-helper'; -import { - Animated, - Dimensions, - Easing, - View, - TouchableWithoutFeedback, - Image, - Text, - StatusBar, -} from 'react-native'; +import { Dimensions, View, TouchableWithoutFeedback, Image, Text, StatusBar } from 'react-native'; import style from './style'; import StoryListView from '../StoryListView'; import StoryView from '../StoryView'; @@ -34,7 +25,6 @@ export default class OnDeviceUI extends Component { super(...args); this.state = { - menuAnimation: new Animated.Value(0), isMenuOpen: false, selectedKind: null, selectedStory: null, @@ -71,24 +61,14 @@ export default class OnDeviceUI extends Component { }; handleToggleMenu = () => { - const isMenuOpen = !this.state.isMenuOpen; - - if (this.props.animated) { - Animated.timing(this.state.menuAnimation, { - toValue: isMenuOpen ? 1 : 0, - duration: 150, - easing: Easing.linear, - }).start(); - } - this.setState({ - isMenuOpen, + isMenuOpen: !this.state.isMenuOpen, }); }; render() { - const { stories, animated, events, url } = this.props; - const { isPortrait, isMenuOpen, menuAnimation, selectedKind, selectedStory } = this.state; + const { stories, events, url } = this.props; + const { isPortrait, isMenuOpen, selectedKind, selectedStory } = this.state; const iPhoneXStyles = ifIphoneX( isPortrait @@ -101,23 +81,12 @@ export default class OnDeviceUI extends Component { {} ); - let translateX; - - if (animated) { - translateX = menuAnimation.interpolate({ - inputRange: [0, 1], - outputRange: [-DRAWER_WIDTH - 30, 0], - }); - } else { - translateX = isMenuOpen ? 0 : -DRAWER_WIDTH - 30; - } - const menuStyles = [ style.menuContainer, { transform: [ { - translateX, + translateX: isMenuOpen ? 0 : -DRAWER_WIDTH - 30, }, ], }, @@ -127,12 +96,7 @@ export default class OnDeviceUI extends Component { const headerStyles = [ style.headerContainer, { - opacity: animated - ? menuAnimation.interpolate({ - inputRange: [0, 1], - outputRange: [1, 0], - }) - : +!isMenuOpen, + opacity: +!isMenuOpen, }, ]; @@ -156,7 +120,7 @@ export default class OnDeviceUI extends Component { return ( - + {selectedKind} {selectedStory} - + - + - + ); } @@ -212,10 +176,8 @@ OnDeviceUI.propTypes = { removeListener: PropTypes.func.isRequired, }).isRequired, url: PropTypes.string, - animated: PropTypes.bool, }; OnDeviceUI.defaultProps = { url: '', - animated: true, }; diff --git a/app/react-native/src/preview/index.js b/app/react-native/src/preview/index.js index 3375d018732..297f9ee4223 100644 --- a/app/react-native/src/preview/index.js +++ b/app/react-native/src/preview/index.js @@ -74,12 +74,7 @@ export default class Preview { // finally return the preview component return params.onDeviceUI - ? + ? : ; }; } From ac86dab5ab43dfe9319b056e9f2511049dfa5dd5 Mon Sep 17 00:00:00 2001 From: Gytis Vinclovas Date: Fri, 23 Mar 2018 22:58:30 +0200 Subject: [PATCH 18/24] removed opacity too --- app/react-native/src/preview/components/OnDeviceUI/style.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/react-native/src/preview/components/OnDeviceUI/style.js b/app/react-native/src/preview/components/OnDeviceUI/style.js index 92325fb0bcf..ad4db0ba484 100644 --- a/app/react-native/src/preview/components/OnDeviceUI/style.js +++ b/app/react-native/src/preview/components/OnDeviceUI/style.js @@ -25,7 +25,7 @@ export default { right: null, paddingHorizontal: 10, paddingBottom: 10, - backgroundColor: 'rgba(255, 255, 255, 0.8)', + backgroundColor: 'white', }, previewContainer: { flex: 1, From 00433d8e95ed8728861a2627488ea6b4651b17b3 Mon Sep 17 00:00:00 2001 From: "Felipe K. De Boni" Date: Fri, 23 Mar 2018 20:59:02 -0300 Subject: [PATCH 19/24] Refactor CLI to use Usage: npm where is one of: access, adduser, bin, bugs, c, cache, completion, config, ddp, dedupe, deprecate, dist-tag, docs, doctor, edit, explore, get, help, help-search, i, init, install, install-test, it, link, list, ln, login, logout, ls, outdated, owner, pack, ping, prefix, profile, prune, publish, rb, rebuild, repo, restart, root, run, run-script, s, se, search, set, shrinkwrap, star, stars, start, stop, t, team, test, token, tst, un, uninstall, unpublish, unstar, up, update, v, version, view, whoami npm -h quick help on npm -l display full usage info npm help search for help on npm help npm involved overview Specify configs in the ini-formatted file: /Users/felipedeboni/.npmrc or on the command line via: npm --key value Config info can be viewed via: npm help config npm@5.6.0 /Users/felipedeboni/.nvm/versions/node/v9.5.0/lib/node_modules/npm and yarn install v1.5.1 [1/5] Validating package.json... [2/5] Resolving packages... success Already up-to-date. Done in 1.69s. instead of third party packages #3274 #3060 --- lib/cli/lib/helpers.js | 2 +- lib/cli/lib/latest_version.js | 17 +++++++++++++++++ lib/cli/package.json | 1 - yarn.lock | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 lib/cli/lib/latest_version.js diff --git a/lib/cli/lib/helpers.js b/lib/cli/lib/helpers.js index 03c0430f08d..f58fb4c285c 100644 --- a/lib/cli/lib/helpers.js +++ b/lib/cli/lib/helpers.js @@ -1,9 +1,9 @@ import path from 'path'; import fs from 'fs'; import chalk from 'chalk'; -import latestVersion from 'latest-version'; import { sync as spawnSync } from 'cross-spawn'; import { gt } from 'semver'; +import latestVersion from './latest_version'; import { version, devDependencies } from '../package.json'; diff --git a/lib/cli/lib/latest_version.js b/lib/cli/lib/latest_version.js new file mode 100644 index 00000000000..d2a6860be10 --- /dev/null +++ b/lib/cli/lib/latest_version.js @@ -0,0 +1,17 @@ +import { sync as spawnSync } from 'cross-spawn'; +import hasYarn from './has_yarn'; + +const packageManager = hasYarn() ? 'yarn' : 'npm'; + +export default async function latestVersion(packageName) { + const result = spawnSync(packageManager, ['info', packageName, '--json'], { + cwd: process.cwd(), + env: process.env, + stdio: 'pipe', + encoding: 'utf-8', + silent: true, + }); + + const info = JSON.parse(result.output[1].toString()); + return info.data.version; +} diff --git a/lib/cli/package.json b/lib/cli/package.json index c8eb436da46..1a02cc13b6f 100644 --- a/lib/cli/package.json +++ b/lib/cli/package.json @@ -36,7 +36,6 @@ "cross-spawn": "^6.0.5", "jscodeshift": "^0.5.0", "json5": "^0.5.1", - "latest-version": "^3.1.0", "merge-dirs": "^0.2.1", "semver": "^5.5.0", "shelljs": "^0.8.1", diff --git a/yarn.lock b/yarn.lock index cbd7eb19ff4..b475d415a3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9304,7 +9304,7 @@ latest-version@^2.0.0: dependencies: package-json "^2.0.0" -latest-version@^3.0.0, latest-version@^3.1.0: +latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" dependencies: From 7d721b3c041da18cd55069aa5690fe1a32ba9ef7 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Sat, 24 Mar 2018 16:40:31 +0000 Subject: [PATCH 20/24] Update gatsby-remark-images from 1.5.56 to 1.5.59 --- docs/package.json | 2 +- docs/yarn.lock | 25 ++++--------------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/docs/package.json b/docs/package.json index 08c6fd71084..b33783ea5a1 100644 --- a/docs/package.json +++ b/docs/package.json @@ -29,7 +29,7 @@ "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-images": "^1.5.59", "gatsby-remark-smartypants": "^1.4.12", "gatsby-source-filesystem": "^1.5.27", "gatsby-transformer-remark": "^1.7.37", diff --git a/docs/yarn.lock b/docs/yarn.lock index 36dc2e88713..adc09a630ad 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -4494,23 +4494,6 @@ gatsby-module-loader@^1.0.11: babel-runtime "^6.26.0" loader-utils "^0.2.16" -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" - 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-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" @@ -4558,13 +4541,13 @@ gatsby-remark-copy-linked-files@^1.5.30: probe-image-size "^3.2.0" unist-util-visit "^1.1.1" -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" +gatsby-remark-images@^1.5.59: + version "1.5.59" + resolved "https://registry.yarnpkg.com/gatsby-remark-images/-/gatsby-remark-images-1.5.59.tgz#2701f4812698d492a3114b6014bb6c2e120837ff" dependencies: babel-runtime "^6.26.0" cheerio "^1.0.0-rc.2" - gatsby-plugin-sharp "^1.6.39" + gatsby-plugin-sharp "^1.6.41" is-relative-url "^2.0.0" lodash "^4.17.4" slash "^1.0.0" From 0e1fc055b4ccaa2e6fbd7f2688cbe5952b522a91 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Sat, 24 Mar 2018 16:41:17 +0000 Subject: [PATCH 21/24] Update vue-loader from 14.2.1 to 14.2.2 in app/vue --- app/vue/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/vue/package.json b/app/vue/package.json index cccabe61939..520f614bdac 100644 --- a/app/vue/package.json +++ b/app/vue/package.json @@ -57,14 +57,14 @@ "devDependencies": { "nodemon": "^1.17.2", "vue": "^2.5.16", - "vue-loader": "^14.2.1", + "vue-loader": "^14.2.2", "vue-template-compiler": "^2.5.16" }, "peerDependencies": { "babel-core": "^6.26.0 || ^7.0.0-0", "babel-runtime": ">=6.0.0", "vue": "2.5.16", - "vue-loader": "14.2.1", + "vue-loader": "14.2.2", "vue-template-compiler": "2.5.16" } } From 25c3d1822484ad3c534bbc4343a285a61168c5f6 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Sat, 24 Mar 2018 16:41:18 +0000 Subject: [PATCH 22/24] Update vue-loader from 14.2.1 to 14.2.2 in examples/vue-kitchen-sink --- examples/vue-kitchen-sink/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/vue-kitchen-sink/package.json b/examples/vue-kitchen-sink/package.json index 13e45983d06..240e70de2ce 100644 --- a/examples/vue-kitchen-sink/package.json +++ b/examples/vue-kitchen-sink/package.json @@ -31,7 +31,7 @@ "cross-env": "^5.1.4", "file-loader": "^1.1.11", "svg-url-loader": "^2.3.2", - "vue-loader": "^14.2.1", + "vue-loader": "^14.2.2", "webpack": "^3.11.0", "webpack-dev-server": "^2.11.2" } From 4fde956aa564264021c7e0c0dab3c17d20aac397 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Sat, 24 Mar 2018 16:44:01 +0000 Subject: [PATCH 23/24] Update gatsby from 1.9.239 to 1.9.240 --- docs/package.json | 2 +- docs/yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/package.json b/docs/package.json index b33783ea5a1..93059242dfc 100644 --- a/docs/package.json +++ b/docs/package.json @@ -24,7 +24,7 @@ "@storybook/react": "^3.3.15", "babel-loader": "^6.4.1", "bootstrap": "^3.3.7", - "gatsby": "^1.9.239", + "gatsby": "^1.9.240", "gatsby-link": "^1.6.39", "gatsby-plugin-sharp": "^1.6.41", "gatsby-remark-autolink-headers": "^1.4.13", diff --git a/docs/yarn.lock b/docs/yarn.lock index adc09a630ad..68d0295aca9 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -4455,9 +4455,9 @@ gatsby-1-config-extract-plugin@^1.0.2: babel-runtime "^6.26.0" extract-text-webpack-plugin "^1.0.1" -gatsby-cli@^1.1.47: - version "1.1.47" - resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-1.1.47.tgz#75474ca674ea7f4e018825f3ad4ec070c915a7cd" +gatsby-cli@^1.1.48: + version "1.1.48" + resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-1.1.48.tgz#7ce1e15e5c02195ff4d8981a23a385e51e7d6cf0" dependencies: babel-code-frame "^6.26.0" babel-runtime "^6.26.0" @@ -4603,9 +4603,9 @@ gatsby-transformer-remark@^1.7.37: unist-util-select "^1.5.0" unist-util-visit "^1.1.1" -gatsby@^1.9.239: - version "1.9.239" - resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.239.tgz#ce5f111ac066da7354c01bc132a78f2466ece4ab" +gatsby@^1.9.240: + version "1.9.240" + resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.240.tgz#08e56c5dc4a2494b8483833cc040119ffa83e96e" dependencies: async "^2.1.2" babel-code-frame "^6.22.0" @@ -4647,7 +4647,7 @@ gatsby@^1.9.239: fs-extra "^4.0.1" gatsby-1-config-css-modules "^1.0.10" gatsby-1-config-extract-plugin "^1.0.2" - gatsby-cli "^1.1.47" + gatsby-cli "^1.1.48" gatsby-link "^1.6.39" gatsby-module-loader "^1.0.11" gatsby-react-router-scroll "^1.0.14" From f8c6a4e913b3e90c571dec0c52456e12c3011815 Mon Sep 17 00:00:00 2001 From: "Dependencies.io Bot" Date: Sat, 24 Mar 2018 16:46:25 +0000 Subject: [PATCH 24/24] batch bootstrap --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b475d415a3a..df98814949b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16418,9 +16418,9 @@ vue-hot-reload-api@^2.2.0: version "2.2.4" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.2.4.tgz#683bd1d026c0d3b3c937d5875679e9a87ec6cd8f" -vue-loader@^14.2.1: - version "14.2.1" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-14.2.1.tgz#3ace19f98187b1fa9e0709defa963a0a2396b6b3" +vue-loader@^14.2.2: + version "14.2.2" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-14.2.2.tgz#c8cf3c2e29b6fb2ee595248a2aa6005038a125b3" dependencies: consolidate "^0.14.0" hash-sum "^1.0.2"