From 14f80d05c88af422008f2a8cf0f3bf75ec718121 Mon Sep 17 00:00:00 2001 From: Ezekiel Date: Thu, 28 Feb 2019 12:01:10 +1100 Subject: [PATCH 1/9] add gov.uk story book react site --- docs/src/pages/examples/_examples.yml | 7 +++++++ docs/src/pages/examples/thumbnails/gov-uk.png | Bin 0 -> 54255 bytes 2 files changed, 7 insertions(+) create mode 100644 docs/src/pages/examples/thumbnails/gov-uk.png diff --git a/docs/src/pages/examples/_examples.yml b/docs/src/pages/examples/_examples.yml index 77a63882ab6..9c60b4931cb 100644 --- a/docs/src/pages/examples/_examples.yml +++ b/docs/src/pages/examples/_examples.yml @@ -179,3 +179,10 @@ vanilla: demo: https://vanilla-framework.github.io/vanilla-framework-react/ source: https://github.com/vanilla-framework/vanilla-framework-react site: https://vanillaframework.io/ +govuk: + thumbnail: gov-uk.png + title: GOV.UK react + description: An implementation of the GOV.UK Design System in React using CSSinJS + demo: https://govuk-react.github.io/govuk-react/ + source: https://github.com/govuk-react/govuk-react + site: https://design-system.service.gov.uk/ diff --git a/docs/src/pages/examples/thumbnails/gov-uk.png b/docs/src/pages/examples/thumbnails/gov-uk.png new file mode 100644 index 0000000000000000000000000000000000000000..c0eadbdc259bd4d80d04094cb06134813c176b78 GIT binary patch literal 54255 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 literal 0 HcmV?d00001 From 27b04c5a1c07c8d4036b6a967fb6afc4170a3dc2 Mon Sep 17 00:00:00 2001 From: Tom Coleman Date: Fri, 1 Mar 2019 15:33:18 +1100 Subject: [PATCH 2/9] Sort storiesHash so grouped keys appear together. For #5518 --- lib/ui/src/core/stories.js | 19 +++++++++++++++++- lib/ui/src/core/stories.test.js | 35 +++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/lib/ui/src/core/stories.js b/lib/ui/src/core/stories.js index 8eb896bf6df..0ca4f0d4b5d 100644 --- a/lib/ui/src/core/stories.js +++ b/lib/ui/src/core/stories.js @@ -134,7 +134,8 @@ const initStoriesApi = ({ }); const setStories = input => { - const storiesHash = Object.values(input).reduce((acc, item) => { + // This doesn't quite have the right order -- it does not group the top-level keys, see #5518 + const storiesHashOutOfOrder = Object.values(input).reduce((acc, item) => { const { kind, parameters } = item; const { hierarchyRootSeparator: rootSeparator, @@ -182,6 +183,22 @@ const initStoriesApi = ({ return acc; }, {}); + // When adding a group, also add all of its children, depth first + function addItem(acc, item) { + if (!acc[item]) { + // If we were already inserted as part of a group, that's great. + acc[item.id] = item; + const { children } = item; + if (children) { + children.forEach(id => addItem(acc, storiesHashOutOfOrder[id])); + } + } + return acc; + } + + // Now create storiesHash by reordering the above by group + const storiesHash = Object.values(storiesHashOutOfOrder).reduce(addItem, {}); + const { storyId, viewMode } = store.getState(); if (!storyId || !storiesHash[storyId]) { diff --git a/lib/ui/src/core/stories.test.js b/lib/ui/src/core/stories.test.js index a625c425381..c16c703ec72 100644 --- a/lib/ui/src/core/stories.test.js +++ b/lib/ui/src/core/stories.test.js @@ -144,6 +144,41 @@ describe('stories API', () => { }); }); + // Stories can get out of order for a few reasons -- see reproductions on + // https://github.com/storybooks/storybook/issues/5518 + it('does the right thing for out of order stories', () => { + const navigate = jest.fn(); + const store = createMockStore(); + + const { + api: { setStories }, + } = initStories({ store, navigate }); + + setStories({ + 'a--1': { kind: 'a', name: '1', parameters, path: 'a--1', id: 'a--1' }, + 'b--1': { kind: 'b', name: '1', parameters, path: 'b--1', id: 'b--1' }, + 'a--2': { kind: 'a', name: '2', parameters, path: 'a--2', id: 'a--2' }, + }); + + const { storiesHash: storedStoriesHash } = store.getState(); + + // We need exact key ordering, even if in theory JS doens't guarantee it + expect(Object.keys(storedStoriesHash)).toEqual(['a', 'a--1', 'a--2', 'b', 'b--1']); + expect(storedStoriesHash.a).toMatchObject({ + id: 'a', + children: ['a--1', 'a--2'], + isRoot: false, + isComponent: true, + }); + + expect(storedStoriesHash.b).toMatchObject({ + id: 'b', + children: ['b--1'], + isRoot: false, + isComponent: true, + }); + }); + it('navigates to the first story in the store if there is none selected', () => { const navigate = jest.fn(); const store = { getState: () => ({ viewMode: 'story' }), setState: jest.fn() }; From 1e0016c38206596b280e899b0b5d829bc14b9251 Mon Sep 17 00:00:00 2001 From: Tom Coleman Date: Fri, 1 Mar 2019 15:40:28 +1100 Subject: [PATCH 3/9] Allow local decorators via params --- .../stories/core/decorators.stories.js | 39 +++++++++++++++++++ lib/client-api/src/client_api.js | 7 +++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 examples/official-storybook/stories/core/decorators.stories.js diff --git a/examples/official-storybook/stories/core/decorators.stories.js b/examples/official-storybook/stories/core/decorators.stories.js new file mode 100644 index 00000000000..2edb62f9d66 --- /dev/null +++ b/examples/official-storybook/stories/core/decorators.stories.js @@ -0,0 +1,39 @@ +import React from 'react'; + +// We would need to add this in config.js idomatically however that would make this file a bit confusing +import { addDecorator } from '@storybook/react'; + +addDecorator((s, { kind }) => + kind === 'Core|Decorators' ? ( + <> +

