From 924e403786d1c2dfada45a1d02d616f8170cd337 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Wed, 29 Jan 2020 17:14:28 +0100 Subject: [PATCH 1/6] REMOVE addon-info & addon-notes They have been MOVED to https://github.com/storybookjs/deprecated-addons --- addons/info/README.md | 338 - addons/info/docs/home-screenshot.png | Bin 125134 -> 0 bytes addons/info/package.json | 56 - .../info/src/__snapshots__/index.test.js.snap | 10004 ---------------- addons/info/src/components/PropTable.js | 122 - addons/info/src/components/PropTable.test.js | 71 - .../__snapshots__/index.test.js.snap | 86 - .../components/PropTable/components/Table.js | 12 - .../PropTable/components/Table.test.js | 25 - .../components/PropTable/components/Tbody.js | 11 - .../PropTable/components/Tbody.test.js | 25 - .../src/components/PropTable/components/Td.js | 24 - .../PropTable/components/Td.test.js | 54 - .../src/components/PropTable/components/Th.js | 15 - .../PropTable/components/Th.test.js | 26 - .../components/PropTable/components/Thead.js | 11 - .../PropTable/components/Thead.test.js | 25 - .../src/components/PropTable/components/Tr.js | 10 - .../PropTable/components/Tr.test.js | 27 - .../__snapshots__/Table.test.js.snap | 24 - .../__snapshots__/Tbody.test.js.snap | 20 - .../components/__snapshots__/Td.test.js.snap | 63 - .../components/__snapshots__/Th.test.js.snap | 24 - .../__snapshots__/Thead.test.js.snap | 20 - .../components/__snapshots__/Tr.test.js.snap | 28 - addons/info/src/components/PropTable/index.js | 121 - .../src/components/PropTable/index.test.js | 78 - .../info/src/components/PropTable/style.css | 19 - addons/info/src/components/PropVal.js | 274 - addons/info/src/components/Props.js | 89 - addons/info/src/components/Story.js | 442 - .../__snapshots__/PropTable.test.js.snap | 76 - .../info/src/components/makeTableComponent.js | 98 - addons/info/src/components/markdown/code.js | 33 - addons/info/src/components/markdown/htags.js | 115 - addons/info/src/components/markdown/index.js | 3 - .../info/src/components/markdown/pre/copy.js | 13 - .../src/components/markdown/pre/copyButton.js | 42 - .../info/src/components/markdown/pre/pre.js | 76 - addons/info/src/components/markdown/text.js | 40 - addons/info/src/components/types/ArrayOf.js | 21 - addons/info/src/components/types/Enum.js | 14 - .../info/src/components/types/InstanceOf.js | 10 - addons/info/src/components/types/Literal.js | 10 - addons/info/src/components/types/ObjectOf.js | 19 - addons/info/src/components/types/OneOf.js | 15 - addons/info/src/components/types/OneOfType.js | 26 - .../src/components/types/PrettyPropType.js | 56 - .../src/components/types/PropertyLabel.js | 31 - addons/info/src/components/types/Shape.js | 76 - addons/info/src/components/types/Signature.js | 10 - addons/info/src/components/types/proptypes.js | 12 - addons/info/src/index.js | 114 - addons/info/src/index.test.js | 120 - addons/info/src/react-utils.js | 14 - addons/notes/README.md | 106 - addons/notes/docs/demo.png | Bin 95247 -> 0 bytes addons/notes/package.json | 58 - addons/notes/register-panel.js | 1 - addons/notes/register.js | 1 - addons/notes/src/Panel.test.js | 45 - addons/notes/src/Panel.tsx | 218 - addons/notes/src/formatter.ts | 26 - addons/notes/src/giphy.tsx | 37 - addons/notes/src/index.ts | 40 - addons/notes/src/public_api.ts | 1 - addons/notes/src/register.tsx | 20 - addons/notes/src/shared.ts | 21 - addons/notes/src/typings.d.ts | 7 - addons/notes/tsconfig.json | 13 - examples/angular-cli/.storybook/main.js | 1 - examples/angular-cli/package.json | 1 - .../src/stories/addon-notes.stories.ts | 39 - .../custom-cva-component.stories.ts | 5 - .../module-context-forRoot.stories.ts | 47 +- .../src/stories/on-push/on-push.stories.ts | 5 - examples/cra-kitchen-sink/.storybook/main.js | 1 - examples/cra-kitchen-sink/package.json | 2 - .../src/stories/button.stories.js | 30 - examples/cra-ts-kitchen-sink/package.json | 1 - examples/ember-cli/.storybook/main.js | 1 - examples/ember-cli/package.json | 1 - .../ember-cli/stories/addon-notes.stories.js | 32 - examples/html-kitchen-sink/.storybook/main.js | 1 - examples/html-kitchen-sink/package.json | 1 - .../stories/addon-notes.stories.js | 16 - .../mithril-kitchen-sink/.storybook/main.js | 1 - examples/mithril-kitchen-sink/package.json | 1 - .../src/stories/addon-notes.stories.js | 52 - examples/official-storybook/main.js | 1 - examples/official-storybook/package.json | 2 - examples/official-storybook/preview.js | 2 - .../stories/addon-info/EXAMPLE.md | 3 - .../stories/addon-info/decorators.stories.js | 11 - .../stories/addon-info/forward-ref.stories.js | 17 - .../stories/addon-info/github-issues.js | 27 - .../stories/addon-info/jsx.stories.js | 38 - .../stories/addon-info/markdown.stories.js | 82 - .../stories/addon-info/options.stories.js | 198 - .../stories/addon-info/parameters.stories.js | 80 - .../addon-info/react-docgen.stories.js | 118 - .../addon-info/story-source.stories.js | 73 - .../stories/addon-notes.stories.js | 134 - .../stories/core/errors.stories.js | 2 - .../stories/deprecated/addon-info.stories.js | 16 - .../preact-kitchen-sink/.storybook/main.js | 1 - examples/preact-kitchen-sink/package.json | 1 - .../src/stories/addon-notes.stories.js | 52 - examples/rax-kitchen-sink/.storybook/main.js | 1 - examples/rax-kitchen-sink/package.json | 2 - .../src/stories/addon-a11y.stories.js | 13 - .../src/stories/addon-notes.stories.js | 35 - examples/rax-kitchen-sink/src/stories/note.md | 11 - examples/riot-kitchen-sink/.storybook/main.js | 1 - examples/riot-kitchen-sink/package.json | 1 - .../src/stories/addon-notes.stories.js | 31 - .../src/stories/story-code.stories.js | 7 - .../svelte-kitchen-sink/.storybook/main.js | 1 - examples/svelte-kitchen-sink/package.json | 1 - .../src/stories/addon-notes.stories.js | 34 - examples/vue-kitchen-sink/.storybook/main.js | 1 - examples/vue-kitchen-sink/package.json | 1 - .../src/stories/addon-notes.stories.js | 31 - .../web-components-kitchen-sink/package.json | 1 - 124 files changed, 20 insertions(+), 15030 deletions(-) delete mode 100644 addons/info/README.md delete mode 100644 addons/info/docs/home-screenshot.png delete mode 100644 addons/info/package.json delete mode 100644 addons/info/src/__snapshots__/index.test.js.snap delete mode 100644 addons/info/src/components/PropTable.js delete mode 100644 addons/info/src/components/PropTable.test.js delete mode 100644 addons/info/src/components/PropTable/__snapshots__/index.test.js.snap delete mode 100644 addons/info/src/components/PropTable/components/Table.js delete mode 100644 addons/info/src/components/PropTable/components/Table.test.js delete mode 100644 addons/info/src/components/PropTable/components/Tbody.js delete mode 100644 addons/info/src/components/PropTable/components/Tbody.test.js delete mode 100644 addons/info/src/components/PropTable/components/Td.js delete mode 100644 addons/info/src/components/PropTable/components/Td.test.js delete mode 100644 addons/info/src/components/PropTable/components/Th.js delete mode 100644 addons/info/src/components/PropTable/components/Th.test.js delete mode 100644 addons/info/src/components/PropTable/components/Thead.js delete mode 100644 addons/info/src/components/PropTable/components/Thead.test.js delete mode 100644 addons/info/src/components/PropTable/components/Tr.js delete mode 100644 addons/info/src/components/PropTable/components/Tr.test.js delete mode 100644 addons/info/src/components/PropTable/components/__snapshots__/Table.test.js.snap delete mode 100644 addons/info/src/components/PropTable/components/__snapshots__/Tbody.test.js.snap delete mode 100644 addons/info/src/components/PropTable/components/__snapshots__/Td.test.js.snap delete mode 100644 addons/info/src/components/PropTable/components/__snapshots__/Th.test.js.snap delete mode 100644 addons/info/src/components/PropTable/components/__snapshots__/Thead.test.js.snap delete mode 100644 addons/info/src/components/PropTable/components/__snapshots__/Tr.test.js.snap delete mode 100644 addons/info/src/components/PropTable/index.js delete mode 100644 addons/info/src/components/PropTable/index.test.js delete mode 100644 addons/info/src/components/PropTable/style.css delete mode 100644 addons/info/src/components/PropVal.js delete mode 100644 addons/info/src/components/Props.js delete mode 100644 addons/info/src/components/Story.js delete mode 100644 addons/info/src/components/__snapshots__/PropTable.test.js.snap delete mode 100644 addons/info/src/components/makeTableComponent.js delete mode 100644 addons/info/src/components/markdown/code.js delete mode 100644 addons/info/src/components/markdown/htags.js delete mode 100644 addons/info/src/components/markdown/index.js delete mode 100644 addons/info/src/components/markdown/pre/copy.js delete mode 100644 addons/info/src/components/markdown/pre/copyButton.js delete mode 100644 addons/info/src/components/markdown/pre/pre.js delete mode 100644 addons/info/src/components/markdown/text.js delete mode 100644 addons/info/src/components/types/ArrayOf.js delete mode 100644 addons/info/src/components/types/Enum.js delete mode 100644 addons/info/src/components/types/InstanceOf.js delete mode 100644 addons/info/src/components/types/Literal.js delete mode 100644 addons/info/src/components/types/ObjectOf.js delete mode 100644 addons/info/src/components/types/OneOf.js delete mode 100644 addons/info/src/components/types/OneOfType.js delete mode 100644 addons/info/src/components/types/PrettyPropType.js delete mode 100644 addons/info/src/components/types/PropertyLabel.js delete mode 100644 addons/info/src/components/types/Shape.js delete mode 100644 addons/info/src/components/types/Signature.js delete mode 100644 addons/info/src/components/types/proptypes.js delete mode 100644 addons/info/src/index.js delete mode 100644 addons/info/src/index.test.js delete mode 100644 addons/info/src/react-utils.js delete mode 100644 addons/notes/README.md delete mode 100644 addons/notes/docs/demo.png delete mode 100644 addons/notes/package.json delete mode 100644 addons/notes/register-panel.js delete mode 100644 addons/notes/register.js delete mode 100644 addons/notes/src/Panel.test.js delete mode 100644 addons/notes/src/Panel.tsx delete mode 100644 addons/notes/src/formatter.ts delete mode 100644 addons/notes/src/giphy.tsx delete mode 100644 addons/notes/src/index.ts delete mode 100644 addons/notes/src/public_api.ts delete mode 100644 addons/notes/src/register.tsx delete mode 100644 addons/notes/src/shared.ts delete mode 100644 addons/notes/src/typings.d.ts delete mode 100644 addons/notes/tsconfig.json delete mode 100644 examples/angular-cli/src/stories/addon-notes.stories.ts delete mode 100644 examples/ember-cli/stories/addon-notes.stories.js delete mode 100644 examples/html-kitchen-sink/stories/addon-notes.stories.js delete mode 100644 examples/mithril-kitchen-sink/src/stories/addon-notes.stories.js delete mode 100644 examples/official-storybook/stories/addon-info/EXAMPLE.md delete mode 100644 examples/official-storybook/stories/addon-info/decorators.stories.js delete mode 100644 examples/official-storybook/stories/addon-info/forward-ref.stories.js delete mode 100644 examples/official-storybook/stories/addon-info/github-issues.js delete mode 100644 examples/official-storybook/stories/addon-info/jsx.stories.js delete mode 100644 examples/official-storybook/stories/addon-info/markdown.stories.js delete mode 100644 examples/official-storybook/stories/addon-info/options.stories.js delete mode 100644 examples/official-storybook/stories/addon-info/parameters.stories.js delete mode 100644 examples/official-storybook/stories/addon-info/react-docgen.stories.js delete mode 100644 examples/official-storybook/stories/addon-info/story-source.stories.js delete mode 100644 examples/official-storybook/stories/addon-notes.stories.js delete mode 100644 examples/official-storybook/stories/deprecated/addon-info.stories.js delete mode 100644 examples/preact-kitchen-sink/src/stories/addon-notes.stories.js delete mode 100644 examples/rax-kitchen-sink/src/stories/addon-notes.stories.js delete mode 100644 examples/rax-kitchen-sink/src/stories/note.md delete mode 100644 examples/riot-kitchen-sink/src/stories/addon-notes.stories.js delete mode 100644 examples/svelte-kitchen-sink/src/stories/addon-notes.stories.js delete mode 100644 examples/vue-kitchen-sink/src/stories/addon-notes.stories.js diff --git a/addons/info/README.md b/addons/info/README.md deleted file mode 100644 index 7a19479ec3f8..000000000000 --- a/addons/info/README.md +++ /dev/null @@ -1,338 +0,0 @@ -# Storybook Info Addon - -Storybook Info Addon will show additional information for your stories in [Storybook](https://storybook.js.org). -Useful when you want to display usage or other types of documentation alongside your story. - -[Framework Support](https://github.com/storybookjs/storybook/blob/master/ADDONS_SUPPORT.md) - -![Screenshot](https://raw.githubusercontent.com/storybookjs/storybook/HEAD/addons/info/docs/home-screenshot.png) - -## Installation - -Install the following npm module: - -```sh -npm i -D @storybook/addon-info -``` - -## Basic usage - -Then, add `withInfo` as a decorator to your book of stories. -It is possible to add `info` by default to all or a subsection of stories by using a global or story decorator. - -It is important to declare this decorator as **the first decorator**, otherwise it won't work well. - -```js -// Globally in your .storybook/preview.js. -import { addDecorator } from '@storybook/react'; -import { withInfo } from '@storybook/addon-info'; - -addDecorator(withInfo); -``` - -or - -```js -export default { - title: 'Component', - decorators: [withInfo], -}; -``` - -Then, you can use the `info` parameter to either pass certain options or specific documentation text to your stories. -A complete list of possible configurations can be found [in a later section](#setting-global-options). -This can be done per book of stories: - -```js -import Component from './Component'; - -export default { - title: 'Component', - parameters: { - info: {}, - }, -}; -``` - -...or for each story individually: - -```js -import Component from './Component'; - -export default { - title: 'Component', -}; - -export const defaultView = () => ; -defaultView = { - parameters: { - info: { inline: true }, - }, -}; -``` - -It is also possible to disable the `info` addon entirely. -Depending on the scope at which you want to disable the addon, pass the following parameters object either to an individual story or to an `addParameters` call. - -``` -info: { - disable: true, -} -``` - -## Markdown - -The `info` addon also supports markdown. -To use markdown as additional textual documentation for your stories, either pass it directly as a String to the `info` parameters, or use the `text` option. - -```js -info: { - text: ` - description or documentation about my component, supports markdown - - ~~~js - - ~~~ - `, -} -``` - -## Setting Global Options - -To configure default options for all usage of the info addon, pass a option object along with the decorator in `.storybook/preview.js`. - -```js -import { withInfo } from '@storybook/addon-info'; - -addDecorator( - withInfo({ - header: false, - }) -); -``` - -Configuration parameters can be set at 3 different locations: passed as default options along the `addDecorator` call, passed as an object of parameters to a book of stories to the `addParameters` call, and passed as direct parameters to each individual story. -In order, all of them will be combined together, with a later call overriding the previous set configurations on a per-key basis. - -## Options and Defaults - -```js -{ - /** - * Text to display with storybook component - */ - text?: string; - /** - * Displays info inline vs click button to view - * @default false - */ - inline: boolean, - /** - * Toggles display of header with component name and description - * @default true - */ - header: boolean, - /** - * Displays the source of story Component - * @default true - */ - source: boolean, - /** - * Components used in story - * Displays Prop Tables with these components - * @default [] - */ - propTables: Array, - /** - * Exclude Components from being shown in Prop Tables section - * Accepts an array of component classes or functions - * @default [] - */ - propTablesExclude: Array, - /** - * Overrides styles of addon. The object should follow this shape: - * https://github.com/storybookjs/storybook/blob/master/addons/info/src/components/Story.js#L19. - * This prop can also accept a function which has the default stylesheet passed as an argument - */ - styles: Object | Function, - /** - * Overrides components used to display markdown - * @default {} - */ - components: { [key: string]: React.ComponentType }, - /** - * Max props to display per line in source code - * @default 3 - */ - maxPropsIntoLine: number, - /** - * Displays the first 10 characters of the prop name - * @default 3 - */ - maxPropObjectKeys: number, - /** - * Displays the first 10 items in the default prop array - * @default 3 - */ - maxPropArrayLength: number, - /** - * Displays the first 100 characters in the default prop string - * @default 50 - */ - maxPropStringLength: number, - /** - * Override the component used to render the props table - * @default PropTable - */ - TableComponent: React.ComponentType, - /** - * Will exclude any respective properties whose name is included in array - * @default [] - */ - excludedPropTypes: Array, -} -``` - -### Rendering a Custom Table - -The `TableComponent` option allows you to define how the prop table should be rendered. Your component will be rendered with the following props. - -```js - { - propDefinitions: Array<{ - property: string, // The name of the prop - propType: Object | string, // The prop type. TODO: info about what this object is... - required: boolean, // True if the prop is required - description: string, // The description of the prop - defaultValue: any // The default value of the prop - }> - } -``` - -Example: - -```js -// button.js -// @flow -import React from 'react'; - -const paddingStyles = { - small: '4px 8px', - medium: '8px 16px', -}; - -const Button = ({ - size, - ...rest -}: { - /** The size of the button */ - size: 'small' | 'medium', -}) => { - const style = { - padding: paddingStyles[size] || '', - }; - return -); - -DocgenButton.defaultProps = { - disabled: false, - onClick: () => {}, - style: {}, -}; - -DocgenButton.propTypes = { - /** Boolean indicating whether the button should render as disabled */ - disabled: PropTypes.bool, - /** button label. */ - label: PropTypes.string.isRequired, - /** onClick handler */ - onClick: PropTypes.func, - /** component styles */ - style: PropTypes.shape, -}; - -export default DocgenButton; -``` - -Comments above flow types are also supported. Storybook Info Addon should now render all the correct types for your component if the PropTypes are in the same file as the React component. - -## The FAQ - -**Components lose their names on static build** - -Component names also get minified with other javascript code when building for production. -When creating components, set the `displayName` static property to show the correct component name on static builds. diff --git a/addons/info/docs/home-screenshot.png b/addons/info/docs/home-screenshot.png deleted file mode 100644 index e311890437530c26c16eb839e4b67877cf766235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125134 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 and external markdown 1`] = ` - - - - - - -`; - -exports[`addon Info should render and markdown 1`] = ` - - -
-
- It's a - story: - -
-

- x => x + 1 -

-

- [object Object] -

-

- 1,2,3 -

-

- 7 -

-
- seven -
-
- true -
-

- undefined -

- - test - - - storiesOf - -
    -
  • - 1 -
  • -
  • - 2 -
  • -
-
-
-
-
- -
-
-`; - -exports[`addon Info should render for memoized component 1`] = ` - - -
-
- It's a - story: - -
-

- x => x + 1 -

-

- [object Object] -

-

- 1,2,3 -

-

- 7 -

-
- seven -
-
- true -
-

- undefined -

- - test - - - storiesOf - -
    -
  • - 1 -
  • -
  • - 2 -
  • -
-
-
-
-
- -
-
-`; - -exports[`addon Info should render component description if story kind matches component 1`] = ` -.emotion-10 { - position: relative; - overflow: hidden; - color: #333333; - border: 1px solid rgba(0,0,0,.1); - background: #FFFFFF; -} - -.emotion-5 { - position: relative; -} - -.emotion-5 code { - padding-right: 10px; -} - -.emotion-5 * .token { - font-family: "Operator Mono","Fira Code Retina","Fira Code","FiraCode-Retina","Andale Mono","Lucida Console",Consolas,Monaco,monospace; - -webkit-font-smoothing: antialiased; -} - -.emotion-5 * .token.comment { - color: #008000; - font-style: italic; -} - -.emotion-5 * .token.prolog { - color: #008000; - font-style: italic; -} - -.emotion-5 * .token.doctype { - color: #008000; - font-style: italic; -} - -.emotion-5 * .token.cdata { - color: #008000; - font-style: italic; -} - -.emotion-5 * .token.string { - color: #A31515; -} - -.emotion-5 * .token.punctuation { - color: #393A34; -} - -.emotion-5 * .token.operator { - color: #393A34; -} - -.emotion-5 * .token.url { - color: #36acaa; -} - -.emotion-5 * .token.symbol { - color: #36acaa; -} - -.emotion-5 * .token.number { - color: #36acaa; -} - -.emotion-5 * .token.boolean { - color: #36acaa; -} - -.emotion-5 * .token.variable { - color: #36acaa; -} - -.emotion-5 * .token.constant { - color: #36acaa; -} - -.emotion-5 * .token.inserted { - color: #36acaa; -} - -.emotion-5 * .token.atrule { - color: #0000ff; -} - -.emotion-5 * .token.keyword { - color: #0000ff; -} - -.emotion-5 * .token.attr-value { - color: #0000ff; -} - -.emotion-5 * .token.function { - color: #393A34; -} - -.emotion-5 * .token.deleted { - color: #9a050f; -} - -.emotion-5 * .token.important { - font-weight: bold; -} - -.emotion-5 * .token.bold { - font-weight: bold; -} - -.emotion-5 * .token.italic { - font-style: italic; -} - -.emotion-5 * .token.class-name { - color: #2B91AF; -} - -.emotion-5 * .token.tag { - color: #800000; -} - -.emotion-5 * .token.selector { - color: #800000; -} - -.emotion-5 * .token.attr-name { - color: #ff0000; -} - -.emotion-5 * .token.property { - color: #ff0000; -} - -.emotion-5 * .token.regex { - color: #ff0000; -} - -.emotion-5 * .token.entity { - color: #ff0000; -} - -.emotion-5 * .token.directive.tag .tag { - background: #ffff00; - color: #393A34; -} - -.emotion-5 * .language-json .token.boolean { - color: #0000ff; -} - -.emotion-5 * .language-json .token.number { - color: #0000ff; -} - -.emotion-5 * .language-json .token.property { - color: #2B91AF; -} - -.emotion-5 * .namespace { - opacity: 0.7; -} - -.emotion-2 { - overflow-y: auto; - height: 100%; - overflow-x: auto; - width: 100%; - position: relative; -} - -.emotion-2 code { - padding-right: 10px; -} - -.emotion-2 * .token { - font-family: "Operator Mono","Fira Code Retina","Fira Code","FiraCode-Retina","Andale Mono","Lucida Console",Consolas,Monaco,monospace; - -webkit-font-smoothing: antialiased; -} - -.emotion-2 * .token.comment { - color: #008000; - font-style: italic; -} - -.emotion-2 * .token.prolog { - color: #008000; - font-style: italic; -} - -.emotion-2 * .token.doctype { - color: #008000; - font-style: italic; -} - -.emotion-2 * .token.cdata { - color: #008000; - font-style: italic; -} - -.emotion-2 * .token.string { - color: #A31515; -} - -.emotion-2 * .token.punctuation { - color: #393A34; -} - -.emotion-2 * .token.operator { - color: #393A34; -} - -.emotion-2 * .token.url { - color: #36acaa; -} - -.emotion-2 * .token.symbol { - color: #36acaa; -} - -.emotion-2 * .token.number { - color: #36acaa; -} - -.emotion-2 * .token.boolean { - color: #36acaa; -} - -.emotion-2 * .token.variable { - color: #36acaa; -} - -.emotion-2 * .token.constant { - color: #36acaa; -} - -.emotion-2 * .token.inserted { - color: #36acaa; -} - -.emotion-2 * .token.atrule { - color: #0000ff; -} - -.emotion-2 * .token.keyword { - color: #0000ff; -} - -.emotion-2 * .token.attr-value { - color: #0000ff; -} - -.emotion-2 * .token.function { - color: #393A34; -} - -.emotion-2 * .token.deleted { - color: #9a050f; -} - -.emotion-2 * .token.important { - font-weight: bold; -} - -.emotion-2 * .token.bold { - font-weight: bold; -} - -.emotion-2 * .token.italic { - font-style: italic; -} - -.emotion-2 * .token.class-name { - color: #2B91AF; -} - -.emotion-2 * .token.tag { - color: #800000; -} - -.emotion-2 * .token.selector { - color: #800000; -} - -.emotion-2 * .token.attr-name { - color: #ff0000; -} - -.emotion-2 * .token.property { - color: #ff0000; -} - -.emotion-2 * .token.regex { - color: #ff0000; -} - -.emotion-2 * .token.entity { - color: #ff0000; -} - -.emotion-2 * .token.directive.tag .tag { - background: #ffff00; - color: #393A34; -} - -.emotion-2 * .language-json .token.boolean { - color: #0000ff; -} - -.emotion-2 * .language-json .token.number { - color: #0000ff; -} - -.emotion-2 * .language-json .token.property { - color: #2B91AF; -} - -.emotion-2 * .namespace { - opacity: 0.7; -} - -.emotion-1 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: start; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; - margin: 0; - padding: 10px; -} - -.emotion-0 { - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - padding-right: 0; - opacity: 1; -} - -.emotion-9 { - position: absolute; - bottom: 0; - right: 0; - max-width: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - background: #FFFFFF; - z-index: 1; -} - -.emotion-8 { - border: 0 none; - padding: 4px 10px; - cursor: pointer; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - color: #333333; - background: #FFFFFF; - font-size: 12px; - line-height: 16px; - font-family: "Nunito Sans",-apple-system,".SFNSText-Regular","San Francisco",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Helvetica,Arial,sans-serif; - font-weight: 700; - border-top: 1px solid rgba(0,0,0,.1); - border-left: 1px solid rgba(0,0,0,.1); - margin-left: -1px; - border-radius: 4px 0 0 0; -} - -.emotion-8:not(:last-child) { - border-right: 1px solid rgba(0,0,0,.1); -} - -.emotion-8 + * { - border-left: 1px solid rgba(0,0,0,.1); - border-radius: 0; -} - -.emotion-8:focus { - box-shadow: #1EA7FD 0 -3px 0 0 inset; - outline: 0 none; -} - - - -
-
-
-

- TestComponent -

-

- Basic test -

-
-
-
-
-
- It's a - Basic test - story: - -
-

- x => x + 1 -

-

- [object Object] -

-

- 1,2,3 -

-

- 7 -

-
- seven -
-
- true -
-

- undefined -

- - test - - - storiesOf - -
    -
  • - 1 -
  • -
  • - 2 -
  • -
-
-
-
-
-
-
-

-

- Awesome test component description -

- -

-

- with markdown support -

- -

-

- - bold - - - - cursive - -

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - "ctr": 82, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "tags": Array [ - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - ], - }, - } - } - serialized={ - Object { - "map": undefined, - "name": "nh5djz", - "next": undefined, - "styles": "[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start;}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit;}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto !important;height:auto !important;z-index:0;}.simplebar-offset{direction:inherit !important;resize:none !important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch;}.simplebar-content-wrapper{direction:inherit;position:relative;display:block;visibility:visible;}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none;}.simplebar-height-auto-observer-wrapper{height:100%;width:inherit;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0;}.simplebar-height-auto-observer{display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1;}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden;}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all;}.simplebar-scrollbar{position:absolute;right:2px;width:7px;min-height:10px;}.simplebar-scrollbar:before{position:absolute;content:\\"\\";border-radius:7px;left:0;right:0;opacity:0;transition:opacity 0.2s linear;background:#333333;}.simplebar-track .simplebar-scrollbar.simplebar-visible:before{opacity:0.5;transition:opacity 0s linear;}.simplebar-track.simplebar-vertical{top:0;width:11px;}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px;}.simplebar-track.simplebar-horizontal{left:0;height:11px;}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px;}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto;}[data-simplebar-direction=\\"rtl\\"] .simplebar-track.simplebar-vertical{right:auto;left:0;}", - "toString": [Function], - } - } - /> - - - - -
-
-
-
-
-
-
-
-
- - -
-                                                
-                                                  
-                                                    a
-                                                    
-                                                      ;
-                                                    
-                                                  
-                                                
-                                              
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - -
- - - -
-
-
-
- - - -
-

- Story Source -