Global Decorator

+ {s()} + + ) : ( + s() + ) +); + +export default { + title: 'Core|Decorators', + decorators: [ + s => ( + <> +

Kind Decorator

+ {s()} + + ), + ], +}; + +export const all = () =>

Story

; +all.parameters = { + decorators: [ + s => ( + <> +

Local Decorator

+ {s()} + + ), + ], +}; diff --git a/lib/client-api/src/client_api.js b/lib/client-api/src/client_api.js index 4d011d6da79..b9b7925fff8 100644 --- a/lib/client-api/src/client_api.js +++ b/lib/client-api/src/client_api.js @@ -203,7 +203,12 @@ export default class ClientApi { }, { applyDecorators: this._decorateStory, - getDecorators: () => [...localDecorators, ..._globalDecorators, withSubscriptionTracking], + getDecorators: () => [ + ...(allParam.decorators || []), + ...localDecorators, + ..._globalDecorators, + withSubscriptionTracking, + ], } ); return api; From fe8505af29d861eb24c42cd16712519d986a2240 Mon Sep 17 00:00:00 2001 From: Tom Coleman Date: Fri, 1 Mar 2019 15:53:44 +1100 Subject: [PATCH 4/9] ADD hide tooltip on keydown --- lib/components/src/tooltip/WithTooltip.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/components/src/tooltip/WithTooltip.js b/lib/components/src/tooltip/WithTooltip.js index 4077bbe4473..cc1e89f7747 100644 --- a/lib/components/src/tooltip/WithTooltip.js +++ b/lib/components/src/tooltip/WithTooltip.js @@ -1,7 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import { styled } from '@storybook/theming'; -import { withState } from 'recompose'; +import { withState, lifecycle } from 'recompose'; +import { document } from 'global'; import TooltipTrigger from 'react-popper-tooltip'; import Tooltip from './Tooltip'; @@ -17,7 +18,8 @@ const TargetSvgContainer = styled.g` cursor: ${props => (props.mode === 'hover' ? 'default' : 'pointer')}; `; -const WithTooltip = ({ +// Pure, does not bind to the body +const WithTooltipPure = ({ svg, trigger, closeOnClick, @@ -69,7 +71,7 @@ const WithTooltip = ({ ); }; -WithTooltip.propTypes = { +WithTooltipPure.propTypes = { svg: PropTypes.bool, trigger: PropTypes.string, closeOnClick: PropTypes.bool, @@ -82,7 +84,7 @@ WithTooltip.propTypes = { onVisibilityChange: PropTypes.func.isRequired, }; -WithTooltip.defaultProps = { +WithTooltipPure.defaultProps = { svg: false, trigger: 'hover', closeOnClick: false, @@ -92,6 +94,17 @@ WithTooltip.defaultProps = { tooltipShown: false, }; +const WithTooltip = lifecycle({ + componentDidMount() { + const { onVisibilityChange } = this.props; + this.visibilityHider = () => onVisibilityChange(false); + document.addEventListener('keydown', this.visibilityHider, false); + }, + componentWillUnmount() { + document.removeEventListener('keydown', this.visibilityHider); + }, +})(WithTooltipPure); + export default WithTooltip; const WithToolTipState = withState( @@ -100,4 +113,4 @@ const WithToolTipState = withState( ({ startOpen }) => startOpen )(WithTooltip); -export { WithToolTipState }; +export { WithTooltipPure, WithToolTipState }; From c6d2980e6f6f043bdbe27bd39ce62d1b8bcb1f10 Mon Sep 17 00:00:00 2001 From: Tom Coleman Date: Fri, 1 Mar 2019 16:28:56 +1100 Subject: [PATCH 5/9] Add a complicated binding for click events inside iframes --- lib/components/src/tooltip/WithTooltip.js | 33 ++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/components/src/tooltip/WithTooltip.js b/lib/components/src/tooltip/WithTooltip.js index cc1e89f7747..8ad6fe259a2 100644 --- a/lib/components/src/tooltip/WithTooltip.js +++ b/lib/components/src/tooltip/WithTooltip.js @@ -97,11 +97,38 @@ WithTooltipPure.defaultProps = { const WithTooltip = lifecycle({ componentDidMount() { const { onVisibilityChange } = this.props; - this.visibilityHider = () => onVisibilityChange(false); - document.addEventListener('keydown', this.visibilityHider, false); + const hide = () => onVisibilityChange(false); + document.addEventListener('keydown', hide, false); + + // Find all iframes on the screen and bind to clicks inside them (waiting until the iframe is ready) + const iframes = Array.from(document.getElementsByTagName('iframe')); + const unbinders = []; + iframes.forEach(iframe => { + const bind = () => { + iframe.contentDocument.addEventListener('click', hide); + unbinders.push(() => { + iframe.contentDocument.removeEventListener('click', hide); + }); + }; + + bind(); // I don't know how to find out if it's already loaded so I potentially will bind twice + iframe.addEventListener('load', bind); + unbinders.push(() => { + iframe.removeEventListener('load', bind); + }); + }); + + this.unbind = () => { + document.removeEventListener('keydown', hide); + unbinders.forEach(unbind => { + unbind(); + }); + }; }, componentWillUnmount() { - document.removeEventListener('keydown', this.visibilityHider); + if (this.unbind) { + this.unbind(); + } }, })(WithTooltipPure); From cc8a4af88c10f3a7c01998745928de4f50bdffef Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Fri, 1 Mar 2019 18:58:12 +0800 Subject: [PATCH 6/9] Update snapshots --- .../tests/__snapshots__/storyshots.test.js.snap | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/examples/official-storybook/tests/__snapshots__/storyshots.test.js.snap b/examples/official-storybook/tests/__snapshots__/storyshots.test.js.snap index 7762dadd29e..02e96712272 100644 --- a/examples/official-storybook/tests/__snapshots__/storyshots.test.js.snap +++ b/examples/official-storybook/tests/__snapshots__/storyshots.test.js.snap @@ -5077,6 +5077,23 @@ exports[`Storyshots Basics|ScrollArea vertical 1`] = ` `; +exports[`Storyshots Core|Decorators all 1`] = ` +Array [ +

+ Global Decorator +

, +

+ Kind Decorator +

, +

+ Local Decorator +

, +

+ Story +

, +] +`; + exports[`Storyshots Core|Events Force re-render 1`] = ` .emotion-0 { border: 0; From e7c824ef2ae104afa7f5e11a9faadd9b6af1007e Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sat, 2 Mar 2019 01:18:37 +0800 Subject: [PATCH 7/9] 5.0.0-rc.8 changelog --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b09a97e799..6707868e131 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## 5.0.0-rc.8 (March 1, 2019) + +### Features + +* Core: Allow local decorators via params ([#5806](https://github.com/storybooks/storybook/pull/5806)) + +### Bug Fixes + +* UI: Sort storiesHash so grouped keys appear together ([#5805](https://github.com/storybooks/storybook/pull/5805)) +* UI: Close tooltips on iframe clicks on keypresses ([#5807](https://github.com/storybooks/storybook/pull/5807)) +* Addon-Info: Add font family to info panel ([#5759](https://github.com/storybooks/storybook/pull/5759)) + ## 5.0.0-rc.7 (February 28, 2019) ### Features From 36364d6922c6bfc8f33d7dd77e81bb54a0b1e835 Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Sat, 2 Mar 2019 01:29:44 +0800 Subject: [PATCH 8/9] 5.0.0-rc.8 versions.json --- docs/static/versions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/static/versions.json b/docs/static/versions.json index 49068183aea..379d7ef330d 100644 --- a/docs/static/versions.json +++ b/docs/static/versions.json @@ -1,8 +1,8 @@ { "next": { - "version": "5.0.0-rc.7", + "version": "5.0.0-rc.8", "info": { - "plain": "### Features\n\n* UI: Page load animation and `STORIES_CONFIGURED` event ([#5756](https://github.com/storybooks/storybook/pull/5756))\n* Theming: Improve `brand` API ([#5733](https://github.com/storybooks/storybook/pull/5733))\n* UI: Fuzzy search improvement ([#5748](https://github.com/storybooks/storybook/pull/5748))\n* UI: Add toolbar animation ([#5742](https://github.com/storybooks/storybook/pull/5742))\n\n### Bug Fixes\n\n* UI: Fix update notifications placement ([#5716](https://github.com/storybooks/storybook/pull/5716))\n* Angular: Fix global style imports ([#5776](https://github.com/storybooks/storybook/pull/5776))\n* Addon-options: Add backwards compatibility ([#5758](https://github.com/storybooks/storybook/pull/5758))\n* Addon-options: Fix deprecated url/name options ([#5773](https://github.com/storybooks/storybook/pull/5773))\n* Addon-knobs: Remove call to `forceReRender()` on `STORY_CHANGED` ([#5753](https://github.com/storybooks/storybook/pull/5753))\n* UI: Fix active state in addon-background, addon-viewport tools ([#5749](https://github.com/storybooks/storybook/pull/5749))" + "plain": "### Features\n\n* Core: Allow local decorators via params ([#5806](https://github.com/storybooks/storybook/pull/5806))\n\n### Bug Fixes\n\n* UI: Sort storiesHash so grouped keys appear together ([#5805](https://github.com/storybooks/storybook/pull/5805))\n* UI: Close tooltips on iframe clicks on keypresses ([#5807](https://github.com/storybooks/storybook/pull/5807))\n* Addon-Info: Add font family to info panel ([#5759](https://github.com/storybooks/storybook/pull/5759))" } }, "latest": { From 82dcf057b6b118127fe07e43a22bcf4c82a328a3 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Fri, 1 Mar 2019 21:09:23 +0100 Subject: [PATCH 9/9] FIX https://github.com/storybooks/storybook/issues/5788 --- lib/core/src/server/preview/iframe-webpack.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/core/src/server/preview/iframe-webpack.config.js b/lib/core/src/server/preview/iframe-webpack.config.js index 26a95c60c88..3cb4ac5e0fd 100644 --- a/lib/core/src/server/preview/iframe-webpack.config.js +++ b/lib/core/src/server/preview/iframe-webpack.config.js @@ -81,7 +81,6 @@ export default ({ resolve: { extensions: ['.mjs', '.js', '.jsx', '.json'], modules: ['node_modules'].concat(raw.NODE_PATH || []), - mainFields: ['browser', 'main', 'module'], alias: { 'core-js': path.dirname(require.resolve('core-js/package.json')), ...reactPaths,