- -
" - format={false} - language="jsx" - > - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - "ctr": 82, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "tags": Array [ - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - ], - }, - } - } - serialized={ - Object { - "map": undefined, - "name": "nh5djz", - "next": undefined, - "styles": "[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start;}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit;}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto !important;height:auto !important;z-index:0;}.simplebar-offset{direction:inherit !important;resize:none !important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch;}.simplebar-content-wrapper{direction:inherit;position:relative;display:block;visibility:visible;}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none;}.simplebar-height-auto-observer-wrapper{height:100%;width:inherit;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0;}.simplebar-height-auto-observer{display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1;}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden;}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all;}.simplebar-scrollbar{position:absolute;right:2px;width:7px;min-height:10px;}.simplebar-scrollbar:before{position:absolute;content:\\"\\";border-radius:7px;left:0;right:0;opacity:0;transition:opacity 0.2s linear;background:#333333;}.simplebar-track .simplebar-scrollbar.simplebar-visible:before{opacity:0.5;transition:opacity 0s linear;}.simplebar-track.simplebar-vertical{top:0;width:11px;}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px;}.simplebar-track.simplebar-horizontal{left:0;height:11px;}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px;}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto;}[data-simplebar-direction=\\"rtl\\"] .simplebar-track.simplebar-vertical{right:auto;left:0;}", - "toString": [Function], - } - } - /> - - - - -
-
-
-
-
-
-
-
-
- - -
-                                                
-                                                  
-                                                    
-                                                      
-                                                        
-                                                          <
-                                                        
-                                                        div
-                                                      
-                                                      
-                                                        >
-                                                      
-                                                    
-                                                    
-                                                      
-  It's a Basic test story:
-  
-                                                    
-                                                    
-                                                      
-                                                        
-                                                          <
-                                                        
-                                                        
-                                                          TestComponent
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        array
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          [
-                                                        
-                                                        
-      
-                                                        
-                                                          1
-                                                        
-                                                        
-                                                          ,
-                                                        
-                                                        
-      
-                                                        
-                                                          2
-                                                        
-                                                        
-                                                          ,
-                                                        
-                                                        
-      
-                                                        
-                                                          3
-                                                        
-                                                        
-    
-                                                        
-                                                          ]
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        bool
-                                                      
-                                                      
-    
-                                                      
-                                                        func
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          function
-                                                        
-                                                         
-                                                        
-                                                          noRefCheck
-                                                        
-                                                        
-                                                          (
-                                                        
-                                                        
-                                                          )
-                                                        
-                                                         
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        number
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          7
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        obj
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-      a
-                                                        
-                                                          :
-                                                        
-                                                         
-                                                        
-                                                          'a'
-                                                        
-                                                        
-                                                          ,
-                                                        
-                                                        
-      b
-                                                        
-                                                          :
-                                                        
-                                                         
-                                                        
-                                                          'b'
-                                                        
-                                                        
-    
-                                                        
-                                                          }
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        string
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          "
-                                                        
-                                                        seven
-                                                        
-                                                          "
-                                                        
-                                                      
-                                                      
-  
-                                                      
-                                                        />
-                                                      
-                                                    
-                                                    
-                                                      
-
-                                                    
-                                                    
-                                                      
-                                                        
-                                                          </
-                                                        
-                                                        div
-                                                      
-                                                      
-                                                        >
-                                                      
-                                                    
-                                                  
-                                                
-                                              
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - -
- - - -
-
-
-
- - - -
-
-
- - -`; - -exports[`addon Info should render component description if story name matches component 1`] = ` -.emotion-10 { - position: relative; - overflow: hidden; - color: #333333; - border: 1px solid rgba(0,0,0,.1); - background: #FFFFFF; -} - -.emotion-5 { - position: relative; -} - -.emotion-5 code { - padding-right: 10px; -} - -.emotion-5 * .token { - font-family: "Operator Mono","Fira Code Retina","Fira Code","FiraCode-Retina","Andale Mono","Lucida Console",Consolas,Monaco,monospace; - -webkit-font-smoothing: antialiased; -} - -.emotion-5 * .token.comment { - color: #008000; - font-style: italic; -} - -.emotion-5 * .token.prolog { - color: #008000; - font-style: italic; -} - -.emotion-5 * .token.doctype { - color: #008000; - font-style: italic; -} - -.emotion-5 * .token.cdata { - color: #008000; - font-style: italic; -} - -.emotion-5 * .token.string { - color: #A31515; -} - -.emotion-5 * .token.punctuation { - color: #393A34; -} - -.emotion-5 * .token.operator { - color: #393A34; -} - -.emotion-5 * .token.url { - color: #36acaa; -} - -.emotion-5 * .token.symbol { - color: #36acaa; -} - -.emotion-5 * .token.number { - color: #36acaa; -} - -.emotion-5 * .token.boolean { - color: #36acaa; -} - -.emotion-5 * .token.variable { - color: #36acaa; -} - -.emotion-5 * .token.constant { - color: #36acaa; -} - -.emotion-5 * .token.inserted { - color: #36acaa; -} - -.emotion-5 * .token.atrule { - color: #0000ff; -} - -.emotion-5 * .token.keyword { - color: #0000ff; -} - -.emotion-5 * .token.attr-value { - color: #0000ff; -} - -.emotion-5 * .token.function { - color: #393A34; -} - -.emotion-5 * .token.deleted { - color: #9a050f; -} - -.emotion-5 * .token.important { - font-weight: bold; -} - -.emotion-5 * .token.bold { - font-weight: bold; -} - -.emotion-5 * .token.italic { - font-style: italic; -} - -.emotion-5 * .token.class-name { - color: #2B91AF; -} - -.emotion-5 * .token.tag { - color: #800000; -} - -.emotion-5 * .token.selector { - color: #800000; -} - -.emotion-5 * .token.attr-name { - color: #ff0000; -} - -.emotion-5 * .token.property { - color: #ff0000; -} - -.emotion-5 * .token.regex { - color: #ff0000; -} - -.emotion-5 * .token.entity { - color: #ff0000; -} - -.emotion-5 * .token.directive.tag .tag { - background: #ffff00; - color: #393A34; -} - -.emotion-5 * .language-json .token.boolean { - color: #0000ff; -} - -.emotion-5 * .language-json .token.number { - color: #0000ff; -} - -.emotion-5 * .language-json .token.property { - color: #2B91AF; -} - -.emotion-5 * .namespace { - opacity: 0.7; -} - -.emotion-2 { - overflow-y: auto; - height: 100%; - overflow-x: auto; - width: 100%; - position: relative; -} - -.emotion-2 code { - padding-right: 10px; -} - -.emotion-2 * .token { - font-family: "Operator Mono","Fira Code Retina","Fira Code","FiraCode-Retina","Andale Mono","Lucida Console",Consolas,Monaco,monospace; - -webkit-font-smoothing: antialiased; -} - -.emotion-2 * .token.comment { - color: #008000; - font-style: italic; -} - -.emotion-2 * .token.prolog { - color: #008000; - font-style: italic; -} - -.emotion-2 * .token.doctype { - color: #008000; - font-style: italic; -} - -.emotion-2 * .token.cdata { - color: #008000; - font-style: italic; -} - -.emotion-2 * .token.string { - color: #A31515; -} - -.emotion-2 * .token.punctuation { - color: #393A34; -} - -.emotion-2 * .token.operator { - color: #393A34; -} - -.emotion-2 * .token.url { - color: #36acaa; -} - -.emotion-2 * .token.symbol { - color: #36acaa; -} - -.emotion-2 * .token.number { - color: #36acaa; -} - -.emotion-2 * .token.boolean { - color: #36acaa; -} - -.emotion-2 * .token.variable { - color: #36acaa; -} - -.emotion-2 * .token.constant { - color: #36acaa; -} - -.emotion-2 * .token.inserted { - color: #36acaa; -} - -.emotion-2 * .token.atrule { - color: #0000ff; -} - -.emotion-2 * .token.keyword { - color: #0000ff; -} - -.emotion-2 * .token.attr-value { - color: #0000ff; -} - -.emotion-2 * .token.function { - color: #393A34; -} - -.emotion-2 * .token.deleted { - color: #9a050f; -} - -.emotion-2 * .token.important { - font-weight: bold; -} - -.emotion-2 * .token.bold { - font-weight: bold; -} - -.emotion-2 * .token.italic { - font-style: italic; -} - -.emotion-2 * .token.class-name { - color: #2B91AF; -} - -.emotion-2 * .token.tag { - color: #800000; -} - -.emotion-2 * .token.selector { - color: #800000; -} - -.emotion-2 * .token.attr-name { - color: #ff0000; -} - -.emotion-2 * .token.property { - color: #ff0000; -} - -.emotion-2 * .token.regex { - color: #ff0000; -} - -.emotion-2 * .token.entity { - color: #ff0000; -} - -.emotion-2 * .token.directive.tag .tag { - background: #ffff00; - color: #393A34; -} - -.emotion-2 * .language-json .token.boolean { - color: #0000ff; -} - -.emotion-2 * .language-json .token.number { - color: #0000ff; -} - -.emotion-2 * .language-json .token.property { - color: #2B91AF; -} - -.emotion-2 * .namespace { - opacity: 0.7; -} - -.emotion-1 { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-pack: start; - -webkit-justify-content: flex-start; - -ms-flex-pack: start; - justify-content: flex-start; - margin: 0; - padding: 10px; -} - -.emotion-0 { - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - padding-right: 0; - opacity: 1; -} - -.emotion-9 { - position: absolute; - bottom: 0; - right: 0; - max-width: 100%; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - background: #FFFFFF; - z-index: 1; -} - -.emotion-8 { - border: 0 none; - padding: 4px 10px; - cursor: pointer; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - color: #333333; - background: #FFFFFF; - font-size: 12px; - line-height: 16px; - font-family: "Nunito Sans",-apple-system,".SFNSText-Regular","San Francisco",BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Helvetica,Arial,sans-serif; - font-weight: 700; - border-top: 1px solid rgba(0,0,0,.1); - border-left: 1px solid rgba(0,0,0,.1); - margin-left: -1px; - border-radius: 4px 0 0 0; -} - -.emotion-8:not(:last-child) { - border-right: 1px solid rgba(0,0,0,.1); -} - -.emotion-8 + * { - border-left: 1px solid rgba(0,0,0,.1); - border-radius: 0; -} - -.emotion-8:focus { - box-shadow: #1EA7FD 0 -3px 0 0 inset; - outline: 0 none; -} - - - -
-
-
-

- Test Components -

-

- TestComponent -

-
-
-
-
-
- It's a - TestComponent - story: - -
-

- x => x + 1 -

-

- [object Object] -

-

- 1,2,3 -

-

- 7 -

-
- seven -
-
- true -
-

- undefined -

- - test - - - storiesOf - -
    -
  • - 1 -
  • -
  • - 2 -
  • -
-
-
-
-
-
-
-

-

- Awesome test component description -

- -

-

- with markdown support -

- -

-

- - bold - - - - cursive - -

-

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - "ctr": 82, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "tags": Array [ - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - ], - }, - } - } - serialized={ - Object { - "map": undefined, - "name": "nh5djz", - "next": undefined, - "styles": "[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start;}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit;}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto !important;height:auto !important;z-index:0;}.simplebar-offset{direction:inherit !important;resize:none !important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch;}.simplebar-content-wrapper{direction:inherit;position:relative;display:block;visibility:visible;}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none;}.simplebar-height-auto-observer-wrapper{height:100%;width:inherit;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0;}.simplebar-height-auto-observer{display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1;}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden;}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all;}.simplebar-scrollbar{position:absolute;right:2px;width:7px;min-height:10px;}.simplebar-scrollbar:before{position:absolute;content:\\"\\";border-radius:7px;left:0;right:0;opacity:0;transition:opacity 0.2s linear;background:#333333;}.simplebar-track .simplebar-scrollbar.simplebar-visible:before{opacity:0.5;transition:opacity 0s linear;}.simplebar-track.simplebar-vertical{top:0;width:11px;}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px;}.simplebar-track.simplebar-horizontal{left:0;height:11px;}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px;}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto;}[data-simplebar-direction=\\"rtl\\"] .simplebar-track.simplebar-vertical{right:auto;left:0;}", - "toString": [Function], - } - } - /> - - - - -
-
-
-
-
-
-
-
-
- - -
-                                                
-                                                  
-                                                    a
-                                                    
-                                                      ;
-                                                    
-                                                  
-                                                
-                                              
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - -
- - - -
-
-
-
- - - -
-

- Story Source -

- -
" - format={false} - language="jsx" - > - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - "ctr": 82, - "isSpeedy": false, - "key": "css", - "nonce": undefined, - "tags": Array [ - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - , - ], - }, - } - } - serialized={ - Object { - "map": undefined, - "name": "nh5djz", - "next": undefined, - "styles": "[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start;}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit;}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto !important;height:auto !important;z-index:0;}.simplebar-offset{direction:inherit !important;resize:none !important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch;}.simplebar-content-wrapper{direction:inherit;position:relative;display:block;visibility:visible;}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none;}.simplebar-height-auto-observer-wrapper{height:100%;width:inherit;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0;}.simplebar-height-auto-observer{display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1;}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden;}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all;}.simplebar-scrollbar{position:absolute;right:2px;width:7px;min-height:10px;}.simplebar-scrollbar:before{position:absolute;content:\\"\\";border-radius:7px;left:0;right:0;opacity:0;transition:opacity 0.2s linear;background:#333333;}.simplebar-track .simplebar-scrollbar.simplebar-visible:before{opacity:0.5;transition:opacity 0s linear;}.simplebar-track.simplebar-vertical{top:0;width:11px;}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px;}.simplebar-track.simplebar-horizontal{left:0;height:11px;}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px;}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto;}[data-simplebar-direction=\\"rtl\\"] .simplebar-track.simplebar-vertical{right:auto;left:0;}", - "toString": [Function], - } - } - /> - - - - -
-
-
-
-
-
-
-
-
- - -
-                                                
-                                                  
-                                                    
-                                                      
-                                                        
-                                                          <
-                                                        
-                                                        div
-                                                      
-                                                      
-                                                        >
-                                                      
-                                                    
-                                                    
-                                                      
-  It's a TestComponent story:
-  
-                                                    
-                                                    
-                                                      
-                                                        
-                                                          <
-                                                        
-                                                        
-                                                          TestComponent
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        array
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          [
-                                                        
-                                                        
-      
-                                                        
-                                                          1
-                                                        
-                                                        
-                                                          ,
-                                                        
-                                                        
-      
-                                                        
-                                                          2
-                                                        
-                                                        
-                                                          ,
-                                                        
-                                                        
-      
-                                                        
-                                                          3
-                                                        
-                                                        
-    
-                                                        
-                                                          ]
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        bool
-                                                      
-                                                      
-    
-                                                      
-                                                        func
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          function
-                                                        
-                                                         
-                                                        
-                                                          noRefCheck
-                                                        
-                                                        
-                                                          (
-                                                        
-                                                        
-                                                          )
-                                                        
-                                                         
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        number
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          7
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        obj
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-                                                          {
-                                                        
-                                                        
-      a
-                                                        
-                                                          :
-                                                        
-                                                         
-                                                        
-                                                          'a'
-                                                        
-                                                        
-                                                          ,
-                                                        
-                                                        
-      b
-                                                        
-                                                          :
-                                                        
-                                                         
-                                                        
-                                                          'b'
-                                                        
-                                                        
-    
-                                                        
-                                                          }
-                                                        
-                                                        
-                                                          }
-                                                        
-                                                      
-                                                      
-    
-                                                      
-                                                        string
-                                                      
-                                                      
-                                                        
-                                                          =
-                                                        
-                                                        
-                                                          "
-                                                        
-                                                        seven
-                                                        
-                                                          "
-                                                        
-                                                      
-                                                      
-  
-                                                      
-                                                        />
-                                                      
-                                                    
-                                                    
-                                                      
-
-                                                    
-                                                    
-                                                      
-                                                        
-                                                          </
-                                                        
-                                                        div
-                                                      
-                                                      
-                                                        >
-                                                      
-                                                    
-                                                  
-                                                
-                                              
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - -
- - - -
-
-
-
- - - -
-
-
- - -`; diff --git a/addons/info/src/components/PropTable.js b/addons/info/src/components/PropTable.js deleted file mode 100644 index f2ad6453a5de..000000000000 --- a/addons/info/src/components/PropTable.js +++ /dev/null @@ -1,122 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -import PropVal from './PropVal'; -import PrettyPropType from './types/PrettyPropType'; - -const Table = props => ; -const Td = props => ; -const Th = props => ; -const Thead = props => ; - -export const multiLineText = input => { - if (!input) { - return input; - } - const text = String(input); - const arrayOfText = text.split(/\r?\n|\r/g); - const isSingleLine = arrayOfText.length < 2; - return isSingleLine - ? text - : arrayOfText.map((lineOfText, i) => ( - // eslint-disable-next-line react/no-array-index-key - - {i > 0 &&
} {lineOfText} -
- )); -}; - -const determineIncludedPropTypes = (propDefinitions, excludedPropTypes) => { - if (excludedPropTypes.length === 0) { - return propDefinitions; - } - - return propDefinitions.filter( - propDefinition => !excludedPropTypes.includes(propDefinition.property) - ); -}; - -export default function PropTable(props) { - const { - type, - maxPropObjectKeys, - maxPropArrayLength, - maxPropStringLength, - propDefinitions, - excludedPropTypes, - } = props; - - if (!type) { - return null; - } - - const includedPropDefinitions = determineIncludedPropTypes(propDefinitions, excludedPropTypes); - - if (!includedPropDefinitions.length) { - return No propTypes defined!; - } - - const propValProps = { - maxPropObjectKeys, - maxPropArrayLength, - maxPropStringLength, - }; - - return ( -
; -const Tr = props =>
; -const Tbody = props =>
- - - - - - - - - - - {includedPropDefinitions.map(row => ( - - - - - - - - ))} - -
propertypropTyperequireddefaultdescription
{row.property} - - {row.required ? 'yes' : '-'} - {row.defaultValue === undefined ? ( - '-' - ) : ( - - )} - {multiLineText(row.description)}
- ); -} - -PropTable.displayName = 'PropTable'; -PropTable.defaultProps = { - type: null, - propDefinitions: [], - excludedPropTypes: [], -}; -PropTable.propTypes = { - type: PropTypes.func, - maxPropObjectKeys: PropTypes.number.isRequired, - maxPropArrayLength: PropTypes.number.isRequired, - maxPropStringLength: PropTypes.number.isRequired, - excludedPropTypes: PropTypes.arrayOf(PropTypes.string), - propDefinitions: PropTypes.arrayOf( - PropTypes.shape({ - property: PropTypes.string.isRequired, - propType: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), - required: PropTypes.bool, - description: PropTypes.string, - defaultValue: PropTypes.any, - }) - ), -}; diff --git a/addons/info/src/components/PropTable.test.js b/addons/info/src/components/PropTable.test.js deleted file mode 100644 index 43547f6b6eb7..000000000000 --- a/addons/info/src/components/PropTable.test.js +++ /dev/null @@ -1,71 +0,0 @@ -import React from 'react'; -import renderer from 'react-test-renderer'; -import { shallow } from 'enzyme'; - -import PropTable, { multiLineText } from './PropTable'; - -describe('PropTable', () => { - describe('multiLineText', () => { - const singleLine = 'Foo bar baz'; - const unixMultiLineText = 'foo \n bar \n baz'; - const windowsMultiLineText = 'foo \r bar \r baz'; - const duplicatedMultiLine = 'foo\nfoo\nfoo'; - const propDefinitions = [ - { - defaultValue: undefined, - description: '', - propType: { name: 'string' }, - property: 'foo', - required: false, - }, - ]; - const FooComponent = () =>
; - const propTableProps = { - type: FooComponent, - maxPropArrayLength: 5, - maxPropObjectKeys: 5, - maxPropStringLength: 5, - propDefinitions, - }; - - it('should include all propTypes by default', () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); - - it('should exclude excluded propTypes', () => { - const props = { ...propTableProps, excludedPropTypes: ['foo'] }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); - - it('should return a blank string for a null input', () => { - expect(multiLineText(null)).toBe(null); - }); - it('should return a blank string for an undefined input', () => { - expect(multiLineText(undefined)).toBe(undefined); - }); - it('should cast a number to a string', () => { - expect(multiLineText(1)).toBe('1'); - }); - it('should return its input for a single line of text', () => { - expect(multiLineText(singleLine)).toBe(singleLine); - }); - it('should return an array for unix multiline text', () => { - expect(multiLineText(unixMultiLineText)).toHaveLength(3); - }); - it('should return an array for windows multiline text', () => { - expect(multiLineText(windowsMultiLineText)).toHaveLength(3); - }); - it('should return an array with unique keys for duplicated multiline text', () => { - const wrappers = multiLineText(duplicatedMultiLine).map(tag => shallow(tag)); - const keys = wrappers.map(wrapper => wrapper.key()); - const deDup = new Set(keys); - expect(keys).toHaveLength(deDup.size); - }); - it('should have 2 br tags for 3 lines of text', () => { - const tree = renderer.create(multiLineText(unixMultiLineText)).toJSON(); - expect(tree).toMatchSnapshot(); - }); - }); -}); diff --git a/addons/info/src/components/PropTable/__snapshots__/index.test.js.snap b/addons/info/src/components/PropTable/__snapshots__/index.test.js.snap deleted file mode 100644 index d4aef4cc698a..000000000000 --- a/addons/info/src/components/PropTable/__snapshots__/index.test.js.snap +++ /dev/null @@ -1,86 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PropTable multiLineText should exclude excluded propTypes 1`] = ` - - No propTypes defined! - -`; - -exports[`PropTable multiLineText should have 2 br tags for 3 lines of text 1`] = ` -Array [ - - - foo - , - -
- - bar -
, - -
- - baz -
, -] -`; - -exports[`PropTable multiLineText should include all propTypes by default 1`] = ` - - - - - - - - - - - - - - - - - - -
- property - - propType - - required - - default - - description -
- foo - - - - - - - - - -
-`; diff --git a/addons/info/src/components/PropTable/components/Table.js b/addons/info/src/components/PropTable/components/Table.js deleted file mode 100644 index 893470b04ab3..000000000000 --- a/addons/info/src/components/PropTable/components/Table.js +++ /dev/null @@ -1,12 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import '../style.css'; - -const Table = ({ children }) => {children}
; - -Table.propTypes = { - children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]) - .isRequired, -}; - -export default Table; diff --git a/addons/info/src/components/PropTable/components/Table.test.js b/addons/info/src/components/PropTable/components/Table.test.js deleted file mode 100644 index 6910f2548e7c..000000000000 --- a/addons/info/src/components/PropTable/components/Table.test.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; - -import Table from './Table'; - -describe('PropTable/Table', () => { - it('renders a table html node with one child element', () => { - const wrapper = shallow( - -
foo bar
-
- ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a table html node with multiple children elements', () => { - const wrapper = shallow( - -
foo bar
-
baz
-
- ); - expect(wrapper).toMatchSnapshot(); - }); -}); diff --git a/addons/info/src/components/PropTable/components/Tbody.js b/addons/info/src/components/PropTable/components/Tbody.js deleted file mode 100644 index ef77ac517bef..000000000000 --- a/addons/info/src/components/PropTable/components/Tbody.js +++ /dev/null @@ -1,11 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -const Tbody = ({ children }) => {children}; - -Tbody.propTypes = { - children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]) - .isRequired, -}; - -export default Tbody; diff --git a/addons/info/src/components/PropTable/components/Tbody.test.js b/addons/info/src/components/PropTable/components/Tbody.test.js deleted file mode 100644 index 901a7900ac59..000000000000 --- a/addons/info/src/components/PropTable/components/Tbody.test.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; - -import Tbody from './Tbody'; - -describe('PropTable/Tbody', () => { - it('renders a tbody html node with children', () => { - const wrapper = shallow( - -
foo bar
- - ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a tbody html node with multiple children elements', () => { - const wrapper = shallow( - -
foo bar
-
baz
- - ); - expect(wrapper).toMatchSnapshot(); - }); -}); diff --git a/addons/info/src/components/PropTable/components/Td.js b/addons/info/src/components/PropTable/components/Td.js deleted file mode 100644 index a429e6bc633e..000000000000 --- a/addons/info/src/components/PropTable/components/Td.js +++ /dev/null @@ -1,24 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import '../style.css'; - -const Td = ({ isMonospace, children }) => ( - {children} -); - -Td.propTypes = { - children: PropTypes.oneOfType([ - PropTypes.node, - PropTypes.element, - PropTypes.arrayOf(PropTypes.node), - PropTypes.arrayOf(PropTypes.element), - ]), - isMonospace: PropTypes.bool, -}; - -Td.defaultProps = { - isMonospace: false, - children: null, -}; - -export default Td; diff --git a/addons/info/src/components/PropTable/components/Td.test.js b/addons/info/src/components/PropTable/components/Td.test.js deleted file mode 100644 index e5b8dc663253..000000000000 --- a/addons/info/src/components/PropTable/components/Td.test.js +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; - -import Td from './Td'; - -describe('PropTable/Td', () => { - it('renders a td html node child element', () => { - const wrapper = shallow( - -
foo bar
- - ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a monospace td html node child element', () => { - const wrapper = shallow( - -
foo bar
- - ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a td html node with multiple children elements', () => { - const wrapper = shallow( - -
foo bar
-
baz
- - ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a monospace td html node with multiple children elements', () => { - const wrapper = shallow( - -
foo bar
-
baz
- - ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a td html node with one child node', () => { - const wrapper = shallow(foo bar); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a monospace td html node with one child node', () => { - const wrapper = shallow(foo bar); - expect(wrapper).toMatchSnapshot(); - }); -}); diff --git a/addons/info/src/components/PropTable/components/Th.js b/addons/info/src/components/PropTable/components/Th.js deleted file mode 100644 index acf43b6664e0..000000000000 --- a/addons/info/src/components/PropTable/components/Th.js +++ /dev/null @@ -1,15 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -const Th = ({ children }) => {children}; - -Th.propTypes = { - children: PropTypes.oneOfType([ - PropTypes.node, - PropTypes.element, - PropTypes.arrayOf(PropTypes.node), - PropTypes.arrayOf(PropTypes.element), - ]).isRequired, -}; - -export default Th; diff --git a/addons/info/src/components/PropTable/components/Th.test.js b/addons/info/src/components/PropTable/components/Th.test.js deleted file mode 100644 index cd84814d1721..000000000000 --- a/addons/info/src/components/PropTable/components/Th.test.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; - -import Th from './Th'; - -describe('PropTable/Th', () => { - it('renders a th html node with react element children', () => { - const wrapper = shallow( - -
foo bar
-
baz
- - ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a th html node with html node children', () => { - const wrapper = shallow(foo bar baz); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a th html node with one child node', () => { - const wrapper = shallow(foo bar); - expect(wrapper).toMatchSnapshot(); - }); -}); diff --git a/addons/info/src/components/PropTable/components/Thead.js b/addons/info/src/components/PropTable/components/Thead.js deleted file mode 100644 index 0abe57156f86..000000000000 --- a/addons/info/src/components/PropTable/components/Thead.js +++ /dev/null @@ -1,11 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -const Thead = ({ children }) => {children}; - -Thead.propTypes = { - children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]) - .isRequired, -}; - -export default Thead; diff --git a/addons/info/src/components/PropTable/components/Thead.test.js b/addons/info/src/components/PropTable/components/Thead.test.js deleted file mode 100644 index d1a96fccd72c..000000000000 --- a/addons/info/src/components/PropTable/components/Thead.test.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; - -import Thead from './Thead'; - -describe('PropTable/Thead', () => { - it('renders a thead html node with children', () => { - const wrapper = shallow( - -
foo bar
- - ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a thead html node with multiple children elements', () => { - const wrapper = shallow( - -
foo bar
-
baz
- - ); - expect(wrapper).toMatchSnapshot(); - }); -}); diff --git a/addons/info/src/components/PropTable/components/Tr.js b/addons/info/src/components/PropTable/components/Tr.js deleted file mode 100644 index 103e8ad5449f..000000000000 --- a/addons/info/src/components/PropTable/components/Tr.js +++ /dev/null @@ -1,10 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -const Tr = ({ children }) => {children}; - -Tr.propTypes = { - children: PropTypes.node.isRequired, -}; - -export default Tr; diff --git a/addons/info/src/components/PropTable/components/Tr.test.js b/addons/info/src/components/PropTable/components/Tr.test.js deleted file mode 100644 index 071e87001f25..000000000000 --- a/addons/info/src/components/PropTable/components/Tr.test.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { shallow } from 'enzyme'; - -import Tr from './Tr'; -import Td from './Td'; - -describe('PropTable/Tr', () => { - it('renders a tr html node with react element children', () => { - const wrapper = shallow( - - foo bar - baz - - ); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a tr html node with html node children', () => { - const wrapper = shallow(foo bar baz); - expect(wrapper).toMatchSnapshot(); - }); - - it('renders a tr html node with one child node', () => { - const wrapper = shallow(foo bar); - expect(wrapper).toMatchSnapshot(); - }); -}); diff --git a/addons/info/src/components/PropTable/components/__snapshots__/Table.test.js.snap b/addons/info/src/components/PropTable/components/__snapshots__/Table.test.js.snap deleted file mode 100644 index c245e98aca7a..000000000000 --- a/addons/info/src/components/PropTable/components/__snapshots__/Table.test.js.snap +++ /dev/null @@ -1,24 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PropTable/Table renders a table html node with multiple children elements 1`] = ` - -
- foo bar -
-
- baz -
-
-`; - -exports[`PropTable/Table renders a table html node with one child element 1`] = ` - -
- foo bar -
-
-`; diff --git a/addons/info/src/components/PropTable/components/__snapshots__/Tbody.test.js.snap b/addons/info/src/components/PropTable/components/__snapshots__/Tbody.test.js.snap deleted file mode 100644 index 70840d14f0a8..000000000000 --- a/addons/info/src/components/PropTable/components/__snapshots__/Tbody.test.js.snap +++ /dev/null @@ -1,20 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PropTable/Tbody renders a tbody html node with children 1`] = ` - -
- foo bar -
- -`; - -exports[`PropTable/Tbody renders a tbody html node with multiple children elements 1`] = ` - -
- foo bar -
-
- baz -
- -`; diff --git a/addons/info/src/components/PropTable/components/__snapshots__/Td.test.js.snap b/addons/info/src/components/PropTable/components/__snapshots__/Td.test.js.snap deleted file mode 100644 index 4e2d98f83b5f..000000000000 --- a/addons/info/src/components/PropTable/components/__snapshots__/Td.test.js.snap +++ /dev/null @@ -1,63 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PropTable/Td renders a monospace td html node child element 1`] = ` - -
- foo bar -
- -`; - -exports[`PropTable/Td renders a monospace td html node with multiple children elements 1`] = ` - -
- foo bar -
-
- baz -
- -`; - -exports[`PropTable/Td renders a monospace td html node with one child node 1`] = ` - - foo bar - -`; - -exports[`PropTable/Td renders a td html node child element 1`] = ` - -
- foo bar -
- -`; - -exports[`PropTable/Td renders a td html node with multiple children elements 1`] = ` - -
- foo bar -
-
- baz -
- -`; - -exports[`PropTable/Td renders a td html node with one child node 1`] = ` - - foo bar - -`; diff --git a/addons/info/src/components/PropTable/components/__snapshots__/Th.test.js.snap b/addons/info/src/components/PropTable/components/__snapshots__/Th.test.js.snap deleted file mode 100644 index c7c55c291314..000000000000 --- a/addons/info/src/components/PropTable/components/__snapshots__/Th.test.js.snap +++ /dev/null @@ -1,24 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PropTable/Th renders a th html node with html node children 1`] = ` - - foo bar baz - -`; - -exports[`PropTable/Th renders a th html node with one child node 1`] = ` - - foo bar - -`; - -exports[`PropTable/Th renders a th html node with react element children 1`] = ` - -
- foo bar -
-
- baz -
- -`; diff --git a/addons/info/src/components/PropTable/components/__snapshots__/Thead.test.js.snap b/addons/info/src/components/PropTable/components/__snapshots__/Thead.test.js.snap deleted file mode 100644 index a5ba8a5330f7..000000000000 --- a/addons/info/src/components/PropTable/components/__snapshots__/Thead.test.js.snap +++ /dev/null @@ -1,20 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PropTable/Thead renders a thead html node with children 1`] = ` - -
- foo bar -
- -`; - -exports[`PropTable/Thead renders a thead html node with multiple children elements 1`] = ` - -
- foo bar -
-
- baz -
- -`; diff --git a/addons/info/src/components/PropTable/components/__snapshots__/Tr.test.js.snap b/addons/info/src/components/PropTable/components/__snapshots__/Tr.test.js.snap deleted file mode 100644 index 9ba2d695e37b..000000000000 --- a/addons/info/src/components/PropTable/components/__snapshots__/Tr.test.js.snap +++ /dev/null @@ -1,28 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PropTable/Tr renders a tr html node with html node children 1`] = ` - - foo bar baz - -`; - -exports[`PropTable/Tr renders a tr html node with one child node 1`] = ` - - foo bar - -`; - -exports[`PropTable/Tr renders a tr html node with react element children 1`] = ` - - - foo bar - - - baz - - -`; diff --git a/addons/info/src/components/PropTable/index.js b/addons/info/src/components/PropTable/index.js deleted file mode 100644 index 6e6a033943ee..000000000000 --- a/addons/info/src/components/PropTable/index.js +++ /dev/null @@ -1,121 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -import PrettyPropType from '../types/PrettyPropType'; -import PropVal from '../PropVal'; -import Table from './components/Table'; -import Tbody from './components/Tbody'; -import Td from './components/Td'; -import Th from './components/Th'; -import Thead from './components/Thead'; -import Tr from './components/Tr'; - -export const multiLineText = input => { - if (!input) { - return input; - } - const text = String(input); - const arrayOfText = text.split(/\r?\n|\r/g); - const isSingleLine = arrayOfText.length < 2; - return isSingleLine - ? text - : arrayOfText.map((lineOfText, i) => ( - // eslint-disable-next-line react/no-array-index-key - - {i > 0 &&
} {lineOfText} -
- )); -}; - -const determineIncludedPropTypes = (propDefinitions, excludedPropTypes) => { - if (excludedPropTypes.length === 0) { - return propDefinitions; - } - - return propDefinitions.filter( - propDefinition => !excludedPropTypes.includes(propDefinition.property) - ); -}; - -export default function PropTable(props) { - const { - type, - maxPropObjectKeys, - maxPropArrayLength, - maxPropStringLength, - propDefinitions, - excludedPropTypes, - } = props; - - if (!type) { - return null; - } - - const includedPropDefinitions = determineIncludedPropTypes(propDefinitions, excludedPropTypes); - - if (!includedPropDefinitions.length) { - return No propTypes defined!; - } - - const propValProps = { - maxPropObjectKeys, - maxPropArrayLength, - maxPropStringLength, - }; - - return ( - - - - - - - - - - - - {includedPropDefinitions.map(row => ( - - - - - - - - ))} - -
propertypropTyperequireddefaultdescription
{row.property} - - {row.required ? 'yes' : '-'} - {row.defaultValue === undefined ? ( - '-' - ) : ( - - )} - {multiLineText(row.description)}
- ); -} - -PropTable.displayName = 'PropTable'; -PropTable.defaultProps = { - type: null, - propDefinitions: [], - excludedPropTypes: [], -}; -PropTable.propTypes = { - type: PropTypes.func, - maxPropObjectKeys: PropTypes.number.isRequired, - maxPropArrayLength: PropTypes.number.isRequired, - maxPropStringLength: PropTypes.number.isRequired, - excludedPropTypes: PropTypes.arrayOf(PropTypes.string), - propDefinitions: PropTypes.arrayOf( - PropTypes.shape({ - property: PropTypes.string.isRequired, - propType: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), - required: PropTypes.bool, - description: PropTypes.string, - defaultValue: PropTypes.any, - }) - ), -}; diff --git a/addons/info/src/components/PropTable/index.test.js b/addons/info/src/components/PropTable/index.test.js deleted file mode 100644 index 0a6bb05eb1a7..000000000000 --- a/addons/info/src/components/PropTable/index.test.js +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import renderer from 'react-test-renderer'; -import { shallow } from 'enzyme'; - -import PropTable, { multiLineText } from './index'; - -describe('PropTable', () => { - describe('multiLineText', () => { - const singleLine = 'Foo bar baz'; - const unixMultiLineText = 'foo \n bar \n baz'; - const windowsMultiLineText = 'foo \r bar \r baz'; - const duplicatedMultiLine = 'foo\nfoo\nfoo'; - const propDefinitions = [ - { - defaultValue: undefined, - description: '', - propType: { name: 'string' }, - property: 'foo', - required: false, - }, - ]; - const FooComponent = () =>
; - const propTableProps = { - type: FooComponent, - maxPropArrayLength: 5, - maxPropObjectKeys: 5, - maxPropStringLength: 5, - propDefinitions, - }; - - it('should include all propTypes by default', () => { - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); - - it('should exclude excluded propTypes', () => { - const props = { ...propTableProps, excludedPropTypes: ['foo'] }; - const wrapper = shallow(); - expect(wrapper).toMatchSnapshot(); - }); - - it('should return a blank string for a null input', () => { - expect(multiLineText(null)).toBe(null); - }); - - it('should return a blank string for an undefined input', () => { - expect(multiLineText(undefined)).toBe(undefined); - }); - - it('should cast a number to a string', () => { - expect(multiLineText(1)).toBe('1'); - }); - - it('should return its input for a single line of text', () => { - expect(multiLineText(singleLine)).toBe(singleLine); - }); - - it('should return an array for unix multiline text', () => { - expect(multiLineText(unixMultiLineText)).toHaveLength(3); - }); - - it('should return an array for windows multiline text', () => { - expect(multiLineText(windowsMultiLineText)).toHaveLength(3); - }); - - it('should return an array with unique keys for duplicated multiline text', () => { - const wrappers = multiLineText(duplicatedMultiLine).map(tag => shallow(tag)); - const keys = wrappers.map(wrapper => wrapper.key()); - const deDup = new Set(keys); - expect(keys).toHaveLength(deDup.size); - }); - - it('should have 2 br tags for 3 lines of text', () => { - const tree = renderer.create(multiLineText(unixMultiLineText)).toJSON(); - expect(tree).toMatchSnapshot(); - }); - }); -}); diff --git a/addons/info/src/components/PropTable/style.css b/addons/info/src/components/PropTable/style.css deleted file mode 100644 index 010f200df8b4..000000000000 --- a/addons/info/src/components/PropTable/style.css +++ /dev/null @@ -1,19 +0,0 @@ -.info-table { - width: 100%; -} - -.info-table, .info-table td, .info-table th { - border-collapse: collapse; - border: 1px solid #cccccc; - color: #444444; - margin-top: 0.25rem; - padding-right: 0.5rem; - padding: 0.25rem; - text-align: left; - vertical-align: top; -} - -.info-table-monospace { - font-family: Menlo, Monaco, "Courier New", monospace; - font-size: 0.88em; -} diff --git a/addons/info/src/components/PropVal.js b/addons/info/src/components/PropVal.js deleted file mode 100644 index e7527d749566..000000000000 --- a/addons/info/src/components/PropVal.js +++ /dev/null @@ -1,274 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import createFragment from 'react-addons-create-fragment'; - -const getValueStyles = (codeColors = {}) => ({ - func: { - color: codeColors.func || '#170', - }, - - attr: { - color: codeColors.attr || '#666', - }, - - object: { - color: codeColors.object || '#666', - }, - - array: { - color: codeColors.array || '#666', - }, - - number: { - color: codeColors.number || '#a11', - }, - - string: { - color: codeColors.string || '#22a', - wordBreak: 'break-word', - }, - - bool: { - color: codeColors.bool || '#a11', - }, - - empty: { - color: '#444', - }, -}); - -function indent(breakIntoNewLines, level, isBlock) { - return ( - breakIntoNewLines && ( - -
- {`${Array(level).join(' ')} `} - {!isBlock && ' '} -
- ) - ); -} - -function PreviewArray({ - val, - level, - maxPropArrayLength, - maxPropStringLength, - maxPropsIntoLine, - valueStyles, -}) { - const items = {}; - const breakIntoNewLines = val.length > maxPropsIntoLine; - val.slice(0, maxPropArrayLength).forEach((item, i) => { - items[`n${i}`] = ( - - {indent(breakIntoNewLines, level)} - - - ); - items[`c${i}`] = ','; - }); - if (val.length > maxPropArrayLength) { - items.last = {indent(breakIntoNewLines, level)}…; - } else { - delete items[`c${val.length - 1}`]; - } - - return ( - - [{createFragment(items)} - {indent(breakIntoNewLines, level, true)}] - - ); -} - -PreviewArray.propTypes = { - val: PropTypes.any, // eslint-disable-line - maxPropArrayLength: PropTypes.number.isRequired, - maxPropStringLength: PropTypes.number.isRequired, - maxPropsIntoLine: PropTypes.number.isRequired, - level: PropTypes.number.isRequired, - valueStyles: PropTypes.shape({ - func: PropTypes.object, - attr: PropTypes.object, - object: PropTypes.object, - array: PropTypes.object, - number: PropTypes.object, - string: PropTypes.object, - bool: PropTypes.object, - empty: PropTypes.object, - }).isRequired, -}; - -function PreviewObject({ - val, - level, - maxPropObjectKeys, - maxPropStringLength, - maxPropsIntoLine, - valueStyles, -}) { - const names = Object.keys(val); - const items = {}; - const breakIntoNewLines = names.length > maxPropsIntoLine; - names.slice(0, maxPropObjectKeys).forEach((name, i) => { - items[`k${i}`] = ( - - {indent(breakIntoNewLines, level)} - {name} - - ); - items[`c${i}`] = ': '; - items[`v${i}`] = ( - - ); - items[`m${i}`] = ','; - }); - if (names.length > maxPropObjectKeys) { - items.rest = {indent(breakIntoNewLines, level)}…; - } else { - delete items[`m${names.length - 1}`]; - } - return ( - - {'{'} - {createFragment(items)} - {indent(breakIntoNewLines, level, true)} - {'}'} - - ); -} - -PreviewObject.propTypes = { - val: PropTypes.any, // eslint-disable-line - maxPropObjectKeys: PropTypes.number.isRequired, - maxPropStringLength: PropTypes.number.isRequired, - maxPropsIntoLine: PropTypes.number.isRequired, - level: PropTypes.number.isRequired, - valueStyles: PropTypes.shape({ - func: PropTypes.object, - attr: PropTypes.object, - object: PropTypes.object, - array: PropTypes.object, - number: PropTypes.object, - string: PropTypes.object, - bool: PropTypes.object, - empty: PropTypes.object, - }).isRequired, -}; - -function PropVal(props) { - const { - level, - maxPropObjectKeys, - maxPropArrayLength, - maxPropStringLength, - maxPropsIntoLine, - theme, - } = props; - let { val } = props; - const { codeColors } = theme || {}; - let content = null; - const valueStyles = props.valueStyles || getValueStyles(codeColors); - - if (typeof val === 'number') { - content = {val}; - } else if (typeof val === 'string') { - if (val.length > maxPropStringLength) { - val = `${val.slice(0, maxPropStringLength)}…`; - } - if (level > 1) { - val = `'${val}'`; - } - content = {val}; - } else if (typeof val === 'boolean') { - content = {`${val}`}; - } else if (Array.isArray(val)) { - content = ( - - ); - } else if (typeof val === 'function') { - content = {val.name || 'anonymous'}; - } else if (!val) { - content = {`${val}`}; - } else if (typeof val !== 'object') { - content = ; - } else if (React.isValidElement(val)) { - content = ( - - {`<${val.type.displayName || val.type.name || val.type} />`} - - ); - } else { - content = ( - - ); - } - - return content; -} - -PropVal.defaultProps = { - val: null, - maxPropObjectKeys: 3, - maxPropArrayLength: 3, - maxPropStringLength: 50, - maxPropsIntoLine: 3, - level: 1, - theme: {}, - valueStyles: null, -}; - -PropVal.propTypes = { - val: PropTypes.any, // eslint-disable-line - maxPropObjectKeys: PropTypes.number, - maxPropArrayLength: PropTypes.number, - maxPropStringLength: PropTypes.number, - maxPropsIntoLine: PropTypes.number, - level: PropTypes.number, - theme: PropTypes.shape({ - codeColors: PropTypes.object, - }), - valueStyles: PropTypes.shape({ - func: PropTypes.object, - attr: PropTypes.object, - object: PropTypes.object, - array: PropTypes.object, - number: PropTypes.object, - string: PropTypes.object, - bool: PropTypes.object, - empty: PropTypes.object, - }), -}; - -export default PropVal; diff --git a/addons/info/src/components/Props.js b/addons/info/src/components/Props.js deleted file mode 100644 index 722c4aa8be28..000000000000 --- a/addons/info/src/components/Props.js +++ /dev/null @@ -1,89 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import PropVal from './PropVal'; -import { getType } from '../react-utils'; - -const stylesheet = { - propStyle: {}, - propNameStyle: {}, - propValueStyle: {}, -}; - -export default function Props(props) { - const { - maxPropsIntoLine, - maxPropArrayLength, - maxPropObjectKeys, - maxPropStringLength, - node, - singleLine, - } = props; - const nodeProps = node.props; - const { defaultProps } = getType(node.type); - if (!nodeProps || typeof nodeProps !== 'object') { - return ; - } - - const { propValueStyle, propNameStyle } = stylesheet; - - const names = Object.keys(nodeProps).filter( - name => - name[0] !== '_' && - name !== 'children' && - (!defaultProps || nodeProps[name] !== defaultProps[name]) - ); - - const breakIntoNewLines = names.length > maxPropsIntoLine; - const endingSpace = singleLine ? ' ' : ''; - - const items = []; - names.forEach((name, i) => { - items.push( - - {breakIntoNewLines ? ( - -
-    -
- ) : ( - ' ' - )} - {name} - {/* Use implicit true: */} - {(!nodeProps[name] || typeof nodeProps[name] !== 'boolean') && ( - - = - - {typeof nodeProps[name] === 'string' ? '"' : '{'} - - {typeof nodeProps[name] === 'string' ? '"' : '}'} - - - )} - - {i === names.length - 1 && (breakIntoNewLines ?
: endingSpace)} -
- ); - }); - - return {items}; -} - -Props.defaultProps = { - singleLine: false, -}; - -Props.propTypes = { - node: PropTypes.node.isRequired, - singleLine: PropTypes.bool, - maxPropsIntoLine: PropTypes.number.isRequired, - maxPropObjectKeys: PropTypes.number.isRequired, - maxPropArrayLength: PropTypes.number.isRequired, - maxPropStringLength: PropTypes.number.isRequired, -}; diff --git a/addons/info/src/components/Story.js b/addons/info/src/components/Story.js deleted file mode 100644 index 42f5026f0808..000000000000 --- a/addons/info/src/components/Story.js +++ /dev/null @@ -1,442 +0,0 @@ -/* eslint no-underscore-dangle: 0 */ - -import React, { Fragment, Component, createElement } from 'react'; -import { isForwardRef } from 'react-is'; -import { polyfill } from 'react-lifecycles-compat'; -import PropTypes from 'prop-types'; -import global from 'global'; - -import marksy from 'marksy'; -import jsxToString from 'react-element-to-jsx-string'; -import { Code } from './markdown'; -import { getDisplayName, getType } from '../react-utils'; - -global.STORYBOOK_REACT_CLASSES = global.STORYBOOK_REACT_CLASSES || []; -const { STORYBOOK_REACT_CLASSES } = global; - -const stylesheetBase = { - button: { - base: { - fontFamily: 'sans-serif', - fontSize: 12, - display: 'block', - position: 'fixed', - border: 'none', - background: '#027ac5', - color: '#fff', - padding: '5px 15px', - cursor: 'pointer', - }, - topRight: { - top: 0, - right: 0, - borderRadius: '0 0 0 5px', - }, - }, - info: { - position: 'fixed', - background: 'white', - top: 0, - left: 0, - height: '100vh', - width: '100vw', - overflow: 'auto', - zIndex: 99999, - }, - children: { - position: 'relative', - zIndex: 0, - }, - infoBody: { - fontFamily: 'Helvetica Neue, Helvetica, Segoe UI, Arial, freesans, sans-serif', - color: 'black', - fontWeight: 300, - lineHeight: 1.45, - fontSize: '15px', - padding: '20px 40px 40px', - borderRadius: '2px', - backgroundColor: '#fff', - }, - infoContent: { - marginBottom: 0, - }, - infoStory: {}, - jsxInfoContent: { - borderTop: '1px solid #eee', - margin: '20px 0 0 0', - }, - header: { - h1: { - margin: 0, - padding: 0, - fontSize: '35px', - }, - h2: { - margin: '0 0 10px 0', - padding: 0, - fontWeight: 400, - fontSize: '22px', - }, - h3: { - margin: '0 0 10px 0', - padding: 0, - fontWeight: 400, - fontSize: '18px', - }, - body: { - borderBottom: '1px solid #eee', - paddingTop: 10, - marginBottom: 10, - }, - }, - source: { - h1: { - margin: '20px 0 0 0', - padding: '0 0 5px 0', - fontSize: '25px', - borderBottom: '1px solid #EEE', - }, - }, - propTableHead: { - margin: '20px 0 0 0', - }, -}; - -class Story extends Component { - constructor(props, ...args) { - super(props, ...args); - this.state = { - open: false, - }; - this.marksy = marksy({ - createElement, - elements: props.components, - }); - } - - _renderStory() { - const { stylesheet } = this.state; - const { children } = this.props; - - return ( -
- {children} -
- ); - } - - _renderInline() { - const { stylesheet } = this.state; - - return ( - - {this._renderInlineHeader()} - {this._renderStory()} -
-
- {this._getInfoContent()} - {this._getComponentDescription()} - {this._getSourceCode()} - {this._getPropTables()} -
-
-
- ); - } - - _renderInlineHeader() { - const { stylesheet } = this.state; - - const infoHeader = this._getInfoHeader(); - - return ( - infoHeader && ( -
-
{infoHeader}
-
- ) - ); - } - - _renderOverlay() { - const { stylesheet, open } = this.state; - const { children } = this.props; - - const buttonStyle = { - ...stylesheet.button.base, - ...stylesheet.button.topRight, - }; - - const infoStyle = { ...stylesheet.info }; - if (!open) { - infoStyle.display = 'none'; - } - - const openOverlay = () => { - this.setState({ open: true }); - return false; - }; - - const closeOverlay = () => { - this.setState({ open: false }); - return false; - }; - - return ( - -
{children}
- - {open ? ( -
- -
-
- {this._getInfoHeader()} - {this._getInfoContent()} - {this._getComponentDescription()} - {this._getSourceCode()} - {this._getPropTables()} -
-
-
- ) : null} -
- ); - } - - _getInfoHeader() { - const { stylesheet } = this.state; - const { context, showHeader } = this.props; - - if (!context || !showHeader) { - return null; - } - - return ( -
-

{context.kind}

-

{context.name}

-
- ); - } - - _getInfoContent() { - const { info, showInline } = this.props; - const { stylesheet } = this.state; - - if (!info) { - return ''; - } - - if (React.isValidElement(info)) { - return ( -
{info}
- ); - } - - const lines = info.split('\n'); - while (lines[0].trim() === '') { - lines.shift(); - } - let padding = 0; - const matches = lines[0].match(/^ */); - if (matches) { - padding = matches[0].length; - } - const source = lines.map(s => s.slice(padding)).join('\n'); - - return {this.marksy(source).tree}; - } - - _getComponentDescription() { - const { - context: { kind, name }, - } = this.props; - let retDiv = null; - - const validMatches = [kind, name]; - - if (Object.keys(STORYBOOK_REACT_CLASSES).length) { - Object.keys(STORYBOOK_REACT_CLASSES).forEach(key => { - if (validMatches.includes(STORYBOOK_REACT_CLASSES[key].name)) { - const componentDescription = STORYBOOK_REACT_CLASSES[key].docgenInfo.description; - retDiv = {this.marksy(componentDescription).tree}; - } - }); - } - - return retDiv; - } - - _getSourceCode() { - const { showSource, children } = this.props; - const { stylesheet } = this.state; - - if (!showSource) { - return null; - } - - return ( - -

Story Source

- -
- ); - } - - _getPropTables() { - const { - children, - propTablesExclude, - propTableCompare, - maxPropObjectKeys, - maxPropArrayLength, - maxPropStringLength, - excludedPropTypes, - } = this.props; - let { propTables } = this.props; - const { stylesheet } = this.state; - const types = new Map(); - - if (!propTables) { - return null; - } - - if (!children) { - return null; - } - - propTables.forEach(type => { - types.set(type, true); - }); - - // depth-first traverse and collect types - const extract = innerChildren => { - if (!innerChildren) { - return; - } - if (Array.isArray(innerChildren)) { - innerChildren.forEach(extract); - return; - } - if (innerChildren.props && innerChildren.props.children) { - extract(innerChildren.props.children); - } - if (isForwardRef(innerChildren)) { - try { - // this might fail because of hooks being used - extract(innerChildren.type.render(innerChildren.props)); - } catch (e) { - // do nothing - } - } - if ( - typeof innerChildren === 'string' || - typeof innerChildren.type === 'string' || - (propTables.length > 0 && // if propTables is set and has items in it - !propTables.includes(innerChildren.type)) || // ignore types that are missing from propTables - (Array.isArray(propTablesExclude) && // also ignore excluded types - propTablesExclude.some(Comp => propTableCompare(innerChildren, Comp))) - ) { - return; - } - - if (innerChildren.type && !types.has(innerChildren.type)) { - types.set(innerChildren.type, true); - } - }; - - // extract components from children - extract(children); - - const array = Array.from(types.keys()); - array.sort((a, b) => (getDisplayName(a) > getDisplayName(b) ? 1 : -1)); - - propTables = array.map((type, i) => ( - // eslint-disable-next-line react/no-array-index-key -
-

"{getDisplayName(type)}" Component

- -
- )); - - if (!propTables || propTables.length === 0) { - return null; - } - - return ( - -

Prop Types

- {propTables} -
- ); - } - - render() { - const { showInline } = this.props; - return showInline ? this._renderInline() : this._renderOverlay(); - } -} - -Story.getDerivedStateFromProps = ({ styles }) => ({ stylesheet: styles(stylesheetBase) }); - -Story.displayName = 'Story'; - -Story.propTypes = { - context: PropTypes.shape({ - kind: PropTypes.string, - name: PropTypes.string, - }), - info: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - propTables: PropTypes.arrayOf(PropTypes.func), - propTablesExclude: PropTypes.arrayOf(PropTypes.func), - propTableCompare: PropTypes.func.isRequired, - showInline: PropTypes.bool, - showHeader: PropTypes.bool, - showSource: PropTypes.bool, - // eslint-disable-next-line react/no-unused-prop-types - styles: PropTypes.func.isRequired, - children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]), - components: PropTypes.shape({}), - maxPropObjectKeys: PropTypes.number.isRequired, - maxPropArrayLength: PropTypes.number.isRequired, - maxPropStringLength: PropTypes.number.isRequired, - excludedPropTypes: PropTypes.arrayOf(PropTypes.string), -}; - -Story.defaultProps = { - context: null, - info: '', - children: null, - propTables: null, - propTablesExclude: [], - showInline: false, - showHeader: true, - showSource: true, - components: {}, - excludedPropTypes: [], -}; - -polyfill(Story); - -export default Story; diff --git a/addons/info/src/components/__snapshots__/PropTable.test.js.snap b/addons/info/src/components/__snapshots__/PropTable.test.js.snap deleted file mode 100644 index d153afdfd080..000000000000 --- a/addons/info/src/components/__snapshots__/PropTable.test.js.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PropTable multiLineText should exclude excluded propTypes 1`] = ` - - No propTypes defined! - -`; - -exports[`PropTable multiLineText should have 2 br tags for 3 lines of text 1`] = ` -Array [ - - - foo - , - -
- - bar -
, - -
- - baz -
, -] -`; - -exports[`PropTable multiLineText should include all propTypes by default 1`] = ` - - - - - - - - - - - - - - - - - - -
- property - - propType - - required - - default - - description -
- foo - - - - - - - - - -
-`; diff --git a/addons/info/src/components/makeTableComponent.js b/addons/info/src/components/makeTableComponent.js deleted file mode 100644 index 8842bcbcaaef..000000000000 --- a/addons/info/src/components/makeTableComponent.js +++ /dev/null @@ -1,98 +0,0 @@ -/* eslint-disable no-underscore-dangle,react/forbid-foreign-prop-types */ -import PropTypes from 'prop-types'; -import React from 'react'; - -const PropTypesMap = new Map(); - -Object.keys(PropTypes).forEach(typeName => { - const type = PropTypes[typeName]; - - PropTypesMap.set(type, typeName); - PropTypesMap.set(type.isRequired, typeName); -}); - -const isNotEmpty = obj => obj && obj.props && Object.keys(obj.props).length > 0; - -const hasDocgen = type => isNotEmpty(type.__docgenInfo); - -const propsFromDocgen = type => { - const props = {}; - const docgenInfoProps = type.__docgenInfo.props; - - Object.keys(docgenInfoProps).forEach(property => { - const docgenInfoProp = docgenInfoProps[property]; - const defaultValueDesc = docgenInfoProp.defaultValue || {}; - const propType = docgenInfoProp.flowType || docgenInfoProp.type || 'other'; - - props[property] = { - property, - propType, - required: docgenInfoProp.required, - description: docgenInfoProp.description, - defaultValue: defaultValueDesc.value, - }; - }); - - return props; -}; - -const propsFromPropTypes = type => { - const props = {}; - - if (type.propTypes) { - Object.keys(type.propTypes).forEach(property => { - const typeInfo = type.propTypes[property]; - const required = typeInfo.isRequired === undefined; - const docgenInfo = - type.__docgenInfo && type.__docgenInfo.props && type.__docgenInfo.props[property]; - const description = docgenInfo ? docgenInfo.description : null; - let propType = PropTypesMap.get(typeInfo) || 'other'; - - if (propType === 'other') { - if (docgenInfo && docgenInfo.type) { - propType = docgenInfo.type.name; - } - } - - props[property] = { property, propType, required, description }; - }); - } - - if (type.defaultProps) { - Object.keys(type.defaultProps).forEach(property => { - const value = type.defaultProps[property]; - - if (value === undefined) { - return; - } - - if (!props[property]) { - props[property] = { property }; - } - - props[property].defaultValue = value; - }); - } - - return props; -}; - -export default function makeTableComponent(Component) { - const TableComponent = props => { - const { type } = props; - if (!type) { - return null; - } - - const propDefinitionsMap = hasDocgen(type) ? propsFromDocgen(type) : propsFromPropTypes(type); - const propDefinitions = Object.values(propDefinitionsMap); - - return ; - }; - - TableComponent.propTypes = { - type: PropTypes.func.isRequired, - }; - - return TableComponent; -} diff --git a/addons/info/src/components/markdown/code.js b/addons/info/src/components/markdown/code.js deleted file mode 100644 index 4e6b24ba7de2..000000000000 --- a/addons/info/src/components/markdown/code.js +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { SyntaxHighlighter } from '@storybook/components'; -import { ThemeProvider, convert } from '@storybook/theming'; - -const Code = ({ code, language = 'plaintext', ...rest }) => ( - - - {code} - - -); -Code.propTypes = { - language: PropTypes.string.isRequired, - code: PropTypes.string.isRequired, -}; - -export { Code }; - -export function Blockquote({ children }) { - const style = { - fontSize: '1.88em', - fontFamily: 'Menlo, Monaco, "Courier New", monospace', - borderLeft: '8px solid #fafafa', - padding: '1rem', - }; - return
{children}
; -} - -Blockquote.propTypes = { children: PropTypes.node }; -Blockquote.defaultProps = { children: null }; - -export { default as Pre } from './pre/pre'; diff --git a/addons/info/src/components/markdown/htags.js b/addons/info/src/components/markdown/htags.js deleted file mode 100644 index 57da398d6422..000000000000 --- a/addons/info/src/components/markdown/htags.js +++ /dev/null @@ -1,115 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -const defaultProps = { - children: null, - id: null, -}; -const propTypes = { - children: PropTypes.node, - id: PropTypes.string, -}; - -export function H1({ id, children }) { - const styles = { - borderBottom: '1px solid #eee', - fontWeight: 600, - margin: 0, - padding: 0, - fontSize: '40px', - }; - return ( -

- {children} -

- ); -} - -H1.defaultProps = defaultProps; -H1.propTypes = propTypes; - -export function H2({ id, children }) { - const styles = { - fontWeight: 600, - margin: 0, - padding: 0, - fontSize: '30px', - }; - return ( -

- {children} -

- ); -} - -H2.defaultProps = defaultProps; -H2.propTypes = propTypes; - -export function H3({ id, children }) { - const styles = { - fontWeight: 600, - margin: 0, - padding: 0, - fontSize: '22px', - textTransform: 'uppercase', - }; - return ( -

- {children} -

- ); -} - -H3.defaultProps = defaultProps; -H3.propTypes = propTypes; - -export function H4({ id, children }) { - const styles = { - fontWeight: 600, - margin: 0, - padding: 0, - fontSize: '20px', - }; - return ( -

- {children} -

- ); -} - -H4.defaultProps = defaultProps; -H4.propTypes = propTypes; - -export function H5({ id, children }) { - const styles = { - fontWeight: 600, - margin: 0, - padding: 0, - fontSize: '18px', - }; - return ( -
- {children} -
- ); -} - -H5.defaultProps = defaultProps; -H5.propTypes = propTypes; - -export function H6({ id, children }) { - const styles = { - fontWeight: 400, - margin: 0, - padding: 0, - fontSize: '18px', - }; - return ( -
- {children} -
- ); -} - -H6.defaultProps = defaultProps; -H6.propTypes = propTypes; diff --git a/addons/info/src/components/markdown/index.js b/addons/info/src/components/markdown/index.js deleted file mode 100644 index 2c9ff6ea3064..000000000000 --- a/addons/info/src/components/markdown/index.js +++ /dev/null @@ -1,3 +0,0 @@ -export { H1, H2, H3, H4, H5, H6 } from './htags'; -export { Code, Pre } from './code'; -export { P, A, LI, UL } from './text'; diff --git a/addons/info/src/components/markdown/pre/copy.js b/addons/info/src/components/markdown/pre/copy.js deleted file mode 100644 index 8142b089573e..000000000000 --- a/addons/info/src/components/markdown/pre/copy.js +++ /dev/null @@ -1,13 +0,0 @@ -/* eslint-disable no-undef */ -export default function copy(str) { - const tmp = document.createElement('TEXTAREA'); - const focus = document.activeElement; - - tmp.value = str; - - document.body.appendChild(tmp); - tmp.select(); - document.execCommand('copy'); - document.body.removeChild(tmp); - focus.focus(); -} diff --git a/addons/info/src/components/markdown/pre/copyButton.js b/addons/info/src/components/markdown/pre/copyButton.js deleted file mode 100644 index cf44fa8c3b53..000000000000 --- a/addons/info/src/components/markdown/pre/copyButton.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -function CopyButton({ onClick, toggled }) { - const toggleText = 'Copied!'; - const text = 'Copy'; - - return ( - - ); -} - -CopyButton.propTypes = { - onClick: PropTypes.func, - toggled: PropTypes.bool, -}; - -CopyButton.defaultProps = { - onClick: () => {}, - toggled: false, -}; - -export default CopyButton; diff --git a/addons/info/src/components/markdown/pre/pre.js b/addons/info/src/components/markdown/pre/pre.js deleted file mode 100644 index 160b2c09a964..000000000000 --- a/addons/info/src/components/markdown/pre/pre.js +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import CopyButton from './copyButton'; -import copy from './copy'; - -const TOGGLE_TIMEOUT = 1800; - -class Pre extends React.Component { - state = { - copied: false, - }; - - setRef = elem => { - this.pre = elem; - }; - - handleClick = () => { - const text = this.pre && this.pre.innerText; - - if (!text) { - return; - } - - copy(text); - this.setState({ copied: true }); - - clearTimeout(this.timeout); - - this.timeout = setTimeout(() => { - this.setState({ copied: false }); - }, TOGGLE_TIMEOUT); - }; - - render() { - const { theme, children } = this.props; - const { pre } = theme; - const { copied } = this.state; - - return ( -
-        
{children}
- -
- ); - } -} - -Pre.propTypes = { - children: PropTypes.node, - theme: PropTypes.shape({ - pre: PropTypes.object, - }), -}; - -Pre.defaultProps = { - children: null, - theme: {}, -}; - -export default Pre; diff --git a/addons/info/src/components/markdown/text.js b/addons/info/src/components/markdown/text.js deleted file mode 100644 index 356a4575cd5e..000000000000 --- a/addons/info/src/components/markdown/text.js +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -const defaultProps = { children: null }; -const propTypes = { children: PropTypes.node }; - -export function P({ children }) { - return

{children}

; -} - -P.defaultProps = defaultProps; -P.propTypes = propTypes; - -export function LI({ children }) { - return
  • {children}
  • ; -} - -LI.defaultProps = defaultProps; -LI.propTypes = propTypes; - -export function UL({ children }) { - return
      {children}
    ; -} - -UL.defaultProps = defaultProps; -UL.propTypes = propTypes; - -export function A({ href, children }) { - const style = { - color: '#3498db', - }; - return ( - - {children} - - ); -} - -A.defaultProps = defaultProps; -A.propTypes = { children: PropTypes.node, href: PropTypes.string.isRequired }; diff --git a/addons/info/src/components/types/ArrayOf.js b/addons/info/src/components/types/ArrayOf.js deleted file mode 100644 index 28f1dffe8156..000000000000 --- a/addons/info/src/components/types/ArrayOf.js +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable import/no-cycle */ -import React from 'react'; - -import PrettyPropType from './PrettyPropType'; -import { TypeInfo, getPropTypes } from './proptypes'; - -const ArrayOf = ({ propType }) => ( - - [ - - - - ] - -); - -ArrayOf.propTypes = { - propType: TypeInfo.isRequired, -}; - -export default ArrayOf; diff --git a/addons/info/src/components/types/Enum.js b/addons/info/src/components/types/Enum.js deleted file mode 100644 index 2de8d4830a87..000000000000 --- a/addons/info/src/components/types/Enum.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { TypeInfo, getPropTypes } from './proptypes'; - -const Enum = ({ propType }) => ( - - {getPropTypes(propType) - .map(({ value }) => value) - .join(' | ')} - -); - -Enum.propTypes = { - propType: TypeInfo.isRequired, -}; diff --git a/addons/info/src/components/types/InstanceOf.js b/addons/info/src/components/types/InstanceOf.js deleted file mode 100644 index 786c77fdd399..000000000000 --- a/addons/info/src/components/types/InstanceOf.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import { TypeInfo, getPropTypes } from './proptypes'; - -const InstanceOf = ({ propType }) => {getPropTypes(propType)}; - -InstanceOf.propTypes = { - propType: TypeInfo.isRequired, -}; - -export default InstanceOf; diff --git a/addons/info/src/components/types/Literal.js b/addons/info/src/components/types/Literal.js deleted file mode 100644 index 83b222e40788..000000000000 --- a/addons/info/src/components/types/Literal.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import { TypeInfo } from './proptypes'; - -const Literal = ({ propType }) => {propType.value}; - -Literal.propTypes = { - propType: TypeInfo.isRequired, -}; - -export default Literal; diff --git a/addons/info/src/components/types/ObjectOf.js b/addons/info/src/components/types/ObjectOf.js deleted file mode 100644 index 48a56d91026f..000000000000 --- a/addons/info/src/components/types/ObjectOf.js +++ /dev/null @@ -1,19 +0,0 @@ -/* eslint-disable import/no-cycle */ -import React from 'react'; - -import PrettyPropType from './PrettyPropType'; -import { TypeInfo, getPropTypes } from './proptypes'; - -const ObjectOf = ({ propType }) => ( - - {'{[]: '} - - {'}'} - -); - -ObjectOf.propTypes = { - propType: TypeInfo.isRequired, -}; - -export default ObjectOf; diff --git a/addons/info/src/components/types/OneOf.js b/addons/info/src/components/types/OneOf.js deleted file mode 100644 index deacfa4633e8..000000000000 --- a/addons/info/src/components/types/OneOf.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import { TypeInfo, getPropTypes } from './proptypes'; - -const joinValues = propTypes => propTypes.map(({ value }) => value).join(' | '); - -const OneOf = ({ propType }) => { - const propTypes = getPropTypes(propType); - return {`oneOf ${Array.isArray(propTypes) ? joinValues(propTypes) : propTypes}`}; -}; - -OneOf.propTypes = { - propType: TypeInfo.isRequired, -}; - -export default OneOf; diff --git a/addons/info/src/components/types/OneOfType.js b/addons/info/src/components/types/OneOfType.js deleted file mode 100644 index 2b269d0dad68..000000000000 --- a/addons/info/src/components/types/OneOfType.js +++ /dev/null @@ -1,26 +0,0 @@ -/* eslint-disable import/no-cycle */ -import React from 'react'; - -import PrettyPropType from './PrettyPropType'; -import { TypeInfo, getPropTypes } from './proptypes'; - -const OneOfType = ({ propType }) => { - const propTypes = getPropTypes(propType); - return ( - - {propTypes - .map((value, i) => { - const key = `${value.name}${value.value ? `-${value.value}` : ''}`; - return [ - , - i < propTypes.length - 1 ? | : null, - ]; - }) - .reduce((acc, tuple) => acc.concat(tuple), [])} - - ); -}; -OneOfType.propTypes = { - propType: TypeInfo.isRequired, -}; -export default OneOfType; diff --git a/addons/info/src/components/types/PrettyPropType.js b/addons/info/src/components/types/PrettyPropType.js deleted file mode 100644 index ff7ea413614b..000000000000 --- a/addons/info/src/components/types/PrettyPropType.js +++ /dev/null @@ -1,56 +0,0 @@ -/* eslint-disable import/no-cycle */ -import PropTypes from 'prop-types'; -import React from 'react'; - -import Shape from './Shape'; -import OneOfType from './OneOfType'; -import ArrayOf from './ArrayOf'; -import ObjectOf from './ObjectOf'; -import OneOf from './OneOf'; -import InstanceOf from './InstanceOf'; -import Signature from './Signature'; -import Literal from './Literal'; - -import { TypeInfo } from './proptypes'; - -// propType -> Component map - these are a bit more complex prop types to display -const propTypeComponentMap = new Map([ - ['shape', Shape], - ['union', OneOfType], - ['arrayOf', ArrayOf], - ['objectOf', ObjectOf], - // Might be overkill to have below proptypes as separate components *shrug* - ['literal', Literal], - ['enum', OneOf], - ['instanceOf', InstanceOf], - ['signature', Signature], -]); - -const PrettyPropType = props => { - const { propType, depth } = props; - if (!propType) { - return unknown; - } - - if (propTypeComponentMap.has(propType.name)) { - const Component = propTypeComponentMap.get(propType.name); - return ; - } - - // Otherwise, propType does not have a dedicated component, display proptype name by default - return {propType.name || propType}; -}; - -PrettyPropType.displayName = 'PrettyPropType'; - -PrettyPropType.defaultProps = { - propType: null, - depth: 1, -}; - -PrettyPropType.propTypes = { - propType: TypeInfo, - depth: PropTypes.number, -}; - -export default PrettyPropType; diff --git a/addons/info/src/components/types/PropertyLabel.js b/addons/info/src/components/types/PropertyLabel.js deleted file mode 100644 index d5ad3d896fab..000000000000 --- a/addons/info/src/components/types/PropertyLabel.js +++ /dev/null @@ -1,31 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; - -const styles = { - hasProperty: { - whiteSpace: 'nowrap', - }, -}; - -const PropertyLabel = ({ property, required }) => { - if (!property) return null; - - return ( - - {property} - {required ? '' : '?'}:  - - ); -}; - -PropertyLabel.propTypes = { - property: PropTypes.string, - required: PropTypes.bool, -}; - -PropertyLabel.defaultProps = { - property: '', - required: false, -}; - -export default PropertyLabel; diff --git a/addons/info/src/components/types/Shape.js b/addons/info/src/components/types/Shape.js deleted file mode 100644 index a9f1b6c5affc..000000000000 --- a/addons/info/src/components/types/Shape.js +++ /dev/null @@ -1,76 +0,0 @@ -/* eslint-disable import/no-cycle */ -import PropTypes from 'prop-types'; -import React from 'react'; - -import PrettyPropType from './PrettyPropType'; -import PropertyLabel from './PropertyLabel'; - -import { TypeInfo, getPropTypes } from './proptypes'; - -const MARGIN_SIZE = 15; - -const HighlightButton = props => ( - ; -Story3.story = { - name: 'with notes', - parameters: { - notes: 'A very simple button', - options: { selectedPanel: 'storybook/notes/panel' }, - }, -}; - -export const Story4 = context => ( - - - click the label in top right for info about "{context.name}" - - -); -Story4.story = { - name: 'with new info', - parameters: { - notes: 'Composition: Info(Notes())', - options: { selectedPanel: 'storybook/info/panel' }, - }, - decorators: [ - withInfo( - 'Use the [info addon](https://github.com/storybookjs/storybook/tree/master/addons/info) with its new painless API.' - ), - ], -}; diff --git a/examples/cra-ts-kitchen-sink/package.json b/examples/cra-ts-kitchen-sink/package.json index 77a4a664d19e..f5686dc7ef7a 100644 --- a/examples/cra-ts-kitchen-sink/package.json +++ b/examples/cra-ts-kitchen-sink/package.json @@ -36,7 +36,6 @@ "devDependencies": { "@storybook/addon-a11y": "6.0.0-alpha.1", "@storybook/addon-actions": "6.0.0-alpha.1", - "@storybook/addon-info": "6.0.0-alpha.1", "@storybook/addon-knobs": "6.0.0-alpha.1", "@storybook/addon-links": "6.0.0-alpha.1", "@storybook/addon-options": "6.0.0-alpha.1", diff --git a/examples/ember-cli/.storybook/main.js b/examples/ember-cli/.storybook/main.js index f57119476336..989dc9ee719b 100644 --- a/examples/ember-cli/.storybook/main.js +++ b/examples/ember-cli/.storybook/main.js @@ -7,7 +7,6 @@ module.exports = { '@storybook/addon-actions', '@storybook/addon-docs', '@storybook/addon-links', - '@storybook/addon-notes', '@storybook/addon-knobs', '@storybook/addon-viewport', '@storybook/addon-options', diff --git a/examples/ember-cli/package.json b/examples/ember-cli/package.json index 756a5cd151ed..47d1d9e58569 100644 --- a/examples/ember-cli/package.json +++ b/examples/ember-cli/package.json @@ -23,7 +23,6 @@ "@storybook/addon-docs": "6.0.0-alpha.1", "@storybook/addon-knobs": "6.0.0-alpha.1", "@storybook/addon-links": "6.0.0-alpha.1", - "@storybook/addon-notes": "6.0.0-alpha.1", "@storybook/addon-options": "6.0.0-alpha.1", "@storybook/addon-storysource": "6.0.0-alpha.1", "@storybook/addon-viewport": "6.0.0-alpha.1", diff --git a/examples/ember-cli/stories/addon-notes.stories.js b/examples/ember-cli/stories/addon-notes.stories.js deleted file mode 100644 index c413870dad1d..000000000000 --- a/examples/ember-cli/stories/addon-notes.stories.js +++ /dev/null @@ -1,32 +0,0 @@ -import { hbs } from 'ember-cli-htmlbars'; - -export default { - title: 'Addon/Notes', -}; - -export const SimpleNote = () => ({ - template: hbs`

    Etiam vulputate elit eu venenatis eleifend. Duis nec lectus augue. Morbi egestas diam sed vulputate mollis. Fusce egestas pretium vehicula. Integer sed neque diam. Donec consectetur velit vitae enim varius, ut placerat arcu imperdiet. Praesent sed faucibus arcu. Nullam sit amet nibh a enim eleifend rhoncus. Donec pretium elementum leo at fermentum. Nulla sollicitudin, mauris quis semper tempus, sem metus tristique diam, efficitur pulvinar mi urna id urna.

    `, -}); - -SimpleNote.story = { - name: 'Simple note', - parameters: { notes: 'My notes on some bold text' }, -}; - -export const NoteWithHtml = () => ({ - template: hbs`

    🤔😳😯😮
    😄😩😓😱
    🤓😑😶😊

    `, -}); - -NoteWithHtml.story = { - name: 'Note with HTML', - - parameters: { - notes: ` -

    My notes on emojies

    - - It's not all that important to be honest, but.. - - Emojis are great, I love emojis, in fact I like using them in my Component notes too! 😇 - `, - }, -}; diff --git a/examples/html-kitchen-sink/.storybook/main.js b/examples/html-kitchen-sink/.storybook/main.js index 66ab602a73cd..042b87f86daf 100644 --- a/examples/html-kitchen-sink/.storybook/main.js +++ b/examples/html-kitchen-sink/.storybook/main.js @@ -10,7 +10,6 @@ module.exports = { '@storybook/addon-jest', '@storybook/addon-knobs', '@storybook/addon-links', - '@storybook/addon-notes', '@storybook/addon-options', '@storybook/addon-storysource', '@storybook/addon-viewport', diff --git a/examples/html-kitchen-sink/package.json b/examples/html-kitchen-sink/package.json index 26ccc410d1c8..19e8a774cfa3 100644 --- a/examples/html-kitchen-sink/package.json +++ b/examples/html-kitchen-sink/package.json @@ -22,7 +22,6 @@ "@storybook/addon-jest": "6.0.0-alpha.1", "@storybook/addon-knobs": "6.0.0-alpha.1", "@storybook/addon-links": "6.0.0-alpha.1", - "@storybook/addon-notes": "6.0.0-alpha.1", "@storybook/addon-options": "6.0.0-alpha.1", "@storybook/addon-storyshots": "6.0.0-alpha.1", "@storybook/addon-storysource": "6.0.0-alpha.1", diff --git a/examples/html-kitchen-sink/stories/addon-notes.stories.js b/examples/html-kitchen-sink/stories/addon-notes.stories.js deleted file mode 100644 index 9129457c82d5..000000000000 --- a/examples/html-kitchen-sink/stories/addon-notes.stories.js +++ /dev/null @@ -1,16 +0,0 @@ -export default { - title: 'Addons/Notes', -}; - -export const Story1 = () => - `

    - - This is a fragment of HTML - -

    `; -Story1.story = { - name: 'Simple note', - parameters: { - notes: 'My notes on some bold text', - }, -}; diff --git a/examples/mithril-kitchen-sink/.storybook/main.js b/examples/mithril-kitchen-sink/.storybook/main.js index 3a53130947d7..0a070fa00ad2 100644 --- a/examples/mithril-kitchen-sink/.storybook/main.js +++ b/examples/mithril-kitchen-sink/.storybook/main.js @@ -6,7 +6,6 @@ module.exports = { '@storybook/addon-storysource', '@storybook/addon-actions', '@storybook/addon-links', - '@storybook/addon-notes', '@storybook/addon-knobs', '@storybook/addon-viewport', '@storybook/addon-options', diff --git a/examples/mithril-kitchen-sink/package.json b/examples/mithril-kitchen-sink/package.json index 7217dbe7ae69..35fd432a4238 100644 --- a/examples/mithril-kitchen-sink/package.json +++ b/examples/mithril-kitchen-sink/package.json @@ -16,7 +16,6 @@ "@storybook/addon-centered": "6.0.0-alpha.1", "@storybook/addon-knobs": "6.0.0-alpha.1", "@storybook/addon-links": "6.0.0-alpha.1", - "@storybook/addon-notes": "6.0.0-alpha.1", "@storybook/addon-options": "6.0.0-alpha.1", "@storybook/addon-storyshots": "6.0.0-alpha.1", "@storybook/addon-storysource": "6.0.0-alpha.1", diff --git a/examples/mithril-kitchen-sink/src/stories/addon-notes.stories.js b/examples/mithril-kitchen-sink/src/stories/addon-notes.stories.js deleted file mode 100644 index 26a9b8a401db..000000000000 --- a/examples/mithril-kitchen-sink/src/stories/addon-notes.stories.js +++ /dev/null @@ -1,52 +0,0 @@ -/** @jsx m */ - -import m from 'mithril'; - -export default { - title: 'Addons/Notes', -}; - -export const Story1 = () => ({ - view: () => ( -

    - - Etiam vulputate elit eu venenatis eleifend. Duis nec lectus augue. Morbi egestas diam sed - vulputate mollis. Fusce egestas pretium vehicula. Integer sed neque diam. Donec consectetur - velit vitae enim varius, ut placerat arcu imperdiet. Praesent sed faucibus arcu. Nullam sit - amet nibh a enim eleifend rhoncus. Donec pretium elementum leo at fermentum. Nulla - sollicitudin, mauris quis semper tempus, sem metus tristique diam, efficitur pulvinar mi - urna id urna. - -

    - ), -}); - -Story1.story = { - name: 'Simple note', - parameters: { notes: 'My notes on some bold text' }, -}; - -export const Story2 = () => ({ - view: () => ( -

    - 🤔😳😯😮 -
    - 😄😩😓😱 -
    - 🤓😑😶😊 -

    - ), -}); - -Story2.story = { - name: 'Note with HTML', - parameters: { - notes: ` -

    My notes on emojies

    - - It's not all that important to be honest, but.. - - Emojis are great, I love emojis, in fact I like using them in my Component notes too! 😇 - `, - }, -}; diff --git a/examples/official-storybook/main.js b/examples/official-storybook/main.js index cd5ac9d75050..0e2cf6ee5151 100644 --- a/examples/official-storybook/main.js +++ b/examples/official-storybook/main.js @@ -12,7 +12,6 @@ module.exports = { '@storybook/addon-actions', '@storybook/addon-links', '@storybook/addon-events', - '@storybook/addon-notes', '@storybook/addon-options', '@storybook/addon-knobs', '@storybook/addon-cssresources', diff --git a/examples/official-storybook/package.json b/examples/official-storybook/package.json index 95d6caafeb7f..2b570b642399 100644 --- a/examples/official-storybook/package.json +++ b/examples/official-storybook/package.json @@ -24,11 +24,9 @@ "@storybook/addon-docs": "6.0.0-alpha.1", "@storybook/addon-events": "6.0.0-alpha.1", "@storybook/addon-graphql": "6.0.0-alpha.1", - "@storybook/addon-info": "6.0.0-alpha.1", "@storybook/addon-jest": "6.0.0-alpha.1", "@storybook/addon-knobs": "6.0.0-alpha.1", "@storybook/addon-links": "6.0.0-alpha.1", - "@storybook/addon-notes": "6.0.0-alpha.1", "@storybook/addon-options": "6.0.0-alpha.1", "@storybook/addon-queryparams": "6.0.0-alpha.1", "@storybook/addon-storyshots": "6.0.0-alpha.1", diff --git a/examples/official-storybook/preview.js b/examples/official-storybook/preview.js index c8ef59f5683d..074c294f18c0 100644 --- a/examples/official-storybook/preview.js +++ b/examples/official-storybook/preview.js @@ -3,7 +3,6 @@ import { addDecorator, addParameters } from '@storybook/react'; import { Global, ThemeProvider, themes, createReset, convert } from '@storybook/theming'; import { withCssResources } from '@storybook/addon-cssresources'; import { withA11y } from '@storybook/addon-a11y'; -import { withNotes } from '@storybook/addon-notes'; import { DocsPage } from '@storybook/addon-docs/blocks'; import addHeadWarning from './head-warning'; @@ -27,7 +26,6 @@ addHeadWarning('dotenv-file-not-loaded', 'Dotenv file not loaded'); addDecorator(withCssResources); addDecorator(withA11y); -addDecorator(withNotes); addDecorator(storyFn => ( diff --git a/examples/official-storybook/stories/addon-info/EXAMPLE.md b/examples/official-storybook/stories/addon-info/EXAMPLE.md deleted file mode 100644 index fc965844dda0..000000000000 --- a/examples/official-storybook/stories/addon-info/EXAMPLE.md +++ /dev/null @@ -1,3 +0,0 @@ -# external -## markdown -file diff --git a/examples/official-storybook/stories/addon-info/decorators.stories.js b/examples/official-storybook/stories/addon-info/decorators.stories.js deleted file mode 100644 index 780fb3a0b6db..000000000000 --- a/examples/official-storybook/stories/addon-info/decorators.stories.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import { withInfo } from '@storybook/addon-info'; -import BaseButton from '../../components/BaseButton'; - -export default { - title: 'Addons/Info/Decorator', - decorators: [withInfo('Info can take options via the global or local decorator as well.')], -}; - -export const UseInfo = () => ; -UseInfo.story = { name: 'Use Info as story decorator' }; diff --git a/examples/official-storybook/stories/addon-info/forward-ref.stories.js b/examples/official-storybook/stories/addon-info/forward-ref.stories.js deleted file mode 100644 index 1aa8da24c022..000000000000 --- a/examples/official-storybook/stories/addon-info/forward-ref.stories.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import { withInfo } from '@storybook/addon-info'; -import ForwardedRefButton from '../../components/ForwardedRefButton'; -import ForwardedRefButtonWDisplayName from '../../components/ForwardedRefButtonWDisplayName'; - -export default { - title: 'Addons/Info/ForwardRef', - decorators: [withInfo], -}; - -export const DisplaysCorrectly = () => ; -DisplaysCorrectly.story = { name: 'Displays forwarded ref components correctly' }; - -export const DisplayName = () => ( - -); -DisplayName.story = { name: 'Uses forwardRef displayName if available' }; diff --git a/examples/official-storybook/stories/addon-info/github-issues.js b/examples/official-storybook/stories/addon-info/github-issues.js deleted file mode 100644 index 3b96ca11eded..000000000000 --- a/examples/official-storybook/stories/addon-info/github-issues.js +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { withInfo } from '@storybook/addon-info'; - -const hoc = WrapComponent => ({ ...props }) => ; - -const Input = hoc(() => ); - -const TextArea = hoc(({ children }) => ); - -export default { - title: 'Addons/Info/GitHub issues', - decorators: [withInfo], -}; - -export const issue1814 = () => ( -
    - -