From fbb81ddf0796c57dba6f55e335418f63fcfd367d Mon Sep 17 00:00:00 2001 From: redallen Date: Thu, 21 Mar 2019 09:41:56 -0400 Subject: [PATCH 01/46] minimum working docs --- .../react-core/src/components/Alert/Alert.md | 163 ++ .../examples/common/getContainerProps.js | 11 - .../src/components/Avatar/Avatar.md | 12 + .../patternfly-4/react-docs/.env.development | 1 - .../patternfly-4/react-docs/.env.production | 1 - packages/patternfly-4/react-docs/.eslintrc | 6 - packages/patternfly-4/react-docs/.gitignore | 72 +- packages/patternfly-4/react-docs/.npmignore | 8 - packages/patternfly-4/react-docs/CHANGELOG.md | 1716 ----------------- packages/patternfly-4/react-docs/README.md | 87 +- .../patternfly-4/react-docs/build/copyDocs.js | 58 - .../patternfly-4/react-docs/gatsby-config.js | 52 +- .../patternfly-4/react-docs/gatsby-node.js | 230 +-- packages/patternfly-4/react-docs/package.json | 55 +- .../gatsby-node.js | 93 + .../package.json | 24 + .../test.js | 5 + .../test1.json | 216 +++ .../src/assets/gatsby-astronaut.png | Bin 0 -> 167273 bytes .../react-docs/src/assets/gatsby-icon.png | Bin 0 -> 21212 bytes .../react-docs/src/assets/logo.png | Bin 14711 -> 0 bytes .../components/componentDocs/componentDocs.js | 170 -- .../componentDocs/componentDocs.styles.js | 8 - .../src/components/componentDocs/index.js | 1 - .../components/componentDocs/propsHelper.js | 143 -- .../src/components/content/content.js | 14 - .../src/components/content/content.styles.js | 8 - .../src/components/content/index.js | 1 - .../src/components/css-variables.js | 183 -- .../src/components/example/example.js | 121 -- .../src/components/example/example.styles.js | 13 - .../src/components/example/index.js | 1 - .../src/components/example/liveDemo.js | 184 -- .../src/components/example/liveDemo.styles.js | 33 - .../gridPlayground/gridPlayground.js | 70 - .../gridPlayground/gridPlayground.styles.js | 26 - .../src/components/gridPlayground/index.js | 1 - .../components/gridPlayground/itemControl.js | 61 - .../gridPlayground/itemControl.styles.js | 26 - .../components/gridPlayground/spanSlider.js | 44 - .../gridPlayground/spanSlider.styles.js | 23 - .../react-docs/src/components/header.js | 42 + .../react-docs/src/components/layout.js | 52 + .../src/components/layouts/fullPage.js | 13 - .../src/components/layouts/index.js | 169 -- .../src/components/navigation/index.js | 1 - .../src/components/navigation/navigation.js | 172 -- .../navigation/navigation.styles.js | 43 - .../components/navigation/navigationItem.js | 76 - .../navigation/navigationItem.styles.js | 54 - .../navigation/navigationItemGroup.js | 30 - .../navigation/navigationItemGroup.styles.js | 12 - .../react-docs/src/components/page/index.js | 1 - .../react-docs/src/components/page/page.js | 34 - .../src/components/page/page.styles.js | 19 - .../src/components/propsTable/index.js | 1 - .../src/components/propsTable/propsTable.js | 82 - .../propsTable/propsTable.styles.js | 10 - .../src/components/propsTableTs/index.js | 1 - .../components/propsTableTs/propsTableTs.js | 64 - .../propsTableTs/propsTableTs.styles.js | 10 - .../src/components/section/index.js | 1 - .../src/components/section/section.js | 48 - .../src/components/section/section.styles.js | 19 - .../react-docs/src/components/table/index.js | 1 - .../react-docs/src/components/table/table.js | 50 - .../src/components/table/table.styles.js | 33 - .../patternfly-4/react-docs/src/pages/404.js | 10 - .../src/pages/getting-started/faqs.js | 3 - .../src/pages/getting-started/index.js | 3 - .../react-docs/src/pages/index.js | 61 +- .../react-docs/src/pages/page-2.js | 14 + .../react-docs/src/pages/styles/icons.js | 42 - .../react-docs/src/pages/styles/tokens.js | 18 - .../src/templates/markdownTemplate.js | 64 + yarn.lock | 1188 +++++++----- 76 files changed, 1553 insertions(+), 4829 deletions(-) create mode 100644 packages/patternfly-4/react-core/src/components/Alert/Alert.md delete mode 100644 packages/patternfly-4/react-core/src/components/Alert/examples/common/getContainerProps.js create mode 100644 packages/patternfly-4/react-core/src/components/Avatar/Avatar.md delete mode 100644 packages/patternfly-4/react-docs/.env.development delete mode 100644 packages/patternfly-4/react-docs/.env.production delete mode 100644 packages/patternfly-4/react-docs/.eslintrc delete mode 100644 packages/patternfly-4/react-docs/.npmignore delete mode 100644 packages/patternfly-4/react-docs/CHANGELOG.md delete mode 100644 packages/patternfly-4/react-docs/build/copyDocs.js create mode 100644 packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js create mode 100644 packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/package.json create mode 100644 packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test.js create mode 100644 packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test1.json create mode 100644 packages/patternfly-4/react-docs/src/assets/gatsby-astronaut.png create mode 100644 packages/patternfly-4/react-docs/src/assets/gatsby-icon.png delete mode 100644 packages/patternfly-4/react-docs/src/assets/logo.png delete mode 100644 packages/patternfly-4/react-docs/src/components/componentDocs/componentDocs.js delete mode 100644 packages/patternfly-4/react-docs/src/components/componentDocs/componentDocs.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/componentDocs/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/componentDocs/propsHelper.js delete mode 100644 packages/patternfly-4/react-docs/src/components/content/content.js delete mode 100644 packages/patternfly-4/react-docs/src/components/content/content.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/content/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/css-variables.js delete mode 100644 packages/patternfly-4/react-docs/src/components/example/example.js delete mode 100644 packages/patternfly-4/react-docs/src/components/example/example.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/example/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/example/liveDemo.js delete mode 100644 packages/patternfly-4/react-docs/src/components/example/liveDemo.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/gridPlayground/gridPlayground.js delete mode 100644 packages/patternfly-4/react-docs/src/components/gridPlayground/gridPlayground.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/gridPlayground/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/gridPlayground/itemControl.js delete mode 100644 packages/patternfly-4/react-docs/src/components/gridPlayground/itemControl.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/gridPlayground/spanSlider.js delete mode 100644 packages/patternfly-4/react-docs/src/components/gridPlayground/spanSlider.styles.js create mode 100644 packages/patternfly-4/react-docs/src/components/header.js create mode 100644 packages/patternfly-4/react-docs/src/components/layout.js delete mode 100644 packages/patternfly-4/react-docs/src/components/layouts/fullPage.js delete mode 100644 packages/patternfly-4/react-docs/src/components/layouts/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/navigation/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/navigation/navigation.js delete mode 100644 packages/patternfly-4/react-docs/src/components/navigation/navigation.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/navigation/navigationItem.js delete mode 100644 packages/patternfly-4/react-docs/src/components/navigation/navigationItem.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/navigation/navigationItemGroup.js delete mode 100644 packages/patternfly-4/react-docs/src/components/navigation/navigationItemGroup.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/page/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/page/page.js delete mode 100644 packages/patternfly-4/react-docs/src/components/page/page.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/propsTable/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/propsTable/propsTable.js delete mode 100644 packages/patternfly-4/react-docs/src/components/propsTable/propsTable.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/propsTableTs/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/propsTableTs/propsTableTs.js delete mode 100644 packages/patternfly-4/react-docs/src/components/propsTableTs/propsTableTs.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/section/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/section/section.js delete mode 100644 packages/patternfly-4/react-docs/src/components/section/section.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/components/table/index.js delete mode 100644 packages/patternfly-4/react-docs/src/components/table/table.js delete mode 100644 packages/patternfly-4/react-docs/src/components/table/table.styles.js delete mode 100644 packages/patternfly-4/react-docs/src/pages/404.js delete mode 100644 packages/patternfly-4/react-docs/src/pages/getting-started/faqs.js delete mode 100644 packages/patternfly-4/react-docs/src/pages/getting-started/index.js create mode 100644 packages/patternfly-4/react-docs/src/pages/page-2.js delete mode 100644 packages/patternfly-4/react-docs/src/pages/styles/icons.js delete mode 100644 packages/patternfly-4/react-docs/src/pages/styles/tokens.js create mode 100644 packages/patternfly-4/react-docs/src/templates/markdownTemplate.js diff --git a/packages/patternfly-4/react-core/src/components/Alert/Alert.md b/packages/patternfly-4/react-core/src/components/Alert/Alert.md new file mode 100644 index 00000000000..9c6a092baa4 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Alert/Alert.md @@ -0,0 +1,163 @@ +--- +title: "Alert" +cssPrefix: "pf-c-alert" +--- +#### Info Alert +```js +import React from 'react'; +import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; + +class InfoAlert extends React.Component { + state = { alertOneVisible: true, alertTwoVisible: true }; + hideAlertOne = () => this.setState({ alertOneVisible: false }); + hideAlertTwo = () => this.setState({ alertTwoVisible: false }); + + render() { + const { alertOneVisible, alertTwoVisible } = this.state; + return ( + + {alertOneVisible && ( + } + > + Info alert description. This is a link. + + )} + {alertTwoVisible && ( + } + /> + )} + Action Button} /> + + + ); + } +} +``` + +#### Success Alert +```js +import React from 'react'; +import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; + +class SuccessAlert extends React.Component { + state = { alertOneVisible: true, alertTwoVisible: true }; + hideAlertOne = () => this.setState({ alertOneVisible: false }); + hideAlertTwo = () => this.setState({ alertTwoVisible: false }); + + render() { + const { alertOneVisible, alertTwoVisible } = this.state; + return ( + + {alertOneVisible && ( + } + > + Success alert description. This is a link. + + )} + {alertTwoVisible && ( + } + /> + )} + Action Button} + /> + + + ); + } +} +``` + +#### Warning Alert +```js +import React from 'react'; +import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; + +class WarningAlert extends React.Component { + state = { alertOneVisible: true, alertTwoVisible: true }; + hideAlertOne = () => this.setState({ alertOneVisible: false }); + hideAlertTwo = () => this.setState({ alertTwoVisible: false }); + + render() { + const { alertOneVisible, alertTwoVisible } = this.state; + return ( + + {alertOneVisible && ( + } + > + Warning alert description. This is a link. + + )} + {alertTwoVisible && ( + } + /> + )} + Action Button} + /> + + + ); + } +} +``` + +#### Danger Alert +```js +import React from 'react'; +import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; + +class DangerAlert extends React.Component { + state = { alertOneVisible: true, alertTwoVisible: true }; + hideAlertOne = () => this.setState({ alertOneVisible: false }); + hideAlertTwo = () => this.setState({ alertTwoVisible: false }); + + render() { + const { alertOneVisible, alertTwoVisible } = this.state; + return ( + + {alertOneVisible && ( + } />} + > + Danger alert description. This is a link. + + )} + {alertTwoVisible && ( + } + /> + )} + Action Button} /> + + + ); + } +} +``` diff --git a/packages/patternfly-4/react-core/src/components/Alert/examples/common/getContainerProps.js b/packages/patternfly-4/react-core/src/components/Alert/examples/common/getContainerProps.js deleted file mode 100644 index a0ba63e5aca..00000000000 --- a/packages/patternfly-4/react-core/src/components/Alert/examples/common/getContainerProps.js +++ /dev/null @@ -1,11 +0,0 @@ -import { css, StyleSheet } from '@patternfly/react-styles'; - -const styles = StyleSheet.create({ - demoLayout: { - '& > .pf-c-alert': { - marginBottom: '0.5rem' - } - } -}); - -export default () => ({ className: css(styles.demoLayout) }); diff --git a/packages/patternfly-4/react-core/src/components/Avatar/Avatar.md b/packages/patternfly-4/react-core/src/components/Avatar/Avatar.md new file mode 100644 index 00000000000..671d2401ab7 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Avatar/Avatar.md @@ -0,0 +1,12 @@ +--- +title: "Avatar" +cssPrefix: "pf-c-avatar" +--- +#### Simple Avatar + +```js +import { Avatar } from '@patternfly/react-core'; +import avatarImg from './examples/img_avatar.svg'; + + +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/.env.development b/packages/patternfly-4/react-docs/.env.development deleted file mode 100644 index 4536de626eb..00000000000 --- a/packages/patternfly-4/react-docs/.env.development +++ /dev/null @@ -1 +0,0 @@ -GATSBY_LIVE_EXAMPLES=true diff --git a/packages/patternfly-4/react-docs/.env.production b/packages/patternfly-4/react-docs/.env.production deleted file mode 100644 index 4536de626eb..00000000000 --- a/packages/patternfly-4/react-docs/.env.production +++ /dev/null @@ -1 +0,0 @@ -GATSBY_LIVE_EXAMPLES=true diff --git a/packages/patternfly-4/react-docs/.eslintrc b/packages/patternfly-4/react-docs/.eslintrc deleted file mode 100644 index a6880261126..00000000000 --- a/packages/patternfly-4/react-docs/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../.eslintrc.js", - "globals": { - "graphql": true - } -} diff --git a/packages/patternfly-4/react-docs/.gitignore b/packages/patternfly-4/react-docs/.gitignore index 9bb68a23889..e86fe25559b 100644 --- a/packages/patternfly-4/react-docs/.gitignore +++ b/packages/patternfly-4/react-docs/.gitignore @@ -1,5 +1,69 @@ -.cache -.tmp +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# dotenv environment variables file +.env + +# gatsby files +.cache/ public -static -build/ts-output.json \ No newline at end of file + +# Mac files +.DS_Store + +# Yarn +yarn-error.log +.pnp/ +.pnp.js +# Yarn Integrity file +.yarn-integrity diff --git a/packages/patternfly-4/react-docs/.npmignore b/packages/patternfly-4/react-docs/.npmignore deleted file mode 100644 index 779fcff3bf4..00000000000 --- a/packages/patternfly-4/react-docs/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -.cache -.tmp -.babelrc -.eslintrc - -public -src -static diff --git a/packages/patternfly-4/react-docs/CHANGELOG.md b/packages/patternfly-4/react-docs/CHANGELOG.md deleted file mode 100644 index 53d51e12a5a..00000000000 --- a/packages/patternfly-4/react-docs/CHANGELOG.md +++ /dev/null @@ -1,1716 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [3.23.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.23.3...@patternfly/react-docs@3.23.4) (2019-03-19) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.23.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.23.2...@patternfly/react-docs@3.23.3) (2019-03-19) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.23.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.23.1...@patternfly/react-docs@3.23.2) (2019-03-18) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.23.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.23.0...@patternfly/react-docs@3.23.1) (2019-03-18) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -# [3.23.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.22.3...@patternfly/react-docs@3.23.0) (2019-03-18) - - -### Features - -* **core:** clean tsconfigs, add defaultProps to TS-docs ([#1570](https://github.com/patternfly/patternfly-react/issues/1570)) ([9df0f15](https://github.com/patternfly/patternfly-react/commit/9df0f15)) - - - - - -## [3.22.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.22.2...@patternfly/react-docs@3.22.3) (2019-03-18) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.22.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.22.1...@patternfly/react-docs@3.22.2) (2019-03-18) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.22.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.22.0...@patternfly/react-docs@3.22.1) (2019-03-15) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -# [3.22.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.71...@patternfly/react-docs@3.22.0) (2019-03-15) - - -### Features - -* **PF4:** Wizard ([#1539](https://github.com/patternfly/patternfly-react/issues/1539)) ([c668a33](https://github.com/patternfly/patternfly-react/commit/c668a33)) - - - - - -## [3.21.71](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.70...@patternfly/react-docs@3.21.71) (2019-03-15) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.70](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.69...@patternfly/react-docs@3.21.70) (2019-03-14) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.69](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.68...@patternfly/react-docs@3.21.69) (2019-03-14) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.68](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.67...@patternfly/react-docs@3.21.68) (2019-03-14) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.67](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.66...@patternfly/react-docs@3.21.67) (2019-03-14) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.66](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.65...@patternfly/react-docs@3.21.66) (2019-03-13) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.65](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.64...@patternfly/react-docs@3.21.65) (2019-03-13) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.64](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.63...@patternfly/react-docs@3.21.64) (2019-03-12) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.63](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.62...@patternfly/react-docs@3.21.63) (2019-03-12) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.62](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.61...@patternfly/react-docs@3.21.62) (2019-03-11) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.61](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.60...@patternfly/react-docs@3.21.61) (2019-03-11) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.59...@patternfly/react-docs@3.21.60) (2019-03-11) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.58...@patternfly/react-docs@3.21.59) (2019-03-11) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.57...@patternfly/react-docs@3.21.58) (2019-03-08) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.56...@patternfly/react-docs@3.21.57) (2019-03-08) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.55...@patternfly/react-docs@3.21.56) (2019-03-07) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.54...@patternfly/react-docs@3.21.55) (2019-03-06) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.53...@patternfly/react-docs@3.21.54) (2019-03-06) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.52...@patternfly/react-docs@3.21.53) (2019-03-05) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.51...@patternfly/react-docs@3.21.52) (2019-03-05) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.50...@patternfly/react-docs@3.21.51) (2019-03-05) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.49...@patternfly/react-docs@3.21.50) (2019-03-04) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.48...@patternfly/react-docs@3.21.49) (2019-03-04) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.47...@patternfly/react-docs@3.21.48) (2019-02-28) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.46...@patternfly/react-docs@3.21.47) (2019-02-28) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.45...@patternfly/react-docs@3.21.46) (2019-02-26) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.44...@patternfly/react-docs@3.21.45) (2019-02-25) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.43...@patternfly/react-docs@3.21.44) (2019-02-25) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.42...@patternfly/react-docs@3.21.43) (2019-02-25) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.41...@patternfly/react-docs@3.21.42) (2019-02-25) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.39...@patternfly/react-docs@3.21.41) (2019-02-21) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.38...@patternfly/react-docs@3.21.39) (2019-02-20) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.37...@patternfly/react-docs@3.21.38) (2019-02-20) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.36...@patternfly/react-docs@3.21.37) (2019-02-20) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.35...@patternfly/react-docs@3.21.36) (2019-02-20) - - -### Bug Fixes - -* **lint:** fix linting glob and auto-fixable linter errors ([#1256](https://github.com/patternfly/patternfly-react/issues/1256)) ([#1409](https://github.com/patternfly/patternfly-react/issues/1409)) ([0b637fe](https://github.com/patternfly/patternfly-react/commit/0b637fe)) - - - - - -## [3.21.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.34...@patternfly/react-docs@3.21.35) (2019-02-19) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.33...@patternfly/react-docs@3.21.34) (2019-02-19) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.32...@patternfly/react-docs@3.21.33) (2019-02-19) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.31...@patternfly/react-docs@3.21.32) (2019-02-18) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.30...@patternfly/react-docs@3.21.31) (2019-02-15) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.29...@patternfly/react-docs@3.21.30) (2019-02-14) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.28...@patternfly/react-docs@3.21.29) (2019-02-13) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.27...@patternfly/react-docs@3.21.28) (2019-02-13) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.26...@patternfly/react-docs@3.21.27) (2019-02-13) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.25...@patternfly/react-docs@3.21.26) (2019-02-12) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.24...@patternfly/react-docs@3.21.25) (2019-02-12) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.23...@patternfly/react-docs@3.21.24) (2019-02-11) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.22...@patternfly/react-docs@3.21.23) (2019-02-11) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.21...@patternfly/react-docs@3.21.22) (2019-02-11) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.20...@patternfly/react-docs@3.21.21) (2019-02-08) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.19...@patternfly/react-docs@3.21.20) (2019-02-08) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.17...@patternfly/react-docs@3.21.19) (2019-02-08) - - -### Bug Fixes - -* **docs:** bump react docs version ([#1357](https://github.com/patternfly/patternfly-react/issues/1357)) ([470d648](https://github.com/patternfly/patternfly-react/commit/470d648)) - - - - - -## [3.21.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.16...@patternfly/react-docs@3.21.17) (2019-02-01) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.15...@patternfly/react-docs@3.21.16) (2019-02-01) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.14...@patternfly/react-docs@3.21.15) (2019-02-01) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.13...@patternfly/react-docs@3.21.14) (2019-01-30) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.12...@patternfly/react-docs@3.21.13) (2019-01-30) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.11...@patternfly/react-docs@3.21.12) (2019-01-29) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.10...@patternfly/react-docs@3.21.11) (2019-01-29) - - -### Bug Fixes - -* **build:** Support building Gatsby app under Windows ([#1248](https://github.com/patternfly/patternfly-react/issues/1248)) ([89bc7f8](https://github.com/patternfly/patternfly-react/commit/89bc7f8)) - - - - - -## [3.21.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.9...@patternfly/react-docs@3.21.10) (2019-01-29) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.8...@patternfly/react-docs@3.21.9) (2019-01-29) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.7...@patternfly/react-docs@3.21.8) (2019-01-29) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.6...@patternfly/react-docs@3.21.7) (2019-01-28) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.5...@patternfly/react-docs@3.21.6) (2019-01-25) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.4...@patternfly/react-docs@3.21.5) (2019-01-24) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.3...@patternfly/react-docs@3.21.4) (2019-01-21) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.2...@patternfly/react-docs@3.21.3) (2019-01-21) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.1...@patternfly/react-docs@3.21.2) (2019-01-18) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.21.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.21.0...@patternfly/react-docs@3.21.1) (2019-01-18) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -# [3.21.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.20.2...@patternfly/react-docs@3.21.0) (2019-01-17) - - -### Features - -* **example:** Add dark theme toggle button & change background colort ([#1212](https://github.com/patternfly/patternfly-react/issues/1212)) ([ec1bfbf](https://github.com/patternfly/patternfly-react/commit/ec1bfbf)) - - - - - -## [3.20.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.20.1...@patternfly/react-docs@3.20.2) (2019-01-17) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -## [3.20.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.20.0...@patternfly/react-docs@3.20.1) (2019-01-17) - -**Note:** Version bump only for package @patternfly/react-docs - - - - - -# [3.20.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.60...@patternfly/react-docs@3.20.0) (2019-01-16) - - -### Features - -* **Table:** introduce new component Table based on pf4 designs ([#821](https://github.com/patternfly/patternfly-react/issues/821)) ([7b38cbc](https://github.com/patternfly/patternfly-react/commit/7b38cbc)) - - - - - - -## [3.19.60](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.59...@patternfly/react-docs@3.19.60) (2019-01-15) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.59](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.58...@patternfly/react-docs@3.19.59) (2019-01-15) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.58](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.57...@patternfly/react-docs@3.19.58) (2019-01-14) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.57](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.56...@patternfly/react-docs@3.19.57) (2019-01-14) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.56](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.54...@patternfly/react-docs@3.19.56) (2019-01-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.55](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.54...@patternfly/react-docs@3.19.55) (2019-01-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.54](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.53...@patternfly/react-docs@3.19.54) (2019-01-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.53](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.52...@patternfly/react-docs@3.19.53) (2019-01-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.52](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.51...@patternfly/react-docs@3.19.52) (2019-01-10) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.51](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.50...@patternfly/react-docs@3.19.51) (2019-01-10) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.50](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.49...@patternfly/react-docs@3.19.50) (2019-01-10) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.49](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.48...@patternfly/react-docs@3.19.49) (2019-01-10) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.48](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.47...@patternfly/react-docs@3.19.48) (2019-01-09) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.47](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.46...@patternfly/react-docs@3.19.47) (2019-01-08) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.46](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.45...@patternfly/react-docs@3.19.46) (2019-01-08) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.45](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.44...@patternfly/react-docs@3.19.45) (2019-01-08) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.44](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.43...@patternfly/react-docs@3.19.44) (2019-01-07) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.43](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.42...@patternfly/react-docs@3.19.43) (2019-01-04) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.41...@patternfly/react-docs@3.19.42) (2019-01-04) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.40...@patternfly/react-docs@3.19.41) (2019-01-04) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.39...@patternfly/react-docs@3.19.40) (2019-01-03) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.38...@patternfly/react-docs@3.19.39) (2019-01-02) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.37...@patternfly/react-docs@3.19.38) (2018-12-20) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.36...@patternfly/react-docs@3.19.37) (2018-12-20) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.35...@patternfly/react-docs@3.19.36) (2018-12-20) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.34...@patternfly/react-docs@3.19.35) (2018-12-19) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.33...@patternfly/react-docs@3.19.34) (2018-12-19) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.32...@patternfly/react-docs@3.19.33) (2018-12-19) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.30...@patternfly/react-docs@3.19.32) (2018-12-19) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.30...@patternfly/react-docs@3.19.31) (2018-12-19) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.29...@patternfly/react-docs@3.19.30) (2018-12-19) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.28...@patternfly/react-docs@3.19.29) (2018-12-19) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.27...@patternfly/react-docs@3.19.28) (2018-12-19) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.26...@patternfly/react-docs@3.19.27) (2018-12-13) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.25...@patternfly/react-docs@3.19.26) (2018-12-13) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.24...@patternfly/react-docs@3.19.25) (2018-12-13) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.22...@patternfly/react-docs@3.19.24) (2018-12-12) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.22...@patternfly/react-docs@3.19.23) (2018-12-12) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.21...@patternfly/react-docs@3.19.22) (2018-12-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.20...@patternfly/react-docs@3.19.21) (2018-12-10) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.19...@patternfly/react-docs@3.19.20) (2018-12-07) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.18...@patternfly/react-docs@3.19.19) (2018-12-07) - - -### Bug Fixes - -* **title:** allow multiple heading levels for Title ([#1005](https://github.com/patternfly/patternfly-react/issues/1005)) ([0eae3d1](https://github.com/patternfly/patternfly-react/commit/0eae3d1)) - - - - - -## [3.19.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.17...@patternfly/react-docs@3.19.18) (2018-12-05) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.16...@patternfly/react-docs@3.19.17) (2018-11-30) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.15...@patternfly/react-docs@3.19.16) (2018-11-30) - - -### Bug Fixes - -* **a11y:** tweak html for better accessibility ([#917](https://github.com/patternfly/patternfly-react/issues/917)) ([c1af473](https://github.com/patternfly/patternfly-react/commit/c1af473)) - - - - - -## [3.19.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.14...@patternfly/react-docs@3.19.15) (2018-11-30) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.13...@patternfly/react-docs@3.19.14) (2018-11-28) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.12...@patternfly/react-docs@3.19.13) (2018-11-28) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.11...@patternfly/react-docs@3.19.12) (2018-11-28) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.9...@patternfly/react-docs@3.19.11) (2018-11-27) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.9...@patternfly/react-docs@3.19.10) (2018-11-27) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.8...@patternfly/react-docs@3.19.9) (2018-11-27) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.7...@patternfly/react-docs@3.19.8) (2018-11-21) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.6...@patternfly/react-docs@3.19.7) (2018-11-20) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.5...@patternfly/react-docs@3.19.6) (2018-11-20) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.4...@patternfly/react-docs@3.19.5) (2018-11-16) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.2...@patternfly/react-docs@3.19.4) (2018-11-15) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.2...@patternfly/react-docs@3.19.3) (2018-11-14) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.0...@patternfly/react-docs@3.19.2) (2018-11-13) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.19.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.19.0...@patternfly/react-docs@3.19.1) (2018-11-13) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -# [3.19.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.18.0...@patternfly/react-docs@3.19.0) (2018-11-12) - - -### Features - -* **styled-system:** adds styled system to pf4 as its own package ([#891](https://github.com/patternfly/patternfly-react/issues/891)) ([2888855](https://github.com/patternfly/patternfly-react/commit/2888855)) - - - - - -# [3.18.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.42...@patternfly/react-docs@3.18.0) (2018-11-12) - - -### Features - -* **a11y:** add accessibility checks for pf4 ([#904](https://github.com/patternfly/patternfly-react/issues/904)) ([f324be7](https://github.com/patternfly/patternfly-react/commit/f324be7)) - - - - - -## [3.17.42](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.41...@patternfly/react-docs@3.17.42) (2018-11-12) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.41](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.40...@patternfly/react-docs@3.17.41) (2018-11-08) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.40](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.39...@patternfly/react-docs@3.17.40) (2018-11-08) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.39](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.38...@patternfly/react-docs@3.17.39) (2018-11-08) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.38](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.37...@patternfly/react-docs@3.17.38) (2018-11-07) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.37](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.36...@patternfly/react-docs@3.17.37) (2018-11-07) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.36](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.35...@patternfly/react-docs@3.17.36) (2018-11-07) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.35](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.34...@patternfly/react-docs@3.17.35) (2018-11-06) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.34](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.33...@patternfly/react-docs@3.17.34) (2018-11-06) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.33](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.32...@patternfly/react-docs@3.17.33) (2018-11-05) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.32](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.31...@patternfly/react-docs@3.17.32) (2018-11-05) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.31](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.30...@patternfly/react-docs@3.17.31) (2018-11-02) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.30](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.29...@patternfly/react-docs@3.17.30) (2018-11-01) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.29](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.28...@patternfly/react-docs@3.17.29) (2018-10-30) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.28](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.27...@patternfly/react-docs@3.17.28) (2018-10-30) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.27](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.26...@patternfly/react-docs@3.17.27) (2018-10-30) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.26](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.25...@patternfly/react-docs@3.17.26) (2018-10-30) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.25](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.24...@patternfly/react-docs@3.17.25) (2018-10-29) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.24](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.23...@patternfly/react-docs@3.17.24) (2018-10-26) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.23](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.22...@patternfly/react-docs@3.17.23) (2018-10-26) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.22](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.21...@patternfly/react-docs@3.17.22) (2018-10-26) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.21](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.20...@patternfly/react-docs@3.17.21) (2018-10-26) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.20](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.19...@patternfly/react-docs@3.17.20) (2018-10-26) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.19](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.18...@patternfly/react-docs@3.17.19) (2018-10-26) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.18](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.17...@patternfly/react-docs@3.17.18) (2018-10-25) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.17](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.16...@patternfly/react-docs@3.17.17) (2018-10-24) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.16](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.15...@patternfly/react-docs@3.17.16) (2018-10-24) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.15](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.14...@patternfly/react-docs@3.17.15) (2018-10-24) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.14](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.13...@patternfly/react-docs@3.17.14) (2018-10-18) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.13](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.11...@patternfly/react-docs@3.17.13) (2018-10-18) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.11...@patternfly/react-docs@3.17.12) (2018-10-18) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.10...@patternfly/react-docs@3.17.11) (2018-10-18) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.9...@patternfly/react-docs@3.17.10) (2018-10-18) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.8...@patternfly/react-docs@3.17.9) (2018-10-18) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.7...@patternfly/react-docs@3.17.8) (2018-10-17) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.6...@patternfly/react-docs@3.17.7) (2018-10-17) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.5...@patternfly/react-docs@3.17.6) (2018-10-17) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.4...@patternfly/react-docs@3.17.5) (2018-10-16) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.3...@patternfly/react-docs@3.17.4) (2018-10-16) - - -### Bug Fixes - -* **react-docs:** Fix live mode toggling ([#780](https://github.com/patternfly/patternfly-react/issues/780)) ([f7cc358](https://github.com/patternfly/patternfly-react/commit/f7cc358)) - - - - - -## [3.17.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.2...@patternfly/react-docs@3.17.3) (2018-10-16) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.1...@patternfly/react-docs@3.17.2) (2018-10-16) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.17.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.17.0...@patternfly/react-docs@3.17.1) (2018-10-13) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -# [3.17.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.12...@patternfly/react-docs@3.17.0) (2018-10-12) - - -### Features - -* **page layout demos:** Add PF4 page layout demos ([#749](https://github.com/patternfly/patternfly-react/issues/749)) ([025d862](https://github.com/patternfly/patternfly-react/commit/025d862)) - - - - - -## [3.16.12](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.11...@patternfly/react-docs@3.16.12) (2018-10-12) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.11](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.10...@patternfly/react-docs@3.16.11) (2018-10-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.10](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.9...@patternfly/react-docs@3.16.10) (2018-10-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.9](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.8...@patternfly/react-docs@3.16.9) (2018-10-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.8](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.6...@patternfly/react-docs@3.16.8) (2018-10-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.7](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.6...@patternfly/react-docs@3.16.7) (2018-10-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.6](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.5...@patternfly/react-docs@3.16.6) (2018-10-11) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.5](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.4...@patternfly/react-docs@3.16.5) (2018-10-09) - - -### Bug Fixes - -* **react-docs: oneoftype support:** ([#721](https://github.com/patternfly/patternfly-react/issues/721)) ([91c5f31](https://github.com/patternfly/patternfly-react/commit/91c5f31)), closes [#720](https://github.com/patternfly/patternfly-react/issues/720) - - - - - -## [3.16.4](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.3...@patternfly/react-docs@3.16.4) (2018-10-09) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.2...@patternfly/react-docs@3.16.3) (2018-10-09) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.1...@patternfly/react-docs@3.16.2) (2018-10-09) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.16.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.16.0...@patternfly/react-docs@3.16.1) (2018-10-08) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -# [3.16.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.15.3...@patternfly/react-docs@3.16.0) (2018-10-08) - - -### Features - -* **patternfly-react/patternfly-4/react-core/:** added PF4 AboutModal Component ([#671](https://github.com/patternfly/patternfly-react/issues/671)) ([1b01037](https://github.com/patternfly/patternfly-react/commit/1b01037)), closes [#482](https://github.com/patternfly/patternfly-react/issues/482) - - - - - -## [3.15.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.15.2...@patternfly/react-docs@3.15.3) (2018-10-05) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.15.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.15.1...@patternfly/react-docs@3.15.2) (2018-10-05) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.15.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.15.0...@patternfly/react-docs@3.15.1) (2018-10-05) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -# [3.15.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.14.3...@patternfly/react-docs@3.15.0) (2018-10-04) - - -### Features - -* **Live Examples:** allow users to tab past editors ([#694](https://github.com/patternfly/patternfly-react/issues/694)) ([c36b53a](https://github.com/patternfly/patternfly-react/commit/c36b53a)) - - - - - -## [3.14.3](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.14.2...@patternfly/react-docs@3.14.3) (2018-10-03) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.14.2](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.14.1...@patternfly/react-docs@3.14.2) (2018-10-03) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -## [3.14.1](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.14.0...@patternfly/react-docs@3.14.1) (2018-10-03) - - - - -**Note:** Version bump only for package @patternfly/react-docs - - -# [3.14.0](https://github.com/patternfly/patternfly-react/compare/@patternfly/react-docs@3.13.0...@patternfly/react-docs@3.14.0) (2018-10-02) - - -### Features - -* **pf4-nav:** add nav component ([#626](https://github.com/patternfly/patternfly-react/issues/626)) ([677587c](https://github.com/patternfly/patternfly-react/commit/677587c)), closes [#547](https://github.com/patternfly/patternfly-react/issues/547) diff --git a/packages/patternfly-4/react-docs/README.md b/packages/patternfly-4/react-docs/README.md index 58699b847e2..fb69781ad83 100644 --- a/packages/patternfly-4/react-docs/README.md +++ b/packages/patternfly-4/react-docs/README.md @@ -1,86 +1,17 @@ -# PatternFly React Docs -This site uses gatsby. +# React-docs -For an overview of the project structure please refer to the [Gatsby documentation - Building with Components](https://www.gatsbyjs.org/docs/building-with-components/). +Gatsby is a static site generator that doubles as a hot-module reloader for building our docs. +We have to more or less build our own version of [React Styleguidist](https://github.com/styleguidist/react-styleguidist). To enable hot-module reloading and other async efficiences, we have to build our own data pipeline and transformations through Gatsby's GraphQL. +1. **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you’d like to include, etc. (Check out the [config docs](https://www.gatsbyjs.org/docs/gatsby-config/) for more detail). + - We include our own plugins for transforming component source files into metadata via [React Docgen](https://github.com/reactjs/react-docgen) and [React Docgen Typescript](https://github.com/styleguidist/react-docgen-typescript). -### Note: All commands below assume you are on the root directory in this repository. -## Install -Run to install all the dependencies -```sh -yarn install -``` +2. **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby Node APIs](https://www.gatsbyjs.org/docs/node-apis/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process. -## Running -To start the site locally. -```sh -yarn build && yarn start:pf4 -``` +3. **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](https://www.gatsbyjs.org/docs/browser-apis/) (if any). These allow customization/extension of default Gatsby settings affecting the browser. -## Building -To build the site. -```sh -yarn build:docs -``` -## Live examples -### Disabling globally -You can turn off the functionality to live edit the examples globally by settings GATSBY_LIVE_EXAMPLES to false, either by editing [.env.development](./.env.development) and [.env.production](./.env.production) or by setting it in the CLI prior to starting the docs: -```sh -GATSBY_LIVE_EXAMPLES=false yarn start:pf4 -``` -### Other example settings -There are some special static fields you can specify in the example to change behavior: -```sh -// Sets the title for the example -static title = 'Example title'; +Looking for more guidance? Full documentation for Gatsby lives [on the website](https://www.gatsbyjs.org/). Here are some places to start: -// Sets the description for the example -static description = 'Example description'; - -// True by default, set to false to disable live editing for this example -static live = false; - -// Pass imports into the liveScope object so it is available to the live editor. -// By default, the live editor only knows about React.*, react-core components, react-icons, and the react-styles css function -// If you have additional imports in your examples, they can be passed to the live editor scope like this: -static liveScope = { spacingStyles }; - -// Additional styles relevant to the example display can be added via a static field getContainerProps. -// getContainerProps is an import to a .js file that has content such as: -/* -import { css, StyleSheet } from '@patternfly/react-styles'; -const styles = StyleSheet.create({ - demoLayout: { - '& > .pf-c-alert': { - marginBottom: '0.5rem' - } - } -}); -export default () => ({ className: css(styles.demoLayout) }); -*/ -static getContainerProps = getContainerProps; - -``` -In the examples *.docs.js file, you can specify these properties: -```sh -// Main title for the examples -title: 'Alert', - -// Components to display in the props table -components: { - Alert -}, - -// Enums that need to be evaluated for the props table -enumValues: { - 'Object.values(AlertVariant)': Object.values(AlertVariant) -}, - -// The examples -examples: [SuccessExample, DangerExample, InfoExample, WarningExample], -// True to show links instead of inline examples, also turns live editing off - -fullPageOnly: false -``` +- **For most developers, we recommend starting with our [in-depth tutorial for creating a site with Gatsby](https://www.gatsbyjs.org/tutorial/).** It starts with zero assumptions about your level of ability and walks through every step of the process. \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/build/copyDocs.js b/packages/patternfly-4/react-docs/build/copyDocs.js deleted file mode 100644 index 7e4e9e588c3..00000000000 --- a/packages/patternfly-4/react-docs/build/copyDocs.js +++ /dev/null @@ -1,58 +0,0 @@ -/* eslint-disable global-require,import/no-dynamic-require */ -const glob = require('glob'); -const path = require('path'); -const fs = require('fs-extra'); - -const dest = path.resolve(__dirname, '../dist'); - -const packageDirs = ['react-core', 'react-charts', 'react-table', 'react-styled-system']; -const moduleTypes = ['js', 'esm']; - -moduleTypes.forEach(moduleType => { - packageDirs.forEach(packageDir => copyPackageDocs(packageDir, moduleType)); -}); - -copyStyles(); -copyAssets(); - -function copyStyles() { - const packageDir = 'react-core'; - const moduleType = 'styles'; - const packageBase = path.resolve(__dirname, '../../', packageDir); - const packageDist = path.join(packageBase, 'dist', moduleType); - const { name } = require(path.join(packageBase, 'package.json')); - - const formattedName = name.replace('@patternfly/', ''); - const from = path.join(packageDist); - const to = path.join(dest, moduleType, formattedName); - fs.copySync(from, to); -} - -function copyAssets() { - const from = path.resolve(__dirname, '../dist/styles/react-core/assets'); - const to = path.resolve(__dirname, '../static/assets'); - fs.copySync(from, to); -} - -function copyPackageDocs(packageDir, moduleType) { - const packageBase = path.resolve(__dirname, '../../', packageDir); - const packageDist = path.join(packageBase, 'dist', moduleType); - const { name } = require(path.join(packageBase, 'package.json')); - - const formattedName = name.replace('@patternfly/', ''); - - const docFiles = glob.sync('**/*.docs.js', { cwd: packageDist }); - const exampleFiles = glob.sync('**/examples/**', { cwd: packageDist }); - const copyDocFile = createCopyFunction(formattedName, packageDist, moduleType); - - docFiles.forEach(copyDocFile); - exampleFiles.forEach(copyDocFile); -} - -function createCopyFunction(packageName, packageDist, moduleType) { - return filePath => { - const from = path.join(packageDist, filePath); - const to = path.join(dest, moduleType, packageName, filePath); - fs.copySync(from, to); - }; -} diff --git a/packages/patternfly-4/react-docs/gatsby-config.js b/packages/patternfly-4/react-docs/gatsby-config.js index 82fb6a428e8..57bd142cafe 100644 --- a/packages/patternfly-4/react-docs/gatsby-config.js +++ b/packages/patternfly-4/react-docs/gatsby-config.js @@ -1,46 +1,22 @@ -const { resolve } = require('path'); - module.exports = { siteMetadata: { - title: 'PatternFly React' + title: `Patternfly React Docs`, + description: `Documentation for https://github.com/patternfly/patternfly-react`, + keywords: `Red Hat`, }, + pathPrefix: `/patternfly-4`, plugins: [ - 'gatsby-plugin-typescript', - 'gatsby-plugin-react-helmet', - 'gatsby-transformer-json', - { + `gatsby-plugin-react-helmet`, + { // react-core source files to pipe through react-docgen + // react-core .md files to pipe through remark resolve: `gatsby-source-filesystem`, options: { - name: `components`, - path: resolve(__dirname, '../react-core/src'), - ignore: [`**/*.d.ts`, `**/*.tsx`, `**/helpers`] - } + name: `react-core`, + path: `${__dirname}/../react-core/src/components`, + ignore: [`**/*.d.ts`, `**/*.test.*`, `**/index.*`] + }, }, - { - resolve: `gatsby-source-filesystem`, - options: { - name: `components`, - path: resolve(__dirname, '../react-charts/src'), - ignore: [`**/*.d.ts`] - } - }, - { - resolve: `gatsby-source-filesystem`, - options: { - name: `components`, - path: resolve(__dirname, '../react-table/src'), - ignore: [`**/*.d.ts`] - } - }, - { - resolve: `gatsby-source-filesystem`, - options: { - name: `components`, - path: resolve(__dirname, '../react-styled-system/src'), - ignore: [`**/*.d.ts`] - } - }, - 'gatsby-transformer-react-docgen' + `gatsby-transformer-react-docgen-typescript`, + `gatsby-transformer-remark` ], - pathPrefix: 'patternfly-4' -}; +} diff --git a/packages/patternfly-4/react-docs/gatsby-node.js b/packages/patternfly-4/react-docs/gatsby-node.js index 4afce646396..e5e7b395aec 100644 --- a/packages/patternfly-4/react-docs/gatsby-node.js +++ b/packages/patternfly-4/react-docs/gatsby-node.js @@ -1,200 +1,52 @@ -const path = require(`path`); -const fs = require('fs-extra'); //eslint-disable-line -const packageDirs = ['react-core', 'react-charts', 'react-styled-system', 'react-table']; +/** + * Implement Gatsby's Node APIs in this file. + * + * See: https://www.gatsbyjs.org/docs/node-apis/ + */ -// Escape single quotes and backslashes in a file path -const escapeFilePath = filePath => filePath.replace(/[\\']/g, '\\$&'); +const path = require("path") -exports.onCreateWebpackConfig = ({ stage, loaders, actions, plugins, getConfig }) => { - // Enable hot reloading on source code changes - const pfStylesTest = /patternfly.*(components|layouts|utilities).*\.css$/; - actions.setWebpackConfig({ - module: { - rules: [ - { - test: pfStylesTest, - use: [{ loader: 'babel-loader' }, { loader: require.resolve('@patternfly/react-styles/loader') }] - }, - { - test: /\.css$/, - use: [loaders.miniCssExtract(), loaders.css({ sourceMap: false, singleton: true })], - exclude: pfStylesTest - } - ] - }, - resolve: { - alias: { - '@patternfly/react-table': path.resolve(__dirname, '../react-table/src'), - '@patternfly/react-charts': path.resolve(__dirname, '../react-charts/src'), - '@patternfly/react-core': path.resolve(__dirname, '../react-core/src'), - '@patternfly/react-styles': path.resolve(__dirname, '../react-styles/src'), - '@patternfly/react-styled-system': path.resolve(__dirname, '../react-styled-system/src') - } - } - }); - const configAfter = getConfig(); - configAfter.module.rules = configAfter.module.rules.filter(rule => rule.oneOf === undefined); - const minimizer = [ - plugins.minifyJs({ - terserOptions: { - // keep function names so that we can find the corresponding example components in src/components/componentDocs/componentDocs.js - keep_fnames: true - } - }), - plugins.minifyCss() - ]; - if (!configAfter.optimization) { - configAfter.optimization = {}; - } - configAfter.optimization.minimizer = minimizer; - - actions.replaceWebpackConfig(configAfter); -}; +exports.createPages = ({ actions, graphql }) => { + const { createPage } = actions -exports.onCreateNode = ({ node, actions }) => { - const { createNodeField } = actions; - const componentPathRegEx = /(components|layouts|demos)\//; - if (node.internal.type === 'SitePage' && componentPathRegEx.test(node.path)) { - const pathLabel = node.component - .split('/') - .pop() - .split('.') - .shift(); + const blogPostTemplate = path.resolve(`./src/templates/markdownTemplate.js`) - createNodeField({ - node, - name: 'label', - value: pathLabel - }); - } -}; - -exports.createPages = async ({ graphql, actions }) => { - const { createPage } = actions; - const { - data: { docs, examples, exampleImages } - } = await graphql(` - fragment DocFile on File { - relativePath - relativeDirectory - absolutePath - base - name - } - - query AllDocsFiles { - docs: allFile(filter: { sourceInstanceName: { eq: "components" }, absolutePath: { glob: "**/*.docs.js" } }) { + return graphql(` + { + allMarkdownRemark { edges { node { - ...DocFile - } - } - } - examples: allFile( - filter: { - sourceInstanceName: { eq: "components" } - relativePath: { glob: "**/examples/!(*.styles).+(js|tsx)" } - } - ) { - edges { - node { - ...DocFile - } - } - } - exampleImages: allFile( - filter: { sourceInstanceName: { eq: "components" }, extension: { regex: "/(png|svg|jpg)/" } } - ) { - edges { - node { - ...DocFile + fileAbsolutePath + htmlAst + frontmatter { + title + cssPrefix + } } } } } - `); - const docExports = []; - const docsComponentPath = path.resolve(__dirname, './src/components/componentDocs'); - docs.edges.forEach(({ node: doc }) => { - const filePath = path.resolve(__dirname, '.tmp', doc.base); - - const rawExamples = []; - const packageDir = packageDirs.find(pkg => doc.absolutePath.indexOf(pkg) !== -1); - - // In Windows environments, paths use backslashes to separate directories; - // Ensure that forward slashes are used to make it comparable - const docIdentifier = doc.relativeDirectory.replace(/\\/g, '/'); - - examples.edges.forEach(({ node: example }) => { - // Replace backslashes with forward slashes as for `docIdentifier` above, - // and remove `/example` postfix - const exampleIdentifier = example.relativeDirectory - .split(/[/\\]/) - .slice(0, 2) - .join('/'); - - if (exampleIdentifier === docIdentifier) { - const examplePath = `../../${packageDir}/src/${example.relativePath}`; - rawExamples.push( - `{name: '${example.name}', path: '${examplePath}', file: require('!!raw-loader!${examplePath}')}` - ); - - // also create another example for the full version of it - const pathArr = examplePath.split('/'); - const exampleName = pathArr[pathArr.length - 1]; - const exampleFilePath = path.resolve(__dirname, '.tmp', 'examples', exampleName); - const fullExample = ` - import React from 'react'; - import Example from '${example.absolutePath}'; - import ExampleLayout from '../../src/components/layouts/fullPage'; - - export default () => ; - `; - fs.outputFileSync(exampleFilePath, fullExample); - const newPath = `${path.dirname(example.relativePath.toLowerCase())}/${exampleName - .slice(0, -3) - .replace(/([a-z])([A-Z])/g, '$1-$2') - .toLowerCase()}`; - createPage({ - path: newPath, - component: exampleFilePath - }); - } - }); - const allImages = []; - exampleImages.edges.forEach(({ node: image }) => { - const imagePath = `../../react-core/src/${image.relativePath}`; - allImages.push(`{name: '${image.base}', file: require('${imagePath}')}`); - }); - - const content = ` - import React from 'react'; - import docs from '${doc.absolutePath}'; - import ComponentDocs from '${escapeFilePath(docsComponentPath)}'; - - const rawExamples = [${rawExamples}]; - const images = [${allImages}]; - - export const ${doc.base.split('.')[0].toLowerCase()}_docs = docs; - export const ${doc.base.split('.')[0].toLowerCase()}_package = '${packageDir}'; - - export default ({location}) => ; - `; - - docExports.push( - `export { ${doc.base.split('.')[0].toLowerCase()}_docs, ${doc.base - .split('.')[0] - .toLowerCase()}_package } from './${doc.base}';` - ); - - fs.outputFileSync(filePath, content); - // console.log(`page: /${path.dirname(doc.relativePath).toLowerCase()}, component: ${filePath}`); - createPage({ - path: `/${path.dirname(doc.relativePath).toLowerCase()}`, - component: filePath - }); - }); + `).then(result => { + if (result.errors) { + return Promise.reject(result.errors) + } - const indexFilePath = path.resolve(__dirname, '.tmp', 'index.js'); - fs.writeFileSync(indexFilePath, docExports.join('\n')); -}; + result.data.allMarkdownRemark.edges.forEach(({ node }) => { + const extension = path.extname(node.fileAbsolutePath); + const componentName = path.basename(node.fileAbsolutePath, extension).toLowerCase().trim(); + const split = node.fileAbsolutePath.split('/'); + const folderName = split[split.length - 2]; // i.e. 'Alert' in '/ff/ff/Alert/AlertSomething.js' + + const pagePath = '/components/' + componentName + console.log('adding page', pagePath); + createPage({ + path: pagePath, + component: blogPostTemplate, + context: { + fileAbsolutePath: node.fileAbsolutePath, // Helps us get the markdown + pathRegex: `/${folderName}\/.*/` // Helps us get the docgenned props + } + }) + }) + }) +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/package.json b/packages/patternfly-4/react-docs/package.json index 0bd05f6391b..1f3d32dd12d 100644 --- a/packages/patternfly-4/react-docs/package.json +++ b/packages/patternfly-4/react-docs/package.json @@ -1,55 +1,34 @@ { "name": "@patternfly/react-docs", "description": "PatternFly React Docs", - "version": "3.23.4", + "version": "0.0.1", "author": "Red Hat", "license": "MIT", - "publishConfig": { - "access": "public" + "private": true, + "scripts": { + "clean": "rimraf .cache .tmp dist public static", + "develop": "gatsby develop", + "build": "gatsby build --prefix-paths" }, "dependencies": { - "@patternfly/react-charts": "^2.2.1", - "@patternfly/react-core": "^2.8.2", - "@patternfly/react-icons": "^3.5.0", - "@patternfly/react-styled-system": "^2.0.16", - "@patternfly/react-styles": "^2.4.0", - "@patternfly/react-table": "^1.2.13", - "@patternfly/react-tokens": "^2.2.0", - "babel-standalone": "^6.26.0", - "clipboard-copy": "^2.0.1", - "css-loader": "^2.1.1", - "emotion": "^9.2.9", - "exenv": "^1.2.2", - "gatsby": "^2.1.29", - "gatsby-plugin-react-helmet": "^3.0.8", - "gatsby-plugin-typescript": "2.0.3", - "gatsby-source-filesystem": "^2.0.23", - "gatsby-transformer-json": "^2.1.8", - "gatsby-transformer-react-docgen": "3.0.2", - "param-case": "^2.1.1", - "react-helmet": "^5.2.0", - "react-icons": "^3.5.0", - "react-live": "^1.12.0", - "typescript": "3.2.2" + "gatsby": "^2.1.37", + "gatsby-image": "^2.0.34", + "gatsby-plugin-react-helmet": "^3.0.10", + "gatsby-source-filesystem": "^2.0.27", + "gatsby-transformer-remark": "^2.3.7", + "prop-types": "^15.7.2", + "react": "^16.8.4", + "react-dom": "^16.8.4", + "react-helmet": "^5.2.0" }, "devDependencies": { - "fs-extra": "^7.0.1", - "glob": "^7.1.3", - "rimraf": "^2.6.2", - "typedoc": "^0.14.2" + "rimraf": "^2.6.3" }, "keywords": [ "gatsby" ], - "scripts": { - "clean": "rimraf .cache .tmp dist public static ts-docs", - "develop": "yarn gen-ts-docs && gatsby develop", - "build:docs": "node build/copyDocs.js && yarn gen-ts-docs && yarn build:gatsby", - "build:gatsby": "env NODE_OPTIONS=--max_old_space_size=4096 gatsby build --verbose --prefix-paths", - "gen-ts-docs": "typedoc --mode file --json build/ts-output.json --tsconfig ../react-core/tsconfig.base.json ../react-core" - }, "browserslist": [ "last 2 versions", "not ie <= 11" ] -} +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js new file mode 100644 index 00000000000..1f083e4ca47 --- /dev/null +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js @@ -0,0 +1,93 @@ +const docgenTypescript = require('react-docgen-typescript').withDefaultConfig() +const docgenJavascript = require('react-docgen') + +function isSource(node) { + if (!node || + node.relativePath.indexOf('/example') !== -1 || + node.relativePath.indexOf('.docs') !== -1) + return false; + + return true; +} + +function canParse(node) { + return node && (isTSX(node) || isJSX(node)) && isSource(node) +} + +function isTSX(node) { + return node.internal.mediaType === `application/typescript` || + node.internal.mediaType === `text/tsx` || + node.extension === 'tsx' +} + +function isJSX(node) { + return node.internal.mediaType === `application/javascript` || + node.internal.mediaType === `text/jsx` +} + +function flattenProps(props) { + let res = []; + if (props) { + Object.entries(props).forEach( + ([key, value]) => { + value.name = key; + res.push(value); + }); + } + + return res; +} + +async function onCreateNode({ + node, + actions, + loadNodeContent, + createNodeId, + createContentDigest, +}) { + const { createNode, createParentChildLink } = actions + + if (!canParse(node)) return + + // Docs https://www.gatsbyjs.org/docs/actions/#createNode + function registerNode(node, result) { + const metadataNode = { + ...result, + path: node.relativePath, + basePath: node.relativePath.split('/')[0], + id: createNodeId(`${node.id}imunique${node.relativePath}`), + children: [], + parent: node.id, + internal: { + contentDigest: createContentDigest(node), + type: `ComponentMetadata`, + }, + } + createNode(metadataNode) + createParentChildLink({ parent: node, child: metadataNode }) + } + + const sourceText = await loadNodeContent(node); + let parsed = null; + try { + if (isTSX(node)) { + // console.log('parsing', node.absolutePath) + parsed = docgenTypescript.parse(node.absolutePath)[0]; + } + else if (isJSX(node)) { + parsed = docgenJavascript.parse(sourceText); + } + } catch (err) { + console.warn("Can't find a component in", node.absolutePath); + } + + if (parsed) { + registerNode(node, { + name: parsed.displayName, + description: parsed.description, + props: flattenProps(parsed.props) + }); + } +} + +exports.onCreateNode = onCreateNode diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/package.json b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/package.json new file mode 100644 index 00000000000..04dd4e14ec4 --- /dev/null +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/package.json @@ -0,0 +1,24 @@ +{ + "name": "gatsby-transformer-react-docgen-typescript", + "description": "Transformer JSX/TSX source files into JSON metadata", + "version": "0.0.1", + "author": "Red Hat", + "license": "MIT", + "private": true, + "scripts": { + "clean": "rimraf .cache .tmp dist public static", + "develop": "gatsby develop", + "build": "gatsby build --prefix-paths" + }, + "dependencies": { + "gatsby": "^2.1.37", + "react-docgen": "^4.1.0", + "react-docgen-typescript": "^1.12.3" + }, + "keywords": [ + "gatsby", + "gatsby-plugin", + "gatsby-transformer-plugin", + "react" + ] +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test.js b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test.js new file mode 100644 index 00000000000..290e54cdf21 --- /dev/null +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test.js @@ -0,0 +1,5 @@ +const docgenTypescript = require('react-docgen-typescript').withDefaultConfig() + +const res = docgenTypescript.parse('/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Avatar/Avatar.tsx'); + +console.log(res) \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test1.json b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test1.json new file mode 100644 index 00000000000..b8312e5c0e3 --- /dev/null +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test1.json @@ -0,0 +1,216 @@ +{ isOpen: { defaultValue: { value: 'false' + }, + description: 'True to show the wizard', + name: 'isOpen', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'boolean' + } + }, + title: { defaultValue: null, + description: 'The wizard title', + name: 'title', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: true, + type: { name: 'string' + } + }, + description: { defaultValue: { value: '' + }, + description: 'The wizard description', + name: 'description', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string' + } + }, + backgroundImgSrc: { defaultValue: null, + description: 'Mapping of image sizes to image paths', + name: 'backgroundImgSrc', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string | BackgroundImageSrcMap' + } + }, + onClose: { defaultValue: null, + description: 'Calback function to close the wizard', + name: 'onClose', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: '() => void' + } + }, + onSave: { defaultValue: null, + description: 'Callback function to save at the end of the wizard, if not specified uses onClose', + name: 'onSave', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: '() => void' + } + }, + onNext: { defaultValue: { value: 'null' + }, + description: 'Callback function after Next button is clicked', + name: 'onNext', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'WizardStepFunctionType' + } + }, + onBack: { defaultValue: { value: 'null' + }, + description: 'Callback function after Back button is clicked', + name: 'onBack', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'WizardStepFunctionType' + } + }, + onGoToStep: { defaultValue: { value: 'null' + }, + description: 'Calback function when a step in the nav is clicked', + name: 'onGoToStep', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'WizardStepFunctionType' + } + }, + className: { defaultValue: { value: '' + }, + description: 'Additional classes spread to the Wizard', + name: 'className', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string' + } + }, + steps: { defaultValue: null, + description: 'The wizard steps configuration object', + name: 'steps', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: true, + type: { name: 'WizardStep[]' + } + }, + startAtStep: { defaultValue: { value: '1' + }, + description: 'The step to start the wizard at (1 or higher)', + name: 'startAtStep', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'number' + } + }, + nextButtonText: { defaultValue: { value: 'Next' + }, + description: 'The Next button text', + name: 'nextButtonText', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string' + } + }, + backButtonText: { defaultValue: { value: 'Back' + }, + description: 'The Back button text', + name: 'backButtonText', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string' + } + }, + cancelButtonText: { defaultValue: { value: 'Cancel' + }, + description: 'The Cancel button text', + name: 'cancelButtonText', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string' + } + }, + lastStepButtonText: { defaultValue: { value: 'Save' + }, + description: 'The text for the Next button on the last step', + name: 'lastStepButtonText', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string' + } + }, + footerRightAlign: { defaultValue: { value: 'false' + }, + description: 'Alignment of the footer items', + name: 'footerRightAlign', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'boolean' + } + }, + ariaLabelCloseButton: { defaultValue: { value: 'Close' + }, + description: 'aria-label for the close button', + name: 'ariaLabelCloseButton', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string' + } + }, + ariaLabelNav: { defaultValue: { value: 'Steps' + }, + description: 'aria-label for the Nav', + name: 'ariaLabelNav', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'string' + } + }, + hasBodyPadding: { defaultValue: { value: 'true' + }, + description: 'Can remove the default padding around the main body content by setting this to false', + name: 'hasBodyPadding', + parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', + name: 'WizardProps' + }, + required: false, + type: { name: 'boolean' + } + } +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/assets/gatsby-astronaut.png b/packages/patternfly-4/react-docs/src/assets/gatsby-astronaut.png new file mode 100644 index 0000000000000000000000000000000000000000..da58ece0a8c5b4f0e4d25fa443e65278349b4f3a GIT binary patch literal 167273 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

RzA~%3+!rm2%Do1R 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 NNQ%mdR0!#R{eKbVnbrUR literal 0 HcmV?d00001 diff --git a/packages/patternfly-4/react-docs/src/assets/gatsby-icon.png b/packages/patternfly-4/react-docs/src/assets/gatsby-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..908bc78a7f5596fab5a638d6ac07e331dc4c74d4 GIT binary patch literal 21212 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 Pwx}U%bK8?;ra1Edyv(7f literal 0 HcmV?d00001 diff --git a/packages/patternfly-4/react-docs/src/assets/logo.png b/packages/patternfly-4/react-docs/src/assets/logo.png deleted file mode 100644 index 33259082f4d323a99f08ddb8cf82ec8e5c345bbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14711 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 G@c#e}`GEca diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/componentDocs.js b/packages/patternfly-4/react-docs/src/components/componentDocs/componentDocs.js deleted file mode 100644 index b3e942c9315..00000000000 --- a/packages/patternfly-4/react-docs/src/components/componentDocs/componentDocs.js +++ /dev/null @@ -1,170 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { StaticQuery, graphql } from 'gatsby'; -import styles from './componentDocs.styles'; -import { css } from '@patternfly/react-styles'; -import Example from '../example'; -import Content from '../content'; -import { Title } from '@patternfly/react-core'; -import PropsTable from '../propsTable'; -import PropsTableTs from '../propsTableTs'; -import Section from '../section'; -import DocsLayout from '../layouts'; -import Tokens from '../css-variables'; -import { accumulateProps } from './propsHelper'; - -const propTypes = { - data: PropTypes.any.isRequired, - title: PropTypes.string.isRequired, - description: PropTypes.string, - examples: PropTypes.arrayOf( - PropTypes.shape({ - component: PropTypes.func, - title: PropTypes.string, - description: PropTypes.string, - getContainerProps: PropTypes.func, - displayName: PropTypes.string, - live: PropTypes.bool, - liveScope: PropTypes.object - }) - ), - components: PropTypes.objectOf(PropTypes.func), - enumValues: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.any)), - types: PropTypes.object, - rawExamples: PropTypes.array, - images: PropTypes.array, - fullPageOnly: PropTypes.bool, - variablesRoot: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]), - location: PropTypes.any -}; - -const defaultProps = { - description: '', - examples: [], - components: {}, - enumValues: {}, - types: {}, - rawExamples: [], - images: [], - fullPageOnly: false, - variablesRoot: null, - location: null -}; - -class ComponentDocs extends React.PureComponent { - render() { - const { - data, - title, - description, - examples, - components, - enumValues, - fullPageOnly, - rawExamples, - images, - variablesRoot, - location - } = this.props; - const makeDescription = html => ({ __html: html }); - const getDocGenInfo = name => data.allComponentMetadata.edges.find(edge => edge.node.displayName === name); - - return ( - - - {title} - {Boolean(description) && ( -

- )} -

- {examples.map((exampleObj, i) => { - const ComponentExample = exampleObj.component; - const rawExample = rawExamples.find(example => example.name === ComponentExample.name); - return ( - - - - ); - })} -
- {Object.entries(components).map(component => { - const componentName = component[0]; - const componentDocsJs = getDocGenInfo(componentName); - const componentDocsTs = accumulateProps(componentName); - if (componentDocsTs) { - return ; - } else if (componentDocsJs) { - return ( - - ); - } - return null; - })} - {variablesRoot && ( -
- -
- )} - - - ); - } -} - -ComponentDocs.propTypes = propTypes; -ComponentDocs.defaultProps = defaultProps; - -export default props => ( - } - /> -); diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/componentDocs.styles.js b/packages/patternfly-4/react-docs/src/components/componentDocs/componentDocs.styles.js deleted file mode 100644 index 8459aece603..00000000000 --- a/packages/patternfly-4/react-docs/src/components/componentDocs/componentDocs.styles.js +++ /dev/null @@ -1,8 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { global_spacer_xl as spacerXl } from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - description: { - marginBottom: spacerXl.var - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/index.js b/packages/patternfly-4/react-docs/src/components/componentDocs/index.js deleted file mode 100644 index 07ca4916f26..00000000000 --- a/packages/patternfly-4/react-docs/src/components/componentDocs/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './componentDocs'; diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/propsHelper.js b/packages/patternfly-4/react-docs/src/components/componentDocs/propsHelper.js deleted file mode 100644 index 8f84d7efa57..00000000000 --- a/packages/patternfly-4/react-docs/src/components/componentDocs/propsHelper.js +++ /dev/null @@ -1,143 +0,0 @@ -const typedoc = require('../../../build/ts-output.json') - -function getObjectNamed(iterable, name) { - for (let i = 0; i < iterable.length; i++) { - if (iterable[i].name.toLowerCase() === name.toLowerCase()) - return iterable[i]; - } -} - -function getDefaultClassProps(name) { - let result = []; - const component = getObjectNamed(typedoc.children, name); - const defaultProps = getObjectNamed(component.children, 'defaultProps'); - defaultProps.children.forEach(prop => { - if (prop.kindString === 'Variable') { - result.push({ - name: prop.name, - default: prop.defaultValue, - }); - } - else if (prop.kindString === 'Function') { - result.push({ - name: prop.name, - default: prop.signatures[0].type.name, - }); - } - }); - - return result; -} - -function getDefaultFunctionProps(component) { - let result = []; - const params = component.signatures[0].parameters[0].type.declaration.children; - - params.forEach(param => { - if (param.defaultValue) { - result.push({ - name: param.name, - default: param.defaultValue, - type: param.type - }) - } - }); - - return result; -} - -// Takes typedoc json, returns something like (event?: React.MouseEvent): void -function getType(method) { - let type = '('; - if (method.parameters) { - method.parameters.forEach(param => { - type += param.name; - if (param.flags.isOptional) - type += '?'; - type += ': ' + param.type.name - type += ', '; - }); - type = type.slice(0, type.length - 2); - } - type += '): ' + method.type.name; - - - return type; -} - -function getProps(name) { - let result = {}; - // Assume component 'Button' exports interface named 'ButtonProps' - const iface = getObjectNamed(typedoc.children, name + 'Props'); - for (let i = 0; i < iface.children.length; i++) { - const prop = iface.children[i]; - // Skip extended props - if (prop.inheritedFrom) continue; - if (prop.kindString === 'Property') { - let isRequired = true; - let propType = prop.type.name; - if (prop.type.type === 'union') { // Multiple types... - // TODO: use what typedoc uses: https://github.com/TypeStrong/typedoc/blob/master/src/lib/converter/factories/type-parameter.ts - const typeNames = prop.type.types.map(t => t.name); - const undefinedLoc = typeNames.indexOf('undefined'); - if (undefinedLoc !== -1) { - isRequired = false; - typeNames.splice(undefinedLoc, 1); - } - if (typeNames.indexOf('false') !== -1 && - typeNames.indexOf('true') !== -1) { - propType = 'boolean'; - } else { - propType = typeNames[0]; - } - } - - result[prop.name] = { - name: prop.name, - required: isRequired, - type: propType, - comment: prop.comment ? prop.comment.shortText : '', - }; - } - else if (prop.kindString === 'Method') { - const method = prop.signatures[0]; - const type = getType(method); - result[prop.name] = { - name: prop.name, - required: prop.flags.isOptional, - type: type, - comment: method.comment ? method.comment.shortText : '', - }; - } - } - return result; -} - -// Fuzzy find prop.name in props.keys and set it's value -function setDefaultProp(props, prop) { - // Remove dashes and make lowercase - const simplifyName = (name) => name.replace('-', '').toLowerCase(); - Object.keys(props).forEach(k => { - if (simplifyName(k) === simplifyName(prop.name)) { - props[k].default = prop.default; - props[k].required = false; - return; - } - }); -} - -export function accumulateProps(componentName) { - const component = getObjectNamed(typedoc.children, componentName); - if (!component) - return null; - - let props = getProps(componentName); - if (component.kindString === 'Class') { - getDefaultClassProps(componentName).forEach(p => setDefaultProp(props, p)); - } else if (component.kindString === 'Function') { - getDefaultFunctionProps(component).forEach(p => setDefaultProp(props, p)); - } - - return Object.values(props); -} - diff --git a/packages/patternfly-4/react-docs/src/components/content/content.js b/packages/patternfly-4/react-docs/src/components/content/content.js deleted file mode 100644 index b902da8739f..00000000000 --- a/packages/patternfly-4/react-docs/src/components/content/content.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { css } from '@patternfly/react-styles'; -import PropTypes from 'prop-types'; -import styles from './content.styles'; - -const propTypes = { - children: PropTypes.node.isRequired -}; - -const Content = ({ children }) =>
{children}
; - -Content.propTypes = propTypes; - -export default Content; diff --git a/packages/patternfly-4/react-docs/src/components/content/content.styles.js b/packages/patternfly-4/react-docs/src/components/content/content.styles.js deleted file mode 100644 index dcb22a237f8..00000000000 --- a/packages/patternfly-4/react-docs/src/components/content/content.styles.js +++ /dev/null @@ -1,8 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { global_spacer_3xl as spacer3xl } from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - content: { - padding: spacer3xl.var - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/content/index.js b/packages/patternfly-4/react-docs/src/components/content/index.js deleted file mode 100644 index 3089d8057d7..00000000000 --- a/packages/patternfly-4/react-docs/src/components/content/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './content'; diff --git a/packages/patternfly-4/react-docs/src/components/css-variables.js b/packages/patternfly-4/react-docs/src/components/css-variables.js deleted file mode 100644 index 6087a3c02c7..00000000000 --- a/packages/patternfly-4/react-docs/src/components/css-variables.js +++ /dev/null @@ -1,183 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { Form, TextInput } from '@patternfly/react-core'; -import { Table, TableHeader, TableBody, sortable, SortByDirection } from '@patternfly/react-table'; -import * as tokensModule from '@patternfly/react-tokens'; -import { StyleSheet, css } from '@patternfly/react-styles'; - -const propTypes = { - variables: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]) -}; - -const defaultProps = { - variables: null -}; - -const styles = StyleSheet.create({ - color: { - display: 'inline-block', - height: 18, - width: 18, - border: `${tokensModule.global_BorderWidth_sm.var} solid ${tokensModule.global_BorderColor.var}`, - marginRight: tokensModule.global_spacer_sm.var, - verticalAlign: 'middle' - }, - value: { - verticalAlign: 'middle' - }, - tokenCell: { - whiteSpace: 'nowrap' - }, - search: ` - &.pf-c-form { - margin: ${tokensModule.global_spacer_md.var} 0; - } - .pf-c-form__label { - --pf-c-form__label--FontSize: ${tokensModule.global_FontSize_lg.var}; - } - ` -}); -const isColorRegex = /^(#|rgb)/; - -class Tokens extends React.Component { - constructor(props) { - super(props); - const dataRows = []; - Object.entries(tokensModule).map(([key, token]) => { - if (!token.name || !token.value) { - return null; - } - if (props.variables) { - let variablesArray; - if (typeof props.variables === 'string') { - variablesArray = [props.variables]; - } else { - variablesArray = props.variables; - } - let tokenMatch = false; - for (let i = 0; i < variablesArray.length; i++) { - const regex = new RegExp(`^--${variablesArray[i]}(--|__)`, 'g'); - const match = regex.test(token.name); - if (match) { - tokenMatch = true; - break; - } - } - if (!tokenMatch) { - return null; - } - } - dataRows.push([key, token.name, token.value]); - }, []); - const dataRowsSorted = dataRows.sort((a, b) => { - if (a[0] < b[0]) { - return -1; - } else if (a[0] > b[0]) { - return 1; - } - return 0; - }); - const columns = []; - this.state = { - searchValue: '', - columns: columns.concat([ - { title: 'Variables', transforms: [sortable] }, - { title: 'React Tokens', transforms: [sortable] }, - { title: 'Value', transforms: [sortable] } - ]), - dataRows: dataRowsSorted, - rows: this.processToComponents(dataRowsSorted), - sortBy: { - index: 0, - direction: 'asc' // a-z - } - }; - this.onSort = this.onSort.bind(this); - } - - processToComponents = dataRows => { - const rows = []; - dataRows.map(dataRow => { - const toPush = []; - rows.push( - toPush.concat([ - {dataRow[1]}, - {dataRow[0]}, - - {isColorRegex.test(dataRow[2]) && ( - - )} - {dataRow[2]} - - ]) - ); - }, []); - return rows; - }; - - onSort(_event, index, direction) { - const sortedRows = this.state.dataRows.sort((a, b) => (a[index] < b[index] ? -1 : a[index] > b[index] ? 1 : 0)); - this.setState({ - sortBy: { - index, - direction - }, - rows: - direction === SortByDirection.asc - ? this.processToComponents(sortedRows) - : this.processToComponents(sortedRows.reverse()) - }); - } - - handleSearchChange = (checked, event) => { - const searchValue = event.target.value; - this.setState(() => ({ - searchValue - })); - }; - - render() { - const { searchValue, columns, dataRows, sortBy } = this.state; - const searchRE = new RegExp(searchValue, 'i'); - const filteredTokens = dataRows.filter(c => searchRE.test(c[0]) || searchRE.test(c[1]) || searchRE.test(c[2])); - const filteredRows = this.processToComponents(filteredTokens); - - return ( - <> -
{ - event.preventDefault(); - return false; - }} - > - - - - - -
- - ); - } -} - -Tokens.propTypes = propTypes; -Tokens.defaultProps = defaultProps; - -export default Tokens; diff --git a/packages/patternfly-4/react-docs/src/components/example/example.js b/packages/patternfly-4/react-docs/src/components/example/example.js deleted file mode 100644 index f5bf17ffa50..00000000000 --- a/packages/patternfly-4/react-docs/src/components/example/example.js +++ /dev/null @@ -1,121 +0,0 @@ -import React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from './example.styles'; -import PropTypes from 'prop-types'; -import { Title } from '@patternfly/react-core'; -import LiveDemo from './liveDemo'; -import { withPrefix } from 'gatsby'; -import Section from '../section'; - -const propTypes = { - children: PropTypes.node.isRequired, - title: PropTypes.string, - description: PropTypes.string, - className: PropTypes.string, - fullPageOnly: PropTypes.bool, - name: PropTypes.string, - raw: PropTypes.string, - path: PropTypes.string, - images: PropTypes.array, - live: PropTypes.bool, - liveScope: PropTypes.object -}; - -const defaultProps = { - className: '', - description: '', - fullPageOnly: false, - title: '', - name: '', - raw: '', - path: '', - images: [], - live: true, - liveScope: {} -}; - -const GATSBY_LIVE_EXAMPLES = process.env.GATSBY_LIVE_EXAMPLES === 'true'; - -const Example = ({ - children, - title, - className, - description, - name, - fullPageOnly, - raw, - path: examplePath, - images, - live, - liveScope, - ...props -}) => { - const makeDescription = html => ({ __html: html }); - - // Display full page link - if (fullPageOnly) { - const pathName = typeof window !== 'undefined' ? window.location.pathname : ''; - const exampleName = name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); - const separator = pathName.endsWith('/') ? '' : '/'; - // Grab the last 2 path pieces, e.g. components/backgroundimage, layouts/gallery, demos/pagelayout - const pathStart = `${pathName}${separator}` - .split('/') - .slice(-3) - .slice(0, 2) - .join('/'); - const path = `/${pathStart}/examples/${exampleName}`; - return ( -
- ); - } - - return ( -
- {title} - {Boolean(description) && ( -

- )} - {GATSBY_LIVE_EXAMPLES ? ( - - {!live && ( -

- {children} -
- )} - - - ) : ( - -
- {children} -
- -
- )} -
- ); -}; - -Example.propTypes = propTypes; -Example.defaultProps = defaultProps; - -export default Example; diff --git a/packages/patternfly-4/react-docs/src/components/example/example.styles.js b/packages/patternfly-4/react-docs/src/components/example/example.styles.js deleted file mode 100644 index 74cf5110cdb..00000000000 --- a/packages/patternfly-4/react-docs/src/components/example/example.styles.js +++ /dev/null @@ -1,13 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_spacer_md as spacerMd, - global_BorderWidth_sm as borderWidth, - global_BorderColor_dark as borderColor -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - example: { - padding: spacerMd.var, - border: `${borderWidth.var} solid ${borderColor.var}` - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/example/index.js b/packages/patternfly-4/react-docs/src/components/example/index.js deleted file mode 100644 index f46b8383576..00000000000 --- a/packages/patternfly-4/react-docs/src/components/example/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './example'; diff --git a/packages/patternfly-4/react-docs/src/components/example/liveDemo.js b/packages/patternfly-4/react-docs/src/components/example/liveDemo.js deleted file mode 100644 index 28391a0f212..00000000000 --- a/packages/patternfly-4/react-docs/src/components/example/liveDemo.js +++ /dev/null @@ -1,184 +0,0 @@ -import React from 'react'; -import { css } from '@patternfly/react-styles'; -import exampleStyles from './example.styles'; -import styles from './liveDemo.styles'; -import PropTypes from 'prop-types'; -import * as TableComponents from '@patternfly/react-table'; -import * as ChartComponents from '@patternfly/react-charts'; -import * as CoreComponents from '@patternfly/react-core'; -import * as CoreIcons from '@patternfly/react-icons'; -import * as StyledSystemComponents from '@patternfly/react-styled-system'; -import { LiveProvider, LiveEditor, LiveError, LivePreview, withLive } from 'react-live'; -import { transform } from 'babel-standalone'; -import Section from '../section'; -import copy from 'clipboard-copy'; -import classNames from 'classnames'; - -const propTypes = { - className: PropTypes.string, - raw: PropTypes.string.isRequired, - path: PropTypes.string, - images: PropTypes.array, - live: PropTypes.bool, - liveScope: PropTypes.object -}; - -const defaultProps = { - className: '', - path: '', - images: [], - live: true, - liveScope: {} -}; - -const scopePlayground = { - React, - ...ChartComponents, - ...TableComponents, - ...StyledSystemComponents, - ...CoreComponents, - ...CoreIcons, - css -}; - -const transformCode = code => { - try { - // LiveEditor doesn't work properly with these so need to remove - code = code.replace(/^import(.|\s)*?;$/gm, ''); - code = code.replace(/^\s*export default class/gm, 'class'); - code = code.replace(/^\s*\/\/.*$/gm, ''); - code = code.replace(/extends Component/gm, 'extends React.Component'); - code = code.replace(/^\s*export.*$/gm, ''); - code = code.replace(/^\s*static(.|\s)*?;$/gm, ''); - let transformedCode = transform(code, { - presets: ['react', 'stage-2'] - }).code; - transformedCode = transformedCode.replace(/"use strict";/gm, ''); - return transformedCode; - } catch (e) { - console.log(e); - // todo: handle error - return code; - } -}; - -class LiveDemo extends React.Component { - state = { - codeOpen: false, - showCopyMessage: false, - isDarkTheme: false - }; - - handleToggleDarkTheme = () => { - this.setState({ - isDarkTheme: !this.state.isDarkTheme - }); - }; - - handleClickCodeOpen = () => { - this.setState({ - codeOpen: !this.state.codeOpen - }); - }; - - handleClickCopy = () => { - copy(this.props.raw); - this.setState({ - showCopyMessage: true - }); - setTimeout(() => { - this.setState({ - showCopyMessage: false - }); - }, 2000); - }; - - render() { - const { className, raw, images, live, liveScope, path } = this.props; - const { codeOpen, showCopyMessage, isDarkTheme } = this.state; - - const GITHUB_BASE = 'https://github.com/patternfly/patternfly-react/blob/master/packages/patternfly-4'; - const examplePath = `${GITHUB_BASE}${path.substr(5)}`; - - const scope = { - ...scopePlayground, - ...liveScope - }; - for (const image of images) { - const searchIndex = raw.search(image.name); - if (searchIndex > -1) { - const startIndex = raw.lastIndexOf('import', searchIndex); - const importName = raw.substring(startIndex, searchIndex).split(' ')[1]; - scope[importName] = image.file; - } - } - const darkThemeClasses = classNames({ - 'pf-t-dark pf-m-opaque-200': isDarkTheme - }); - - return ( -
- - {live && } -
- - - - - - - - - - - - - - - - - - Copied to clipboard - - - {codeOpen && - !live && ( - - - Live edititing disabled - - - )} -
- {codeOpen && } - {live && } -
-
- ); - } -} - -LiveDemo.propTypes = propTypes; -LiveDemo.defaultProps = defaultProps; - -export default withLive(LiveDemo); diff --git a/packages/patternfly-4/react-docs/src/components/example/liveDemo.styles.js b/packages/patternfly-4/react-docs/src/components/example/liveDemo.styles.js deleted file mode 100644 index 3c4db34a5ff..00000000000 --- a/packages/patternfly-4/react-docs/src/components/example/liveDemo.styles.js +++ /dev/null @@ -1,33 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_spacer_md as spacerMd, - global_BorderWidth_sm as borderWidth, - global_BorderColor_dark as borderColor -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - code: { - 'max-height': '37.5rem', - overflow: 'auto' - }, - toolbar: { - borderLeft: `${borderWidth.var} solid ${borderColor.var}`, - borderRight: `${borderWidth.var} solid ${borderColor.var}`, - borderBottom: `${borderWidth.var} solid ${borderColor.var}` - }, - message: { - transition: '500ms all ease', - opacity: 0, - height: 0, - 'will-change': 'opacity' - }, - messageText: { - background: 'black', - color: 'white', - padding: '3px 5px' - }, - messageShow: { - opacity: 1, - height: 'initial' - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/gridPlayground/gridPlayground.js b/packages/patternfly-4/react-docs/src/components/gridPlayground/gridPlayground.js deleted file mode 100644 index b2fb992c497..00000000000 --- a/packages/patternfly-4/react-docs/src/components/gridPlayground/gridPlayground.js +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import { Grid, GridItem, Button } from '@patternfly/react-core'; -import { css } from '@patternfly/react-styles'; -import styles from './gridPlayground.styles'; -import ItemControl from './itemControl'; - -let currentId = 1; - -function createGridItem() { - return { - id: currentId++, - span: 3, - rowSpan: 1, - offset: 0 - }; -} - -class GridPlayground extends React.Component { - state = { - gridItems: [createGridItem(), createGridItem(), createGridItem(), createGridItem()] - }; - - handleAddGridItem = () => { - this.setState(({ gridItems }) => ({ - gridItems: [...gridItems, createGridItem()] - })); - }; - - handleGridItemUpdate = (id, updates) => { - const index = this.state.gridItems.findIndex(i => i.id === id); - this.setState({ - gridItems: [ - ...this.state.gridItems.slice(0, index), - { - ...this.state.gridItems[index], - ...updates - }, - ...this.state.gridItems.slice(index + 1) - ] - }); - }; - - render() { - return ( - - - - {this.state.gridItems.map(({ id, ...itemProps }) => ( - - {id} - - ))} - - - - -
- {this.state.gridItems.map(item => ( - - ))} -
-
-
- ); - } -} - -export default GridPlayground; diff --git a/packages/patternfly-4/react-docs/src/components/gridPlayground/gridPlayground.styles.js b/packages/patternfly-4/react-docs/src/components/gridPlayground/gridPlayground.styles.js deleted file mode 100644 index 075d86fa9e9..00000000000 --- a/packages/patternfly-4/react-docs/src/components/gridPlayground/gridPlayground.styles.js +++ /dev/null @@ -1,26 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_BorderColor as borderColor, - global_BorderWidth_md as borderWidth, - global_spacer_xs as padding -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - item: { - minHeight: 75, - padding: padding.var, - border: `${borderWidth.var} dashed ${borderColor.var}` - }, - controlPanel: { - position: 'relative', - minHeight: 400 - }, - controlList: { - position: 'absolute', - top: 40, - left: 0, - right: 0, - bottom: 0, - overflowY: 'auto' - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/gridPlayground/index.js b/packages/patternfly-4/react-docs/src/components/gridPlayground/index.js deleted file mode 100644 index f36e4a861f4..00000000000 --- a/packages/patternfly-4/react-docs/src/components/gridPlayground/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './gridPlayground'; diff --git a/packages/patternfly-4/react-docs/src/components/gridPlayground/itemControl.js b/packages/patternfly-4/react-docs/src/components/gridPlayground/itemControl.js deleted file mode 100644 index ed5b6f64d0c..00000000000 --- a/packages/patternfly-4/react-docs/src/components/gridPlayground/itemControl.js +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { css } from '@patternfly/react-styles'; -import styles from './itemControl.styles'; -import SpanSlider from './spanSlider'; - -const StringOrNumber = PropTypes.oneOfType([PropTypes.string, PropTypes.number]); - -const propTypes = { - id: PropTypes.number.isRequired, - span: StringOrNumber.isRequired, - offset: StringOrNumber.isRequired, - rowSpan: StringOrNumber.isRequired, - onUpdateItem: PropTypes.func.isRequired -}; - -class ItemControl extends React.Component { - static propTypes = propTypes; - - handleSpanChange = event => { - const { id, onUpdateItem } = this.props; - onUpdateItem(id, { span: event.currentTarget.value }); - }; - - handleOffsetChange = event => { - const { id, onUpdateItem } = this.props; - onUpdateItem(id, { offset: event.currentTarget.value }); - }; - - handleRowSpanChange = event => { - const { id, onUpdateItem } = this.props; - onUpdateItem(id, { rowSpan: event.currentTarget.value }); - }; - - render() { - const { id, span, offset, rowSpan } = this.props; - - return ( -
-
{id}
- - - -
- ); - } -} - -export default ItemControl; diff --git a/packages/patternfly-4/react-docs/src/components/gridPlayground/itemControl.styles.js b/packages/patternfly-4/react-docs/src/components/gridPlayground/itemControl.styles.js deleted file mode 100644 index 90111917ac9..00000000000 --- a/packages/patternfly-4/react-docs/src/components/gridPlayground/itemControl.styles.js +++ /dev/null @@ -1,26 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_BorderColor as borderColor, - global_BorderWidth_sm as borderWidth, - global_spacer_xs as spacer, - global_FontSize_xs as fontSize -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - itemControl: { - fontSize: fontSize.var, - padding: spacer.var, - border: `${borderWidth.var} solid ${borderColor.var}`, - marginBottom: spacer.var - }, - label: { - fontSize: fontSize.var - }, - value: { - fontSize: fontSize.var, - textAlign: 'center' - }, - rangeInput: { - width: '100%' - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/gridPlayground/spanSlider.js b/packages/patternfly-4/react-docs/src/components/gridPlayground/spanSlider.js deleted file mode 100644 index be5f32a68b3..00000000000 --- a/packages/patternfly-4/react-docs/src/components/gridPlayground/spanSlider.js +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { css } from '@patternfly/react-styles'; -import styles from './spanSlider.styles'; -import { Grid, GridItem } from '@patternfly/react-core'; - -const propTypes = { - id: PropTypes.string.isRequired, - label: PropTypes.string.isRequired, - value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired, - onChange: PropTypes.func.isRequired, - min: PropTypes.number -}; - -const defaultProps = { - min: 3 -}; - -const SpanSlider = ({ label, id, onChange, min, value }) => ( - - - - - - - - - {value} - - -); - -SpanSlider.propTypes = propTypes; -SpanSlider.defaultProps = defaultProps; - -export default SpanSlider; diff --git a/packages/patternfly-4/react-docs/src/components/gridPlayground/spanSlider.styles.js b/packages/patternfly-4/react-docs/src/components/gridPlayground/spanSlider.styles.js deleted file mode 100644 index a60252e7fee..00000000000 --- a/packages/patternfly-4/react-docs/src/components/gridPlayground/spanSlider.styles.js +++ /dev/null @@ -1,23 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_FontSize_xs as fontSize, - global_LineHeight_sm as lineHeight, - global_spacer_xs as marginBottom -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - spanSlider: { - marginBottom: marginBottom.var - }, - label: { - fontSize: fontSize.var, - lineHeight: lineHeight.var - }, - value: { - fontSize: fontSize.var, - textAlign: 'center' - }, - rangeInput: { - width: '100%' - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/header.js b/packages/patternfly-4/react-docs/src/components/header.js new file mode 100644 index 00000000000..8990b7e31bb --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/header.js @@ -0,0 +1,42 @@ +import { Link } from "gatsby" +import PropTypes from "prop-types" +import React from "react" + +const Header = ({ siteTitle }) => ( +
+
+

+ + {siteTitle} + +

+
+
+) + +Header.propTypes = { + siteTitle: PropTypes.string, +} + +Header.defaultProps = { + siteTitle: ``, +} + +export default Header diff --git a/packages/patternfly-4/react-docs/src/components/layout.js b/packages/patternfly-4/react-docs/src/components/layout.js new file mode 100644 index 00000000000..c1eab7c977e --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/layout.js @@ -0,0 +1,52 @@ +/** + * Layout component that queries for data + * with Gatsby's StaticQuery component + * + * See: https://www.gatsbyjs.org/docs/static-query/ + */ + +import React from "react" +import PropTypes from "prop-types" +import { StaticQuery, graphql } from "gatsby" + +import Header from "./header" + +const Layout = ({ children }) => ( + ( + <> +
+
+
{children}
+
+ © {new Date().getFullYear()}, Built with + {` `} + Gatsby +
+
+ + )} + /> +) + +Layout.propTypes = { + children: PropTypes.node.isRequired, +} + +export default Layout diff --git a/packages/patternfly-4/react-docs/src/components/layouts/fullPage.js b/packages/patternfly-4/react-docs/src/components/layouts/fullPage.js deleted file mode 100644 index 9e0dabf615f..00000000000 --- a/packages/patternfly-4/react-docs/src/components/layouts/fullPage.js +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { canUseDOM } from 'exenv'; - -const propTypes = { - children: PropTypes.node.isRequired -}; - -const ExampleLayout = ({ children }) => canUseDOM && children; - -ExampleLayout.propTypes = propTypes; - -export default ExampleLayout; diff --git a/packages/patternfly-4/react-docs/src/components/layouts/index.js b/packages/patternfly-4/react-docs/src/components/layouts/index.js deleted file mode 100644 index 5e2f6d34d7f..00000000000 --- a/packages/patternfly-4/react-docs/src/components/layouts/index.js +++ /dev/null @@ -1,169 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import Helmet from 'react-helmet'; -import { graphql, StaticQuery } from 'gatsby'; -import * as DocsFiles from '../../../.tmp'; -import Page from '../page'; -import Navigation from '../navigation'; -import { injectGlobal } from 'emotion'; - -injectGlobal(` - html, - body { - width: 100%; - height: 100%; - } - - #___gatsby { - position: relative; - width: 100%; - height: 100%; - } -`); - -const propTypes = { - children: PropTypes.node.isRequired, - data: PropTypes.any.isRequired, - location: PropTypes.any.isRequired -}; - -class DocsLayout extends React.Component { - state = { - collapsed: true - }; - - handleCollapseExpandClick = collapsed => { - const { location } = this.props; - this.setState({ collapsed }); - if (location && location.state) { - location.state.shouldBeCollapsed = collapsed; - } - }; - - render() { - const { data, children, location } = this.props; - const { collapsed } = this.state; - const componentMapper = (path, label) => { - const { components } = DocsFiles[`${label.toLowerCase()}_docs`]; - return Object.keys(components).map(k => ({ - label: k, - to: `${path}#${k}` - })); - }; - - const getPackage = label => DocsFiles[`${label.toLowerCase()}_package`].substr(6); - - const componentRoutes = data.componentPages - ? data.componentPages.edges.map(e => ({ - to: e.node.path, - label: e.node.fields.label, - pkg: getPackage(e.node.fields.label), - components: componentMapper(e.node.path, e.node.fields.label) - })) - : []; - const layoutRoutes = data.layoutPages - ? data.layoutPages.edges.map(e => ({ - to: e.node.path, - label: e.node.fields.label, - pkg: getPackage(e.node.fields.label), - components: componentMapper(e.node.path, e.node.fields.label) - })) - : []; - const demoRoutes = data.demoPages - ? data.demoPages.edges.map(e => ({ - to: e.node.path, - label: e.node.fields.label - })) - : []; - return ( - - - - - - - - - - - - - } - > - {children} - - - ); - } -} - -DocsLayout.propTypes = propTypes; - -export default props => ( - } - /> -); diff --git a/packages/patternfly-4/react-docs/src/components/navigation/index.js b/packages/patternfly-4/react-docs/src/components/navigation/index.js deleted file mode 100644 index cfc2bfbb038..00000000000 --- a/packages/patternfly-4/react-docs/src/components/navigation/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './navigation'; diff --git a/packages/patternfly-4/react-docs/src/components/navigation/navigation.js b/packages/patternfly-4/react-docs/src/components/navigation/navigation.js deleted file mode 100644 index eec1605961d..00000000000 --- a/packages/patternfly-4/react-docs/src/components/navigation/navigation.js +++ /dev/null @@ -1,172 +0,0 @@ -import React from 'react'; -import { css } from '@patternfly/react-styles'; -import styles from './navigation.styles'; -import { Link } from 'gatsby'; -import PropTypes from 'prop-types'; -import logo from '../../assets/logo.png'; -import NavigationItemGroup from './navigationItemGroup'; -import NavigationItem from './navigationItem'; -import { Button, Form, FormGroup, TextInput } from '@patternfly/react-core'; -import { GoFold, GoUnfold } from 'react-icons/go'; - -const routeShape = PropTypes.shape({ - to: PropTypes.string.isRequired, - label: PropTypes.string.isRequired, - pkg: PropTypes.string, - components: PropTypes.array -}); - -const propTypes = { - componentRoutes: PropTypes.arrayOf(routeShape), - layoutRoutes: PropTypes.arrayOf(routeShape), - demoRoutes: PropTypes.arrayOf(routeShape), - collapsed: PropTypes.bool, - handleCollapseExpandClick: PropTypes.func, - location: PropTypes.any -}; - -const defaultProps = { - componentRoutes: [], - layoutRoutes: [], - demoRoutes: [], - collapsed: true, - handleCollapseExpandClick: null, - location: null -}; - -class Navigation extends React.Component { - static propTypes = propTypes; - static defaultProps = defaultProps; - state = { - searchValue: '' - }; - - handleSearchChange = (checked, event) => { - const searchValue = event.target.value; - this.setState(() => ({ - searchValue - })); - }; - - expand = () => { - this.props.handleCollapseExpandClick(false); - }; - - collapse = () => { - this.props.handleCollapseExpandClick(true); - }; - - render() { - const { componentRoutes, layoutRoutes, demoRoutes, collapsed, location } = this.props; - const computedCollapsed = - location && location.state && location.state.shouldBeCollapsed !== null - ? location.state.shouldBeCollapsed - : collapsed; - const { searchValue } = this.state; - const searchRE = new RegExp(searchValue, 'i'); - - const filteredComponentRoutes = componentRoutes.filter(c => { - c.filteredComponents = c.components.filter(component => searchRE.test(component.label)); - return searchRE.test(c.label) || c.filteredComponents.length > 0; - }); - - const filteredLayoutRoutes = layoutRoutes.filter(c => { - c.filteredComponents = c.components.filter(component => searchRE.test(component.label)); - return searchRE.test(c.label) || c.filteredComponents.length > 0; - }); - - const filteredDemoRoutes = demoRoutes.filter(c => searchRE.test(c.label)); - - return ( -
-
-
- - PatternFly Logo - -
-
{ - event.preventDefault(); - return false; - }} - > - - - -
-
- {computedCollapsed ? ( - - ) : ( - - )} -
- - - Global Variables - - - Icons - - - {Boolean(filteredComponentRoutes.length) && ( - - {filteredComponentRoutes.map(route => ( - - {route.label} - - ))} - - )} - {Boolean(filteredLayoutRoutes.length) && ( - - {filteredLayoutRoutes.map(route => ( - - {route.label} - - ))} - - )} - {Boolean(filteredDemoRoutes.length) && ( - - {filteredDemoRoutes.map(route => ( - - {route.label} - - ))} - - )} -
-
- ); - } -} - -export default Navigation; diff --git a/packages/patternfly-4/react-docs/src/components/navigation/navigation.styles.js b/packages/patternfly-4/react-docs/src/components/navigation/navigation.styles.js deleted file mode 100644 index c7616f12df8..00000000000 --- a/packages/patternfly-4/react-docs/src/components/navigation/navigation.styles.js +++ /dev/null @@ -1,43 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_FontSize_lg as fontSizeLg, - global_spacer_md as spacerMd, - global_BackgroundColor_100 as navBackgroundColor, - c_nav_Width as sidebarWidth -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - navigation: { - width: sidebarWidth.value - }, - navigationContent: { - position: 'fixed', - width: 'inherit', - height: '100vh', - overflowY: 'scroll', - backgroundColor: navBackgroundColor.var - }, - logo: { - textAlign: 'center', - margin: `${spacerMd.var} 0`, - padding: `0 ${spacerMd.var}` - }, - search: ` - &.pf-c-form { - margin: ${spacerMd.var} 0; - padding: 0 ${spacerMd.var}; - } - .pf-c-form__label { - --pf-c-form__label--FontSize: ${fontSizeLg.var}; - } - `, - collapseExpandButtons: ` - text-align: right; - `, - collapseExpandButton: ` - padding-right: 5px; - `, - collapseExpandIcon: ` - vertical-align: -3px; - ` -}); diff --git a/packages/patternfly-4/react-docs/src/components/navigation/navigationItem.js b/packages/patternfly-4/react-docs/src/components/navigation/navigationItem.js deleted file mode 100644 index ec4ae59d8db..00000000000 --- a/packages/patternfly-4/react-docs/src/components/navigation/navigationItem.js +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { css } from '@patternfly/react-styles'; -import styles from './navigationItem.styles'; -import { Link } from 'gatsby'; -import { Location } from '@reach/router'; - -const propTypes = { - to: PropTypes.string.isRequired, - children: PropTypes.any.isRequired, - pkg: PropTypes.string, - components: PropTypes.array, - collapsed: PropTypes.bool -}; - -const defaultProps = { - pkg: '', - components: [], - collapsed: true -}; - -const pathPrefix = 'https://github.com/patternfly/patternfly-react/tree/master/packages/'; -const getPkgPrefix = pkg => (pkg === 'icons' ? 'react-icons' : `patternfly-4/react-${pkg}`); -const navItemDescriptor = pkg => `Found in patternfly ${pkg}`; -const navItemDescriptorId = children => `${children}Descriptor`; - -const NavigationItem = ({ to, children, pkg, components, collapsed }) => ( - - {({ location }) => { - const currentPath = location.pathname; - const isActive = currentPath.toLowerCase().indexOf(children.toLowerCase()) > -1; - return ( -
  • - - {children} - - - {pkg} - - {components && - components.length > 0 && - (isActive || !collapsed) && ( -
      - {components.map(route => ( -
    • - {`${route.label} Props`} -
    • - ))} -
    - )} -
  • - ); - }} -
    -); - -NavigationItem.propTypes = propTypes; -NavigationItem.defaultProps = defaultProps; - -export default NavigationItem; diff --git a/packages/patternfly-4/react-docs/src/components/navigation/navigationItem.styles.js b/packages/patternfly-4/react-docs/src/components/navigation/navigationItem.styles.js deleted file mode 100644 index b156197b252..00000000000 --- a/packages/patternfly-4/react-docs/src/components/navigation/navigationItem.styles.js +++ /dev/null @@ -1,54 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_spacer_xs as spacerXs, - global_spacer_sm as spacerSm, - global_spacer_xl as spacerXl, - global_spacer_3xl as spacer3Xl, - global_Color_dark_100 as itemColor, - global_BackgroundColor_300 as bgColorHover, - global_BackgroundColor_200 as bgColorHover2, - global_FontSize_xs as fontSizeXs, - global_BorderRadius_lg as borderRadiusLg -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - navigationItem: { - padding: `${spacerXs.var} ${spacerXs.var} ${spacerXs.var} ${spacerXl.var}`, - display: 'block', - color: itemColor.var, - textDecoration: 'none', - ':hover,:focus': { - backgroundColor: bgColorHover.var, - textDecoration: 'none' - } - }, - collapsedNavItem: { - padding: `${spacerXs.var} 0` - }, - secondaryList: { - paddingBottom: spacerXs.var - }, - navigationItemSecondary: { - padding: `${spacerXs.var} ${spacerXs.var} ${spacerXs.var} ${spacer3Xl.var}`, - display: 'block', - color: itemColor.var, - textDecoration: 'none', - ':hover': { - backgroundColor: bgColorHover2.var, - textDecoration: 'none' - }, - fontSize: fontSizeXs.var - }, - active: { - backgroundColor: bgColorHover.var - }, - pkgLabel: ` - background-color: ${bgColorHover.var}; - float: right; - margin-top: -25px; - margin-right: 10px; - font-size: ${fontSizeXs.var}; - padding: 0 ${spacerSm.var}; - border-radius: ${borderRadiusLg.var}; - ` -}); diff --git a/packages/patternfly-4/react-docs/src/components/navigation/navigationItemGroup.js b/packages/patternfly-4/react-docs/src/components/navigation/navigationItemGroup.js deleted file mode 100644 index 18ec9976d40..00000000000 --- a/packages/patternfly-4/react-docs/src/components/navigation/navigationItemGroup.js +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { css } from '@patternfly/react-styles'; -import styles from './navigationItemGroup.styles'; - -const propTypes = { - title: PropTypes.string.isRequired, - children: PropTypes.any.isRequired -}; - -class NavigationItemGroup extends React.Component { - static currentId = 0; - static propTypes = propTypes; - - id = NavigationItemGroup.currentId++; - contentId = `nav-item-group-content-${this.id}`; - - render() { - const { title, children } = this.props; - - return ( - - ); - } -} - -export default NavigationItemGroup; diff --git a/packages/patternfly-4/react-docs/src/components/navigation/navigationItemGroup.styles.js b/packages/patternfly-4/react-docs/src/components/navigation/navigationItemGroup.styles.js deleted file mode 100644 index f3c78c3aeb2..00000000000 --- a/packages/patternfly-4/react-docs/src/components/navigation/navigationItemGroup.styles.js +++ /dev/null @@ -1,12 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { global_spacer_md as spacerMd, global_FontSize_sm as fontSizeSm } from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - title: { - fontSize: fontSizeSm.var, - padding: spacerMd.var, - display: 'flex', - alignItems: 'center', - justifyContent: 'space-between' - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/page/index.js b/packages/patternfly-4/react-docs/src/components/page/index.js deleted file mode 100644 index 70c0a557dac..00000000000 --- a/packages/patternfly-4/react-docs/src/components/page/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './page'; diff --git a/packages/patternfly-4/react-docs/src/components/page/page.js b/packages/patternfly-4/react-docs/src/components/page/page.js deleted file mode 100644 index 0913f17b564..00000000000 --- a/packages/patternfly-4/react-docs/src/components/page/page.js +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import styles from './page.styles'; -import { css } from '@patternfly/react-styles'; -import Helmet from 'react-helmet'; -import { canUseDOM } from 'exenv'; - -const propTypes = { - title: PropTypes.string, - children: PropTypes.node, - navigation: PropTypes.node -}; - -const defaultProps = { - title: 'PatternFly', - children: null, - navigation: null -}; - -const Page = ({ navigation, children, title }) => - canUseDOM && ( - - -
    - -
    {children}
    -
    -
    - ); - -Page.propTypes = propTypes; -Page.defaultProps = defaultProps; - -export default Page; diff --git a/packages/patternfly-4/react-docs/src/components/page/page.styles.js b/packages/patternfly-4/react-docs/src/components/page/page.styles.js deleted file mode 100644 index 17fcaf1004b..00000000000 --- a/packages/patternfly-4/react-docs/src/components/page/page.styles.js +++ /dev/null @@ -1,19 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; - -export default StyleSheet.create({ - page: { - display: 'flex', - minHeight: '100%', - width: '100%' - }, - nav: { - position: 'relative', - flexShrink: 0, - borderRight: 'solid 1px #cecece' - }, - main: { - position: 'relative', - flex: '1 1 auto', - overflowX: 'hidden' - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/propsTable/index.js b/packages/patternfly-4/react-docs/src/components/propsTable/index.js deleted file mode 100644 index 0378e26548f..00000000000 --- a/packages/patternfly-4/react-docs/src/components/propsTable/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './propsTable'; diff --git a/packages/patternfly-4/react-docs/src/components/propsTable/propsTable.js b/packages/patternfly-4/react-docs/src/components/propsTable/propsTable.js deleted file mode 100644 index 8f448cc7067..00000000000 --- a/packages/patternfly-4/react-docs/src/components/propsTable/propsTable.js +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import styles from './propsTable.styles'; -import { css } from '@patternfly/react-styles'; -import { Table, Row, TD, TH, Body, Heading } from '../table'; -import Section from '../section'; -import { ExclamationCircleIcon } from '@patternfly/react-icons'; - -const docGenPropValueShape = PropTypes.shape({ value: PropTypes.string }); -const docGenPropShape = PropTypes.shape({ - type: PropTypes.shape({ - name: PropTypes.string, - value: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(docGenPropValueShape)]) - }), - required: PropTypes.bool, - description: PropTypes.shape({ text: PropTypes.string }), - defaultValue: PropTypes.shape({ value: PropTypes.string }) -}); - -const propTypes = { - name: PropTypes.string.isRequired, - props: PropTypes.arrayOf(docGenPropShape), - enumValues: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.any)), - description: PropTypes.shape({ text: PropTypes.string }) -}; - -const defaultProps = { - props: [], - enumValues: {}, - description: '' -}; - -export const PropsTable = ({ name, description: preface, props, enumValues }) => ( -
    - - - - - - - - - - {props.map(prop => ( - - - - - - - - ))} - -
    NameTypeRequiredDefaultDescription{prop.name} -
    {getEnumValue(prop, enumValues)}
    -
    {prop.required && }{Boolean(prop.defaultValue) && prop.defaultValue.value}{prop.description && }
    -
    -); - -function getEnumValue(prop, enumValues) { - let returnValue = ''; - let values; - if (prop.type.name === 'union') { - values = prop.type.value.map(v => v.name); - returnValue = `${values.join(' | ')}`; - } else { - values = Array.isArray(prop.type.value) ? prop.type.value.map(v => v.value) : enumValues[prop.type.value]; - returnValue = values ? `${prop.type.name}: ${values.join(', ')}` : prop.type.name; - } - return returnValue; -} - -PropsTable.propTypes = propTypes; -PropsTable.defaultProps = defaultProps; - -export default PropsTable; diff --git a/packages/patternfly-4/react-docs/src/components/propsTable/propsTable.styles.js b/packages/patternfly-4/react-docs/src/components/propsTable/propsTable.styles.js deleted file mode 100644 index 8b18485ae1a..00000000000 --- a/packages/patternfly-4/react-docs/src/components/propsTable/propsTable.styles.js +++ /dev/null @@ -1,10 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; - -export default StyleSheet.create({ - enumValues: { - maxWidth: 200 - }, - requiredColumn: { - textAlign: 'center' - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/propsTableTs/index.js b/packages/patternfly-4/react-docs/src/components/propsTableTs/index.js deleted file mode 100644 index 421ab383140..00000000000 --- a/packages/patternfly-4/react-docs/src/components/propsTableTs/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './propsTableTs'; diff --git a/packages/patternfly-4/react-docs/src/components/propsTableTs/propsTableTs.js b/packages/patternfly-4/react-docs/src/components/propsTableTs/propsTableTs.js deleted file mode 100644 index 6d340ec20d5..00000000000 --- a/packages/patternfly-4/react-docs/src/components/propsTableTs/propsTableTs.js +++ /dev/null @@ -1,64 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { Table, Row, TD, TH, Body, Heading } from '../table'; -import Section from '../section'; -import { ExclamationCircleIcon } from '@patternfly/react-icons'; - -const docGenPropShape = PropTypes.shape({ - name: PropTypes.string, - comment: PropTypes.shape({ shortText: PropTypes.string }), - type: PropTypes.shape({ - name: PropTypes.string, - type: PropTypes.string - }), - flags: PropTypes.shape({ isOptional: PropTypes.bool }), - signatures: PropTypes.array -}); - -const propTypes = { - name: PropTypes.string.isRequired, - props: PropTypes.arrayOf(docGenPropShape), - types: PropTypes.object, - defaultProps: PropTypes.any -}; - -const defaultProps = { - props: [], - types: {}, - defaultProps: {} -}; - -export const PropsTableTs = ({ name, props }) => ( -
    - - - - - - - - - - {props.map(prop => ( - - - - - - - - ))} - -
    NameTypeRequiredDefaultDescription{prop.name}{prop.type}{prop.required && }{prop.default ? prop.default : ''}{prop.comment && }
    -
    -); - -PropsTableTs.propTypes = propTypes; -PropsTableTs.defaultProps = defaultProps; - -export default PropsTableTs; diff --git a/packages/patternfly-4/react-docs/src/components/propsTableTs/propsTableTs.styles.js b/packages/patternfly-4/react-docs/src/components/propsTableTs/propsTableTs.styles.js deleted file mode 100644 index 8b18485ae1a..00000000000 --- a/packages/patternfly-4/react-docs/src/components/propsTableTs/propsTableTs.styles.js +++ /dev/null @@ -1,10 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; - -export default StyleSheet.create({ - enumValues: { - maxWidth: 200 - }, - requiredColumn: { - textAlign: 'center' - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/section/index.js b/packages/patternfly-4/react-docs/src/components/section/index.js deleted file mode 100644 index ce2b58cbac7..00000000000 --- a/packages/patternfly-4/react-docs/src/components/section/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './section'; diff --git a/packages/patternfly-4/react-docs/src/components/section/section.js b/packages/patternfly-4/react-docs/src/components/section/section.js deleted file mode 100644 index 6905804d405..00000000000 --- a/packages/patternfly-4/react-docs/src/components/section/section.js +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { css } from '@patternfly/react-styles'; -import styles from './section.styles'; -import { Title } from '@patternfly/react-core'; - -const propTypes = { - children: PropTypes.node, - className: PropTypes.string, - description: PropTypes.string, - headingLevel: PropTypes.string, - headingSize: PropTypes.string, - name: PropTypes.string, - preface: PropTypes.string, - title: PropTypes.string -}; - -const defaultProps = { - children: null, - className: '', - description: '', - name: '', - preface: '', - title: '', - headingSize: 'lg' -}; - -const Section = ({ children, className, description, headingLevel, headingSize, name, preface, title, ...props }) => ( -
    - {Boolean(title || description) && ( -
    - {Boolean(title) && ( - - {title} - - )} - {Boolean(preface) &&

    {preface}

    } - {Boolean(description) &&

    {description}

    } -
    - )} - {children} -
    -); - -Section.propTypes = propTypes; -Section.defaultProps = defaultProps; - -export default Section; diff --git a/packages/patternfly-4/react-docs/src/components/section/section.styles.js b/packages/patternfly-4/react-docs/src/components/section/section.styles.js deleted file mode 100644 index 201c2b26f37..00000000000 --- a/packages/patternfly-4/react-docs/src/components/section/section.styles.js +++ /dev/null @@ -1,19 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_spacer_lg as spacerLg, - global_spacer_md as spacerMd, - global_spacer_sm as spacerSm -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - section: { - marginBottom: spacerLg.var - }, - header: { - marginBottom: spacerMd.var - }, - preface: { - marginTop: spacerSm.var, - marginBottom: spacerSm.var - } -}); diff --git a/packages/patternfly-4/react-docs/src/components/table/index.js b/packages/patternfly-4/react-docs/src/components/table/index.js deleted file mode 100644 index 01643f0f57f..00000000000 --- a/packages/patternfly-4/react-docs/src/components/table/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './table'; diff --git a/packages/patternfly-4/react-docs/src/components/table/table.js b/packages/patternfly-4/react-docs/src/components/table/table.js deleted file mode 100644 index 6296bd77a86..00000000000 --- a/packages/patternfly-4/react-docs/src/components/table/table.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import styles from './table.styles'; -import { css } from '@patternfly/react-styles'; - -const propTypes = { - children: PropTypes.any, - align: PropTypes.oneOf(['left', 'center', 'right']), // eslint-disable-line - className: PropTypes.string // eslint-disable-line -}; - -const defaultProps = { - children: null, - align: null, - className: '' -}; - -export const TD = ({ children, align, className, ...props }) => ( - - {children} - -); -TD.propTypes = propTypes; -TD.defaultProps = defaultProps; - -export const TH = ({ children, align }) => ( - {children} -); -TH.propTypes = propTypes; -TH.defaultProps = defaultProps; - -export const Row = ({ children }) => {children}; -Row.propTypes = propTypes; -Row.defaultProps = defaultProps; - -export const Heading = ({ children }) => ( - - {children} - -); -Heading.propTypes = propTypes; -Heading.defaultProps = defaultProps; - -export const Body = ({ children }) => {children}; -Body.propTypes = propTypes; -Body.defaultProps = defaultProps; - -export const Table = ({ children }) => {children}
    ; -Table.propTypes = propTypes; -Table.defaultProps = defaultProps; diff --git a/packages/patternfly-4/react-docs/src/components/table/table.styles.js b/packages/patternfly-4/react-docs/src/components/table/table.styles.js deleted file mode 100644 index c4330d13ce1..00000000000 --- a/packages/patternfly-4/react-docs/src/components/table/table.styles.js +++ /dev/null @@ -1,33 +0,0 @@ -import { StyleSheet } from '@patternfly/react-styles'; -import { - global_FontSize_sm as fontSizeSm, - global_spacer_sm as spacerSm, - global_spacer_md as spacerMd, - global_BorderWidth_sm as borderWidth, - global_BorderColor_light as borderColor -} from '@patternfly/react-tokens'; - -export default StyleSheet.create({ - table: { - width: '100%', - fontSize: fontSizeSm.var - }, - row: { - borderBottom: `${borderWidth.var} solid ${borderColor.var}` - }, - cell: { - padding: `${spacerSm.var} ${spacerMd.var}` - }, - enumValues: { - whiteSpace: 'pre' - }, - leftAlign: { - textAlign: 'left' - }, - centerAlign: { - textAlign: 'center' - }, - rightAlign: { - textAlign: 'right' - } -}); diff --git a/packages/patternfly-4/react-docs/src/pages/404.js b/packages/patternfly-4/react-docs/src/pages/404.js deleted file mode 100644 index 25b96562344..00000000000 --- a/packages/patternfly-4/react-docs/src/pages/404.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; - -const NotFoundPage = () => ( -
    -

    NOT FOUND

    -

    You just hit a route that doesn't exist... the sadness.

    -
    -); - -export default NotFoundPage; diff --git a/packages/patternfly-4/react-docs/src/pages/getting-started/faqs.js b/packages/patternfly-4/react-docs/src/pages/getting-started/faqs.js deleted file mode 100644 index a60e6d37a5b..00000000000 --- a/packages/patternfly-4/react-docs/src/pages/getting-started/faqs.js +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export default () =>
    Getting Started - Faqs
    ; diff --git a/packages/patternfly-4/react-docs/src/pages/getting-started/index.js b/packages/patternfly-4/react-docs/src/pages/getting-started/index.js deleted file mode 100644 index 514095de93f..00000000000 --- a/packages/patternfly-4/react-docs/src/pages/getting-started/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export default () =>
    Getting Started
    ; diff --git a/packages/patternfly-4/react-docs/src/pages/index.js b/packages/patternfly-4/react-docs/src/pages/index.js index 6deda13c292..ef7e66942a7 100644 --- a/packages/patternfly-4/react-docs/src/pages/index.js +++ b/packages/patternfly-4/react-docs/src/pages/index.js @@ -1,45 +1,24 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import Content from '../components/content'; -import { Title } from '@patternfly/react-core'; -import { StyleSheet, css } from '@patternfly/react-styles'; -import packageJson from '../../../react-core/package.json'; -import { - global_Color_dark_100 as heroBackgrounColor, - global_Color_light_100 as heroTextColor -} from '@patternfly/react-tokens'; -import DocsLayout from '../components/layouts'; +import React from "react" +import { Link } from "gatsby" +import Helmet from 'react-helmet'; -if (process.env.NODE_ENV !== 'production') { - const axe = require('react-axe'); // eslint-disable-line global-require - axe(React, ReactDOM, 1000); -} - -const styles = StyleSheet.create({ - hero: { - height: '100vh', - backgroundColor: heroBackgrounColor.var, - display: 'flex', - alignItems: 'center' - }, - heroText: { - color: heroTextColor.var - } -}); +import Layout from "../components/layout" const IndexPage = () => ( - -
    - - - PatternFly React - - - Version: {packageJson.version} - - -
    -
    -); + + + + + + + + +

    Hi people

    +

    Welcome to your new Gatsby site.

    +

    Now go build something great.

    + Go to page 2 +
    +
    +) -export default IndexPage; +export default IndexPage diff --git a/packages/patternfly-4/react-docs/src/pages/page-2.js b/packages/patternfly-4/react-docs/src/pages/page-2.js new file mode 100644 index 00000000000..6b11ea4d3ec --- /dev/null +++ b/packages/patternfly-4/react-docs/src/pages/page-2.js @@ -0,0 +1,14 @@ +import React from "react" +import { Link } from "gatsby" + +import Layout from "../components/layout" + +const SecondPage = () => ( + +

    Hi from the second page

    +

    Welcome to page 2

    + Go back to the homepage +
    +) + +export default SecondPage diff --git a/packages/patternfly-4/react-docs/src/pages/styles/icons.js b/packages/patternfly-4/react-docs/src/pages/styles/icons.js deleted file mode 100644 index a9f53cc7bf7..00000000000 --- a/packages/patternfly-4/react-docs/src/pages/styles/icons.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import Content from '../../components/content'; -import { Title, Grid, GridItem } from '@patternfly/react-core'; -import * as icons from '@patternfly/react-icons'; -import { css, StyleSheet } from '@patternfly/react-styles'; -import { global_spacer_md as spacerMd, global_FontSize_sm as labelFontSize } from '@patternfly/react-tokens'; -import DocsLayout from '../../components/layouts'; - -const allIcons = Object.entries(icons).filter(([name]) => name.endsWith('Icon')); - -const styles = StyleSheet.create({ - iconCell: { - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - padding: spacerMd.var - }, - label: { - textAlign: 'center', - fontSize: labelFontSize.var - } -}); - -function Icons() { - return ( - - - Icons - - {allIcons.map(([id, Icon]) => ( - - -
    {id}
    -
    - ))} -
    -
    -
    - ); -} - -export default Icons; diff --git a/packages/patternfly-4/react-docs/src/pages/styles/tokens.js b/packages/patternfly-4/react-docs/src/pages/styles/tokens.js deleted file mode 100644 index fc399e01394..00000000000 --- a/packages/patternfly-4/react-docs/src/pages/styles/tokens.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import Content from '../../components/content'; -import { Title } from '@patternfly/react-core'; -import DocsLayout from '../../components/layouts'; -import Tokens from '../../components/css-variables'; - -function GlobalVariables() { - return ( - - - Global CSS Variables - - - - ); -} - -export default GlobalVariables; diff --git a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js new file mode 100644 index 00000000000..14d4f0d0f78 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js @@ -0,0 +1,64 @@ +import React from "react" +import { graphql } from "gatsby" + +export default function Template({ data, pageContext }) { + // const { markdownRemark } = data // data.markdownRemark holds our post data + // const { frontmatter, html } = markdownRemark + // return ( + //
    + //
    + //

    {frontmatter.title}

    + //
    + //
    + //
    + // ) + return
    + bad html +
    + props +
    + context +

    {JSON.stringify(pageContext)}

    + data +

    {JSON.stringify(data)}

    +
    +} + +// Test queries in http://localhost:8000/___graphql +// See how to filter from: https://www.gatsbyjs.org/docs/graphql-reference/ +// We want the markdown from gatsby-transformer-remark +// We want ALL the component metadata from gatsby-transformer-react-docgen-typescript +// for components in that folder +export const pageQuery = graphql` +query GetComponent($fileAbsolutePath: String!, $pathRegex: String!) { + markdownRemark(fileAbsolutePath: { eq: $fileAbsolutePath }) { + html + htmlAst + frontmatter { + title + } + } + allComponentMetadata(filter: {path: {regex: $pathRegex}}) { + edges { + node { + path + name + description + props { + name + required + type { + name + } + defaultValue { + value + } + } + } + } + } +} +` \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 22300ee2797..8a37288a42d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,16 +63,16 @@ source-map "^0.5.0" "@babel/core@>=7.1.0", "@babel/core@^7.0.0", "@babel/core@^7.0.1": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.0.tgz#248fd6874b7d755010bfe61f557461d4f446d9e9" dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.3.4" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.3.4" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.3.4" - "@babel/types" "^7.3.4" + "@babel/generator" "^7.4.0" + "@babel/helpers" "^7.4.0" + "@babel/parser" "^7.4.0" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.0" + "@babel/types" "^7.4.0" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" @@ -81,11 +81,11 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.1.6", "@babel/generator@^7.2.2", "@babel/generator@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e" +"@babel/generator@^7.0.0", "@babel/generator@^7.1.6", "@babel/generator@^7.2.2", "@babel/generator@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" dependencies: - "@babel/types" "^7.3.4" + "@babel/types" "^7.4.0" jsesc "^2.5.1" lodash "^4.17.11" source-map "^0.5.0" @@ -111,32 +111,32 @@ "@babel/types" "^7.3.0" esutils "^2.0.0" -"@babel/helper-call-delegate@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" +"@babel/helper-call-delegate@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz#f308eabe0d44f451217853aedf4dea5f6fe3294f" dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-hoist-variables" "^7.4.0" + "@babel/traverse" "^7.4.0" + "@babel/types" "^7.4.0" -"@babel/helper-create-class-features-plugin@^7.3.0", "@babel/helper-create-class-features-plugin@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.4.tgz#092711a7a3ad8ea34de3e541644c2ce6af1f6f0c" +"@babel/helper-create-class-features-plugin@^7.3.0", "@babel/helper-create-class-features-plugin@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.0.tgz#30fd090e059d021995c1762a5b76798fa0b51d82" dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.3.4" - "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.0" + "@babel/helper-split-export-declaration" "^7.4.0" -"@babel/helper-define-map@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" +"@babel/helper-define-map@^7.1.0", "@babel/helper-define-map@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz#cbfd8c1b2f12708e262c26f600cd16ed6a3bc6c9" dependencies: "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" + "@babel/types" "^7.4.0" + lodash "^4.17.11" "@babel/helper-explode-assignable-expression@^7.1.0": version "7.1.0" @@ -159,11 +159,11 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-hoist-variables@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" +"@babel/helper-hoist-variables@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz#25b621399ae229869329730a62015bbeb0a6fbd6" dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.4.0" "@babel/helper-member-expression-to-functions@^7.0.0": version "7.0.0" @@ -214,14 +214,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.3.4.tgz#a795208e9b911a6eeb08e5891faacf06e7013e13" +"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz#4f56adb6aedcd449d2da9399c2dcf0545463b64c" dependencies: "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.3.4" - "@babel/types" "^7.3.4" + "@babel/traverse" "^7.4.0" + "@babel/types" "^7.4.0" "@babel/helper-simple-access@^7.1.0": version "7.1.0" @@ -230,11 +230,11 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-split-export-declaration@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" +"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.4.0" "@babel/helper-wrap-function@^7.1.0": version "7.2.0" @@ -245,13 +245,13 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.1.5", "@babel/helpers@^7.2.0": - version "7.3.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.3.1.tgz#949eec9ea4b45d3210feb7dc1c22db664c9e44b9" +"@babel/helpers@^7.1.5", "@babel/helpers@^7.2.0", "@babel/helpers@^7.4.0": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.2.tgz#3bdfa46a552ca77ef5a0f8551be5f0845ae989be" dependencies: - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.3.0" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.0" + "@babel/types" "^7.4.0" "@babel/highlight@^7.0.0": version "7.0.0" @@ -261,9 +261,9 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.3", "@babel/parser@^7.1.6", "@babel/parser@^7.2.2", "@babel/parser@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" +"@babel/parser@^7.0.0", "@babel/parser@^7.1.3", "@babel/parser@^7.1.6", "@babel/parser@^7.2.2", "@babel/parser@^7.4.0": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -281,10 +281,10 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-class-properties@^7.0.0": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.4.tgz#410f5173b3dc45939f9ab30ca26684d72901405e" + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz#d70db61a2f1fd79de927eea91f6411c964e084b8" dependencies: - "@babel/helper-create-class-features-plugin" "^7.3.4" + "@babel/helper-create-class-features-plugin" "^7.4.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-decorators@7.3.0": @@ -323,9 +323,9 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.3.1", "@babel/plugin-proposal-object-rest-spread@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.4.tgz#47f73cf7f2a721aad5c0261205405c642e424654" +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.3.1", "@babel/plugin-proposal-object-rest-spread@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.0.tgz#e4960575205eadf2a1ab4e0c79f9504d5b82a97f" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" @@ -337,13 +337,13 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" -"@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" +"@babel/plugin-proposal-unicode-property-regex@^7.2.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz#202d91ee977d760ef83f4f416b280d568be84623" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.2.0" + regexpu-core "^4.5.4" "@babel/plugin-syntax-async-generators@^7.2.0": version "7.2.0" @@ -423,9 +423,9 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.2.0", "@babel/plugin-transform-async-to-generator@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.3.4.tgz#4e45408d3c3da231c0e7b823f407a53a7eb3048c" +"@babel/plugin-transform-async-to-generator@^7.2.0", "@babel/plugin-transform-async-to-generator@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz#234fe3e458dce95865c0d152d256119b237834b0" dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -437,9 +437,9 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.2.0", "@babel/plugin-transform-block-scoping@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.3.4.tgz#5c22c339de234076eee96c8783b2fed61202c5c4" +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.2.0", "@babel/plugin-transform-block-scoping@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz#164df3bb41e3deb954c4ca32ffa9fcaa56d30bcb" dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.11" @@ -457,17 +457,17 @@ "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.2.0", "@babel/plugin-transform-classes@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.3.4.tgz#dc173cb999c6c5297e0b5f2277fdaaec3739d0cc" +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.2.0", "@babel/plugin-transform-classes@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz#e3428d3c8a3d01f33b10c529b998ba1707043d4d" dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.1.0" + "@babel/helper-define-map" "^7.4.0" "@babel/helper-function-name" "^7.1.0" "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.3.4" - "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.0" + "@babel/helper-split-export-declaration" "^7.4.0" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.2.0": @@ -476,12 +476,18 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@7.3.2", "@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.2.0": +"@babel/plugin-transform-destructuring@7.3.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz#f2f5520be055ba1c38c41c0e094d8a461dd78f2d" dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.2.0", "@babel/plugin-transform-destructuring@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.0.tgz#acbb9b2418d290107db333f4d6cd8aa6aea00343" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-dotall-regex@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" @@ -511,15 +517,15 @@ "@babel/plugin-syntax-flow" "^7.2.0" "@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz#00156236defb7dedddc2d3c9477dcc01a4494327" + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.0.tgz#f3c59eecff68c99b9c96eaafe4fe9d1fa8947138" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-flow" "^7.2.0" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.2.0", "@babel/plugin-transform-for-of@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.0.tgz#56c8c36677f5d4a16b80b12f7b768de064aaeb5f" dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -549,19 +555,19 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.2.0", "@babel/plugin-transform-modules-commonjs@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.0.tgz#3b8ec61714d3b75d20c5ccfa157f2c2e087fd4ca" dependencies: "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" -"@babel/plugin-transform-modules-systemjs@^7.2.0", "@babel/plugin-transform-modules-systemjs@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.3.4.tgz#813b34cd9acb6ba70a84939f3680be0eb2e58861" +"@babel/plugin-transform-modules-systemjs@^7.2.0", "@babel/plugin-transform-modules-systemjs@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz#c2495e55528135797bc816f5d50f851698c586a1" dependencies: - "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-hoist-variables" "^7.4.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-modules-umd@^7.2.0": @@ -571,15 +577,15 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz#140b52985b2d6ef0cb092ef3b29502b990f9cd50" +"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz#800391136d6cbcc80728dbdba3c1c6e46f86c12e" dependencies: regexp-tree "^0.1.0" -"@babel/plugin-transform-new-target@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" +"@babel/plugin-transform-new-target@^7.0.0", "@babel/plugin-transform-new-target@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz#67658a1d944edb53c8d4fa3004473a0dd7838150" dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -596,11 +602,11 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.1.0" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.2.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.3.3.tgz#3a873e07114e1a5bee17d04815662c8317f10e30" +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.2.0", "@babel/plugin-transform-parameters@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.0.tgz#a1309426fac4eecd2a9439a4c8c35124a11a48a9" dependencies: - "@babel/helper-call-delegate" "^7.1.0" + "@babel/helper-call-delegate" "^7.4.0" "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -645,9 +651,9 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.2.0" -"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.3.4.tgz#1601655c362f5b38eead6a52631f5106b29fa46a" +"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.0.tgz#0780e27ee458cc3fdbad18294d703e972ae1f6d1" dependencies: regenerator-transform "^0.13.4" @@ -661,8 +667,8 @@ semver "^5.5.1" "@babel/plugin-transform-runtime@^7.0.0": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.3.4.tgz#57805ac8c1798d102ecd75c03b024a5b3ea9b431" + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.0.tgz#b4d8c925ed957471bc57e0b9da53408ebb1ed457" dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -702,8 +708,8 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript@^7.1.0", "@babel/plugin-transform-typescript@^7.3.2": - version "7.3.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.3.2.tgz#59a7227163e55738842f043d9e5bd7c040447d96" + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.0.tgz#0389ec53a34e80f99f708c4ca311181449a68eb1" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" @@ -717,11 +723,11 @@ regexpu-core "^4.1.3" "@babel/polyfill@^7.0.0": - version "7.2.5" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.2.5.tgz#6c54b964f71ad27edddc567d065e57e87ed7fa7d" + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.0.tgz#90f9d68ae34ac42ab4b4aa03151848f536960218" dependencies: - core-js "^2.5.7" - regenerator-runtime "^0.12.0" + core-js "^2.6.5" + regenerator-runtime "^0.13.2" "@babel/preset-env@7.3.1": version "7.3.1" @@ -772,49 +778,51 @@ semver "^5.3.0" "@babel/preset-env@^7.0.0": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.2.tgz#2f5ba1de2daefa9dcca653848f96c7ce2e406676" dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.3.4" + "@babel/plugin-proposal-object-rest-spread" "^7.4.0" "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.0" "@babel/plugin-syntax-async-generators" "^7.2.0" "@babel/plugin-syntax-json-strings" "^7.2.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.3.4" + "@babel/plugin-transform-async-to-generator" "^7.4.0" "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.3.4" - "@babel/plugin-transform-classes" "^7.3.4" + "@babel/plugin-transform-block-scoping" "^7.4.0" + "@babel/plugin-transform-classes" "^7.4.0" "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.4.0" "@babel/plugin-transform-dotall-regex" "^7.2.0" "@babel/plugin-transform-duplicate-keys" "^7.2.0" "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.0" "@babel/plugin-transform-function-name" "^7.2.0" "@babel/plugin-transform-literals" "^7.2.0" "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.3.4" + "@babel/plugin-transform-modules-commonjs" "^7.4.0" + "@babel/plugin-transform-modules-systemjs" "^7.4.0" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" - "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.2" + "@babel/plugin-transform-new-target" "^7.4.0" "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.3.4" + "@babel/plugin-transform-parameters" "^7.4.0" + "@babel/plugin-transform-regenerator" "^7.4.0" "@babel/plugin-transform-shorthand-properties" "^7.2.0" "@babel/plugin-transform-spread" "^7.2.0" "@babel/plugin-transform-sticky-regex" "^7.2.0" "@babel/plugin-transform-template-literals" "^7.2.0" "@babel/plugin-transform-typeof-symbol" "^7.2.0" "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" + "@babel/types" "^7.4.0" + browserslist "^4.4.2" + core-js-compat "^3.0.0" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.3.0" @@ -844,11 +852,11 @@ "@babel/plugin-transform-typescript" "^7.3.2" "@babel/runtime-corejs2@^7.0.0": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.3.4.tgz#63f8bbc77622da202e9ea6f8f6e3bf28991832d9" + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.4.2.tgz#a0cec2c41717fa415e9c204f32b603d88b1796c2" dependencies: - core-js "^2.5.7" - regenerator-runtime "^0.12.0" + core-js "^2.6.5" + regenerator-runtime "^0.13.2" "@babel/runtime@7.3.1": version "7.3.1" @@ -857,36 +865,36 @@ regenerator-runtime "^0.12.0" "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83" + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.2.tgz#f5ab6897320f16decd855eed70b705908a313fe8" dependencies: - regenerator-runtime "^0.12.0" + regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" +"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2", "@babel/template@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.2.2" - "@babel/types" "^7.2.2" + "@babel/parser" "^7.4.0" + "@babel/types" "^7.4.0" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6", "@babel/traverse@^7.2.2", "@babel/traverse@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06" +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.2.2", "@babel/traverse@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada" dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.3.4" + "@babel/generator" "^7.4.0" "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.3.4" - "@babel/types" "^7.3.4" + "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/parser" "^7.4.0" + "@babel/types" "^7.4.0" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.11" -"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed" +"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" dependencies: esutils "^2.0.2" lodash "^4.17.11" @@ -958,21 +966,21 @@ version "0.8.2" resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.8.2.tgz#576ff7fb1230185b619a75d258cbc98f0867a8dc" -"@fortawesome/fontawesome-common-types@^0.2.15": - version "0.2.15" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.15.tgz#16af950653083d1e3064061de9f8e5e3b579f688" +"@fortawesome/fontawesome-common-types@^0.2.16": + version "0.2.16" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.16.tgz#7428620cd5ac9b148f40b45413b5de7205954d5e" "@fortawesome/free-regular-svg-icons@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.7.2.tgz#7113bf9df5a970918b8cac8eb45e5ad120818741" + version "5.8.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.8.0.tgz#9b0761db47e4a095a069fbcd1f38189ba03ae2e4" dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.15" + "@fortawesome/fontawesome-common-types" "^0.2.16" "@fortawesome/free-solid-svg-icons@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.7.2.tgz#9ec2ed353d630092a8e19cc8aae2f716572963e5" + version "5.8.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.8.0.tgz#5bfc94dd0aebf569c834a83e0649b8ed2a39da50" dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.15" + "@fortawesome/fontawesome-common-types" "^0.2.16" "@gatsbyjs/relay-compiler@2.0.0-printer-fix.2": version "2.0.0-printer-fix.2" @@ -1612,8 +1620,8 @@ universal-user-agent "^2.0.1" "@octokit/rest@^16.16.0": - version "16.19.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.19.0.tgz#238244eae904c15bc9aa863bb3819142d3369ccb" + version "16.20.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.20.0.tgz#54462b6e540b5d40063850d370ce8e084cf127d6" dependencies: "@octokit/request" "2.4.2" before-after-hook "^1.4.0" @@ -2169,28 +2177,14 @@ version "1.2.0" resolved "https://registry.yarnpkg.com/@types/exenv/-/exenv-1.2.0.tgz#84ff936feeafc917c3c66f80b43e917f56eed00b" -"@types/fs-extra@^5.0.3": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.5.tgz#080d90a792f3fa2c5559eb44bd8ef840aae9104b" - dependencies: - "@types/node" "*" - "@types/geojson@*": - version "7946.0.6" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.6.tgz#416f388a06b227784a2d91a88a53f14de05cd54b" + version "7946.0.7" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" "@types/get-port@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-0.0.4.tgz#eb6bb7423d9f888b632660dc7d2fd3e69a35643e" -"@types/glob@*", "@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - "@types/glob@^5.0.30": version "5.0.36" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.36.tgz#0c80a9c8664fc7d19781de229f287077fd622cb2" @@ -2199,15 +2193,13 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/handlebars@^4.0.38": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.1.0.tgz#3fcce9bf88f85fe73dc932240ab3fb682c624850" +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" dependencies: - handlebars "*" - -"@types/highlight.js@^9.12.3": - version "9.12.3" - resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.3.tgz#b672cfaac25cbbc634a0fd92c515f66faa18dbca" + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" "@types/history@*": version "4.7.2" @@ -2223,15 +2215,7 @@ dependencies: "@types/jest-diff" "*" -"@types/lodash@^4.14.110": - version "4.14.123" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d" - -"@types/marked@^0.4.0": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.4.2.tgz#64a89e53ea37f61cc0f3ee1732c555c2dbf6452f" - -"@types/minimatch@*", "@types/minimatch@3.0.3": +"@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -2240,8 +2224,8 @@ resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.3.29.tgz#7f2ad7ec55f914482fc9b1ec4bb1ae6028d46066" "@types/node@*": - version "11.11.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.3.tgz#7c6b0f8eaf16ae530795de2ad1b85d34bf2f5c58" + version "11.11.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.4.tgz#8808bd5a82bbf6f5d412eff1c228d178e7c24bb3" "@types/node@^7.0.11": version "7.10.5" @@ -2263,8 +2247,8 @@ "@types/react" "*" "@types/react-dom@~16.8.0": - version "16.8.2" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.2.tgz#9bd7d33f908b243ff0692846ef36c81d4941ad12" + version "16.8.3" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.3.tgz#6131b7b6158bc7ed1925a3374b88b7c00481f0cb" dependencies: "@types/react" "*" @@ -2275,13 +2259,6 @@ "@types/prop-types" "*" csstype "^2.2.0" -"@types/shelljs@^0.8.0": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.3.tgz#f713f312dbae49ab5025290007e71ea32998e9a9" - dependencies: - "@types/glob" "*" - "@types/node" "*" - "@types/styled-system@^3.0.7": version "3.2.2" resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-3.2.2.tgz#a40b30baf20a8d9820808688a370a973cb778e7c" @@ -2629,10 +2606,6 @@ acorn-dynamic-import@^3.0.0: dependencies: acorn "^5.0.0" -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - acorn-es7@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/acorn-es7/-/acorn-es7-0.1.0.tgz#4a6de4522faacb4c31209e1b73b5f301ed2bb30a" @@ -2670,7 +2643,7 @@ acorn-jsx@^4.1.1: dependencies: acorn "^5.0.3" -acorn-jsx@^5.0.0, acorn-jsx@^5.0.1: +acorn-jsx@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" @@ -2726,7 +2699,7 @@ acorn@^5.0.0, acorn@^5.0.3, acorn@^5.2.1, acorn@^5.3.0, acorn@^5.4.0, acorn@^5.4 version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.4, acorn@^6.0.7, acorn@^6.1.1: +acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.4, acorn@^6.0.7: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" @@ -3076,6 +3049,10 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +array-iterate@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.2.tgz#f66a57e84426f8097f4197fbb6c051b8e5cdf7d8" + array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" @@ -3098,7 +3075,7 @@ array-union@^1.0.1, array-union@^1.0.2: dependencies: array-uniq "^1.0.1" -array-uniq@^1.0.1: +array-uniq@^1.0.1, array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -3182,6 +3159,10 @@ ast-types@0.11.7: version "0.11.7" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" +ast-types@0.12.2: + version "0.12.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.12.2.tgz#341656049ee328ac03fc805c156b49ebab1e4462" + ast-types@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -3697,7 +3678,7 @@ babel-plugin-react-docgen@^1.9.0: lodash "^4.17.0" react-docgen "^3.0.0-beta11" -babel-plugin-remove-graphql-queries@^2.5.2, babel-plugin-remove-graphql-queries@^2.6.2: +babel-plugin-remove-graphql-queries@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.6.2.tgz#8ee167324befa6579858fcaf1dbd75a84766d555" @@ -4829,11 +4810,11 @@ browserslist@^2.11.3: caniuse-lite "^1.0.30000792" electron-to-chromium "^1.3.30" -browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.4.2: - version "4.5.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.1.tgz#2226cada1947b33f4cfcf7b608dcb519b6128106" +browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.4.2, browserslist@^4.5.1: + version "4.5.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.2.tgz#36ad281f040af684555a23c780f5c2081c752df0" dependencies: - caniuse-lite "^1.0.30000949" + caniuse-lite "^1.0.30000951" electron-to-chromium "^1.3.116" node-releases "^1.1.11" @@ -4853,19 +4834,6 @@ btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" -buble@^0.19.3: - version "0.19.7" - resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.7.tgz#1dfd080ab688101aad5388d3304bc82601a244fd" - dependencies: - acorn "^6.1.1" - acorn-dynamic-import "^4.0.0" - acorn-jsx "^5.0.1" - chalk "^2.4.2" - magic-string "^0.25.2" - minimist "^1.2.0" - os-homedir "^1.0.1" - regexpu-core "^4.5.4" - buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -5125,7 +5093,7 @@ camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -camelcase@^5.0.0, camelcase@^5.2.0: +camelcase@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" @@ -5148,12 +5116,12 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000950" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000950.tgz#d8356a082b28bc22975f010fc7668fcb77e1339f" + version "1.0.30000951" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000951.tgz#64a5d491c8164a4f81ce9f3ab906b61df9a61b1a" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000905, caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000947, caniuse-lite@^1.0.30000949: - version "1.0.30000950" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000950.tgz#8c559d66e332b34e919d1086cc6d29c1948856ae" +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000905, caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000947, caniuse-lite@^1.0.30000951: + version "1.0.30000951" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000951.tgz#c7c2fd4d71080284c8677dd410368df8d83688fe" capture-exit@^1.2.0: version "1.2.0" @@ -5177,7 +5145,7 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -ccount@^1.0.0: +ccount@^1.0.0, ccount@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff" @@ -5457,18 +5425,6 @@ cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" -clipboard-copy@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/clipboard-copy/-/clipboard-copy-2.0.1.tgz#25214db3aabc282109cfa3429ffd885b014fc8b3" - -clipboard@^1.5.5: - version "1.7.1" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-1.7.1.tgz#360d6d6946e99a7a1fef395e42ba92b5e9b5a16b" - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - clipboard@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" @@ -5585,7 +5541,7 @@ codecov@^3.2.0: teeny-request "^3.7.0" urlgrey "^0.4.4" -collapse-white-space@^1.0.2: +collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" @@ -5675,7 +5631,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^1.0.0: +comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz#b13793131d9ea2d2431cf5b507ddec258f0ce0db" dependencies: @@ -5785,14 +5741,6 @@ component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" -component-props@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/component-props/-/component-props-1.1.1.tgz#f9b7df9b9927b6e6d97c9bd272aa867670f34944" - -component-xor@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/component-xor/-/component-xor-0.0.4.tgz#c55d83ccc1b94cd5089a4e93fa7891c7263e59aa" - compressible@^2.0.0, compressible@~2.0.16: version "2.0.16" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.16.tgz#a49bf9858f3821b64ce1be0296afc7380466a77f" @@ -6038,15 +5986,32 @@ copyfiles@^1.2.0: noms "0.0.0" through2 "^2.0.1" +core-js-compat@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.0.tgz#cd9810b8000742535a4a43773866185e310bd4f7" + dependencies: + browserslist "^4.5.1" + core-js "3.0.0" + core-js-pure "3.0.0" + semver "^5.6.0" + +core-js-pure@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.0.0.tgz#a5679adb4875427c8c0488afc93e6f5b7125859b" + core-js@2.6.4: version "2.6.4" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.4.tgz#b8897c062c4d769dd30a0ac5c73976c47f92ea0d" +core-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.3, core-js@^2.5.7: +core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.3, core-js@^2.6.5: version "2.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" @@ -6293,22 +6258,6 @@ css-loader@^1.0.0: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" -css-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" - dependencies: - camelcase "^5.2.0" - icss-utils "^4.1.0" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.14" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^2.0.6" - postcss-modules-scope "^2.1.0" - postcss-modules-values "^2.0.0" - postcss-value-parser "^3.3.0" - schema-utils "^1.0.0" - css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" @@ -6331,6 +6280,10 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" +css-selector-parser@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.3.0.tgz#5f1ad43e2d8eefbfdc304fcd39a521664943e3eb" + css-selector-tokenizer@^0.7.0: version "0.7.1" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" @@ -6365,7 +6318,7 @@ css-what@2.1, css-what@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" -css@^2.2.3: +css@2.2.4, css@^2.2.3: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" dependencies: @@ -6386,10 +6339,6 @@ cssesc@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - cssnano-preset-default@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" @@ -6624,8 +6573,8 @@ d3-scale@^1.0.0: d3-time-format "2" d3-shape@^1.0.0, d3-shape@^1.2.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.4.tgz#358e76014645321eecc7c364e188f8ae3d2a07d4" + version "1.3.5" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.5.tgz#e81aea5940f59f0a79cfccac012232a8987c6033" dependencies: d3-path "1" @@ -6914,6 +6863,12 @@ destroy@^1.0.4, destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" +detab@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.1.tgz#531f5e326620e2fd4f03264a905fb3bcc8af4df4" + dependencies: + repeat-string "^1.5.4" + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -7074,13 +7029,6 @@ dom-converter@^0.2: dependencies: "@babel/runtime" "^7.1.2" -dom-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dom-iterator/-/dom-iterator-1.0.0.tgz#9c09899846ec41c2d257adc4d6015e4759ef05ad" - dependencies: - component-props "1.1.1" - component-xor "0.0.4" - dom-serializer@0, dom-serializer@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -7221,8 +7169,8 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.116, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.47: - version "1.3.116" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz#1dbfee6a592a0c14ade77dbdfe54fef86387d702" + version "1.3.118" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.118.tgz#5c82b0445a40934e6cae9c2f40bfaaa986ea44a3" elegant-spinner@^1.0.1: version "1.0.1" @@ -7240,6 +7188,10 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + emoji-regex@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" @@ -8833,7 +8785,7 @@ fs-extra@^6.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.0, fs-extra@^7.0.1: +fs-extra@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" dependencies: @@ -8915,9 +8867,9 @@ fuse.js@^3.0.1, fuse.js@^3.2.0: version "3.4.4" resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.4.4.tgz#f98f55fcb3b595cf6a3e629c5ffaf10982103e95" -gatsby-cli@^2.4.16: - version "2.4.16" - resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.4.16.tgz#62581d5c6289ab72cbb34a36ad4ac83fc649768b" +gatsby-cli@^2.4.17: + version "2.4.17" + resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.4.17.tgz#38f0d2fd55de595b457a1d2a1048fb8f88a8f143" dependencies: "@babel/code-frame" "^7.0.0" "@babel/runtime" "^7.0.0" @@ -8941,6 +8893,13 @@ gatsby-cli@^2.4.16: yargs "^12.0.5" yurnalist "^1.0.2" +gatsby-image@^2.0.34: + version "2.0.34" + resolved "https://registry.yarnpkg.com/gatsby-image/-/gatsby-image-2.0.34.tgz#b4f33c3b9391d55fe2648fb629fee9db2d524a86" + dependencies: + "@babel/runtime" "^7.0.0" + prop-types "^15.6.1" + gatsby-link@^2.0.16: version "2.0.16" resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-2.0.16.tgz#5d140e43f3aec6dd59e01c1468d77a54092370c5" @@ -8963,20 +8922,12 @@ gatsby-plugin-page-creator@^2.0.10: parse-filepath "^1.0.1" slash "^1.0.0" -gatsby-plugin-react-helmet@^3.0.8: +gatsby-plugin-react-helmet@^3.0.10: version "3.0.10" resolved "https://registry.yarnpkg.com/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.0.10.tgz#08a4f3f7d6ffd020d78817679535fb6548602302" dependencies: "@babel/runtime" "^7.0.0" -gatsby-plugin-typescript@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.0.3.tgz#07b4f42180d8e4d39b3fa9da5a494390a03d0c6e" - dependencies: - "@babel/preset-typescript" "^7.0.0" - "@babel/runtime" "^7.0.0" - babel-plugin-remove-graphql-queries "^2.5.2" - gatsby-react-router-scroll@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.0.6.tgz#b04a8fe6ee77db5ca8f804b7ef476fd205dc4a40" @@ -8985,7 +8936,7 @@ gatsby-react-router-scroll@^2.0.6: scroll-behavior "^0.9.9" warning "^3.0.0" -gatsby-source-filesystem@^2.0.23: +gatsby-source-filesystem@^2.0.27: version "2.0.27" resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-2.0.27.tgz#58b2191b26b874d17ec8b596d9870580cb02d7d9" dependencies: @@ -9005,27 +8956,34 @@ gatsby-source-filesystem@^2.0.23: valid-url "^1.0.9" xstate "^3.1.0" -gatsby-transformer-json@^2.1.8: - version "2.1.11" - resolved "https://registry.yarnpkg.com/gatsby-transformer-json/-/gatsby-transformer-json-2.1.11.tgz#b1c9acbc0da6e7e11b7dd278e9543171a71ecd89" +gatsby-transformer-remark@^2.3.7: + version "2.3.8" + resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-2.3.8.tgz#bf25bceb747f1e1fd2e5809731ff6da0810c1b14" dependencies: "@babel/runtime" "^7.0.0" bluebird "^3.5.0" - -gatsby-transformer-react-docgen@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gatsby-transformer-react-docgen/-/gatsby-transformer-react-docgen-3.0.2.tgz#cc35829a48810dcc9b5d2d6f052b57ff7cec4cb1" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/runtime" "^7.0.0" - "@babel/types" "^7.0.0" - common-tags "^1.4.0" - react-docgen "3.0.0-rc.2" - react-docgen-displayname-handler " ^2.1.0" - -gatsby@^2.1.29: - version "2.1.37" - resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.1.37.tgz#bbb16aef7d4cd65a0757688b8fd2550299a123bb" + gray-matter "^4.0.0" + hast-util-raw "^4.0.0" + hast-util-to-html "^4.0.0" + lodash "^4.17.10" + mdast-util-to-hast "^3.0.0" + mdast-util-to-string "^1.0.5" + mdast-util-toc "^2.0.1" + remark "^9.0.0" + remark-parse "^5.0.0" + remark-retext "^3.1.0" + remark-stringify "^5.0.0" + retext-english "^3.0.0" + sanitize-html "^1.18.2" + underscore.string "^3.3.5" + unified "^6.1.5" + unist-util-remove-position "^1.1.2" + unist-util-select "^1.5.0" + unist-util-visit "^1.3.0" + +gatsby@^2.1.37: + version "2.2.5" + resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.2.5.tgz#0c4220c634ee69b9af1b35318019eb10d60e7a69" dependencies: "@babel/code-frame" "^7.0.0" "@babel/core" "^7.0.0" @@ -9081,21 +9039,21 @@ gatsby@^2.1.29: flat "^4.0.0" fs-exists-cached "1.0.0" fs-extra "^5.0.0" - gatsby-cli "^2.4.16" + gatsby-cli "^2.4.17" gatsby-link "^2.0.16" gatsby-plugin-page-creator "^2.0.10" gatsby-react-router-scroll "^2.0.6" glob "^7.1.1" graphql "^14.1.1" + graphql-compose "^6.0.3" graphql-playground-middleware-express "^1.7.10" graphql-relay "^0.6.0" - graphql-skip-limit "^2.0.6" graphql-tools "^3.0.4" - graphql-type-json "^0.2.1" hash-mod "^0.0.5" invariant "^2.2.4" is-relative "^1.0.0" is-relative-url "^2.0.0" + is-wsl "^1.1.0" jest-worker "^23.2.0" joi "12.x.x" json-loader "^0.5.7" @@ -9298,6 +9256,12 @@ gitdiff-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/gitdiff-parser/-/gitdiff-parser-0.1.2.tgz#26a256e05e9c2d5016b512a96c1dacb40862b92a" +github-slugger@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.1.tgz#47e904e70bf2dccd0014748142d31126cfd49508" + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + glamor@^2.20.40: version "2.20.40" resolved "https://registry.yarnpkg.com/glamor/-/glamor-2.20.40.tgz#f606660357b7cf18dface731ad1a2cfa93817f05" @@ -9544,6 +9508,13 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.4 version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" +graphql-compose@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/graphql-compose/-/graphql-compose-6.0.3.tgz#fa5668a30694abef4166703aa03af07a741039a8" + dependencies: + graphql-type-json "^0.2.1" + object-path "^0.11.4" + graphql-config@^2.0.1: version "2.2.1" resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-2.2.1.tgz#5fd0ec77ac7428ca5fb2026cf131be10151a0cb2" @@ -9583,12 +9554,6 @@ graphql-request@^1.5.0: dependencies: cross-fetch "2.2.2" -graphql-skip-limit@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/graphql-skip-limit/-/graphql-skip-limit-2.0.6.tgz#67cdfbf33254db338aade6e7b44ea3e779b4b1c4" - dependencies: - "@babel/runtime" "^7.0.0" - graphql-tools@^3.0.4: version "3.1.1" resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-3.1.1.tgz#d593358f01e7c8b1671a17b70ddb034dea9dbc50" @@ -9600,8 +9565,8 @@ graphql-tools@^3.0.4: uuid "^3.1.0" graphql-type-json@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.2.1.tgz#d2c177e2f1b17d87f81072cd05311c0754baa420" + version "0.2.2" + resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.2.2.tgz#d4d3808fbf2ead9b6184fd338fe23794cd9715be" graphql@^14.1.1: version "14.1.1" @@ -9609,6 +9574,15 @@ graphql@^14.1.1: dependencies: iterall "^1.2.2" +gray-matter@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -9675,7 +9649,7 @@ handle-thing@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" -handlebars@*, handlebars@^4.0.3, handlebars@^4.0.5, handlebars@^4.0.6, handlebars@^4.1.0: +handlebars@^4.0.3, handlebars@^4.0.5, handlebars@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.1.tgz#6e4e41c18ebe7719ae4d38e5aca3d32fa3dd23d3" dependencies: @@ -9801,10 +9775,86 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hast-to-hyperscript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-5.0.0.tgz#5106cbba78edb7c95e2e8a49079371eb196c1ced" + dependencies: + comma-separated-tokens "^1.0.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.2.1" + unist-util-is "^2.0.0" + web-namespaces "^1.1.2" + +hast-util-from-parse5@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-4.0.2.tgz#b7164a7ffc88da4f751dc7c2f801ff8d7c143bab" + dependencies: + ccount "^1.0.3" + hastscript "^4.0.0" + property-information "^4.0.0" + web-namespaces "^1.1.2" + xtend "^4.0.1" + +hast-util-is-element@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.2.tgz#c23c9428b6a5a4e323bf9e16f87417476314981b" + hast-util-parse-selector@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.1.tgz#4ddbae1ae12c124e3eb91b581d2556441766f0ab" +hast-util-raw@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-4.0.0.tgz#2dc10c9facd9b810ea6ac51df251e6f87c2ed5b5" + dependencies: + hast-util-from-parse5 "^4.0.2" + hast-util-to-parse5 "^4.0.1" + html-void-elements "^1.0.1" + parse5 "^5.0.0" + unist-util-position "^3.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.1" + zwitch "^1.0.0" + +hast-util-to-html@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz#3666b05afb62bd69f8f5e6c94db04dea19438e2a" + dependencies: + ccount "^1.0.0" + comma-separated-tokens "^1.0.1" + hast-util-is-element "^1.0.0" + hast-util-whitespace "^1.0.0" + html-void-elements "^1.0.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + stringify-entities "^1.0.1" + unist-util-is "^2.0.0" + xtend "^4.0.1" + +hast-util-to-parse5@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-4.0.1.tgz#e52534b4bf40dc4e7d0428fcaf6d32bc75c62ee5" + dependencies: + hast-to-hyperscript "^5.0.0" + property-information "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.1" + zwitch "^1.0.0" + +hast-util-whitespace@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.2.tgz#c97153a3fbc9091a14fd823830a47724e7a1da99" + +hastscript@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-4.1.0.tgz#ea5593fa6f6709101fc790ced818393ddaa045ce" + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.2.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + hastscript@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.0.0.tgz#fee10382c1bc4ba3f1be311521d368c047d2c43a" @@ -9833,10 +9883,6 @@ hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" -highlight.js@^9.13.1: - version "9.15.6" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.6.tgz#72d4d8d779ec066af9a17cb14360c3def0aa57c4" - highlight.js@~9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" @@ -9969,6 +10015,10 @@ html-tokenize@^2.0.0: readable-stream "~1.0.27-1" through2 "~0.4.1" +html-void-elements@^1.0.0, html-void-elements@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.3.tgz#956707dbecd10cf658c92c5d27fee763aa6aa982" + html-webpack-plugin@4.0.0-alpha.2: version "4.0.0-alpha.2" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-alpha.2.tgz#7745967e389a57a098e26963f328ebe4c19b598d" @@ -10129,12 +10179,6 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" -icss-utils@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.0.tgz#339dbbffb9f8729a243b701e1c29d4cc58c52f0e" - dependencies: - postcss "^7.0.14" - identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" @@ -10516,7 +10560,7 @@ is-boolean-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" -is-buffer@^1.0.2, is-buffer@^1.1.5, is-buffer@~1.1.1: +is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -11406,9 +11450,9 @@ js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.10.0, js-yaml@^3.12.0, js-yaml@^3.5.2, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1: - version "3.12.2" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" +js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.12.0, js-yaml@^3.5.2, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1: + version "3.13.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -12009,7 +12053,7 @@ loader-runner@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" -loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" dependencies: @@ -12105,6 +12149,10 @@ lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + lodash.every@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7" @@ -12145,6 +12193,10 @@ lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + lodash.kebabcase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" @@ -12177,7 +12229,7 @@ lodash.merge@^4.6.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" -lodash.mergewith@^4.6.0: +lodash.mergewith@^4.6.0, lodash.mergewith@^4.6.1: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" @@ -12481,12 +12533,6 @@ macos-release@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.1.0.tgz#c87935891fbeb0dba7537913fc66f469fee9d662" -magic-string@^0.25.2: - version "0.25.2" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" - dependencies: - sourcemap-codec "^1.4.4" - make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -12579,10 +12625,6 @@ marked@^0.3.12, marked@^0.3.9: version "0.3.19" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" -marked@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.4.0.tgz#9ad2c2a7a1791f10a852e0112f77b571dce10c66" - marksy@^6.0.3: version "6.1.0" resolved "https://registry.yarnpkg.com/marksy/-/marksy-6.1.0.tgz#36482148a1115cc78570855f7ebd744bb453d5cc" @@ -12635,10 +12677,57 @@ mdast-util-compact@^1.0.0: dependencies: unist-util-visit "^1.1.0" +mdast-util-definitions@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.3.tgz#49f936b09207c45b438db19551652934312f04f0" + dependencies: + unist-util-visit "^1.0.0" + +mdast-util-to-hast@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz#132001b266031192348d3366a6b011f28e54dc40" + dependencies: + collapse-white-space "^1.0.0" + detab "^2.0.0" + mdast-util-definitions "^1.2.0" + mdurl "^1.0.1" + trim "0.0.1" + trim-lines "^1.0.0" + unist-builder "^1.0.1" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^1.1.0" + xtend "^4.0.1" + +mdast-util-to-nlcst@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.2.tgz#71972eecd64dc03d5cf2713f08555e2d9e2d7d10" + dependencies: + nlcst-to-string "^2.0.0" + repeat-string "^1.5.2" + unist-util-position "^3.0.0" + vfile-location "^2.0.0" + +mdast-util-to-string@^1.0.2, mdast-util-to-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.5.tgz#3552b05428af22ceda34f156afe62ec8e6d731ca" + +mdast-util-toc@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-2.1.0.tgz#82b6b218577bb0e67b23abf5c3f7ac73a4b5389f" + dependencies: + github-slugger "^1.1.1" + mdast-util-to-string "^1.0.2" + unist-util-visit "^1.1.0" + mdn-data@~1.1.0: version "1.1.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + meant@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" @@ -13146,6 +13235,10 @@ nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" +nlcst-to-string@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.2.tgz#7125af4d4d369850c697192a658f01f36af9937b" + no-case@^2.2.0, no-case@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" @@ -13496,7 +13589,7 @@ npm-run-path@^2.0.0: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^1.0.2, nth-check@~1.0.1: +nth-check@^1.0.1, nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" dependencies: @@ -13566,7 +13659,7 @@ object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" -object-path@^0.11.2: +object-path@^0.11.2, object-path@^0.11.4: version "0.11.4" resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" @@ -13983,7 +14076,7 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@2.1.x, param-case@^2.1.0, param-case@^2.1.1: +param-case@2.1.x, param-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" dependencies: @@ -14015,6 +14108,15 @@ parse-domain@^2.0.0: mkdirp "^0.5.1" mocha "^5.2.0" +parse-english@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.1.1.tgz#2f75872e617769d857d9b6992dcde2a891f1b2d3" + dependencies: + nlcst-to-string "^2.0.0" + parse-latin "^4.0.0" + unist-util-modify-children "^1.0.0" + unist-util-visit-children "^1.0.0" + parse-entities@^1.0.2, parse-entities@^1.1.0, parse-entities@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69" @@ -14060,6 +14162,14 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-latin@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.1.1.tgz#3a3edef405b2d5dce417b7157d3d8a5c7cdfab1d" + dependencies: + nlcst-to-string "^2.0.0" + unist-util-modify-children "^1.0.0" + unist-util-visit-children "^1.0.0" + parse-node-version@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" @@ -14108,7 +14218,7 @@ parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" -parse5@5.1.0: +parse5@5.1.0, parse5@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" @@ -14853,12 +14963,6 @@ postcss-modules-extract-imports@^1.2.0: dependencies: postcss "^6.0.1" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - dependencies: - postcss "^7.0.5" - postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" @@ -14866,14 +14970,6 @@ postcss-modules-local-by-default@^1.2.0: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-local-by-default@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - postcss-value-parser "^3.3.1" - postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" @@ -14881,13 +14977,6 @@ postcss-modules-scope@^1.1.0: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-scope@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" @@ -14895,13 +14984,6 @@ postcss-modules-values@^1.3.0: icss-replace-symbols "^1.1.0" postcss "^6.0.1" -postcss-modules-values@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^7.0.6" - postcss-nesting@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.0.tgz#6e26a770a0c8fcba33782a6b6f350845e1a448f6" @@ -15190,14 +15272,6 @@ postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-sel indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss-svgo@^2.1.1: version "2.1.6" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" @@ -15273,7 +15347,7 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.17, postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6, postcss@^7.0.7: +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.7: version "7.0.14" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" dependencies: @@ -15337,12 +15411,6 @@ pretty-format@^23.0.1, pretty-format@^23.6.0: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -prismjs@1.6: - version "1.6.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.6.0.tgz#118d95fb7a66dba2272e343b345f5236659db365" - optionalDependencies: - clipboard "^1.5.5" - prismjs@^1.8.4, prismjs@~1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" @@ -15442,6 +15510,12 @@ prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, object-assign "^4.1.1" react-is "^16.8.1" +property-information@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-4.2.0.tgz#f0e66e07cbd6fed31d96844d958d153ad3eb486e" + dependencies: + xtend "^4.0.1" + property-information@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.0.1.tgz#c3b09f4f5750b1634c0b24205adbf78f18bdf94f" @@ -15562,8 +15636,8 @@ querystring@0.2.0, querystring@^0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" querystringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef" + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" quick-lru@^1.0.0: version "1.1.0" @@ -15676,8 +15750,8 @@ react-bootstrap-switch@^15.5.3: resolved "https://registry.yarnpkg.com/react-bootstrap-switch/-/react-bootstrap-switch-15.5.3.tgz#97287791d4ec0d1892d142542e7e5248002b1251" react-bootstrap-typeahead@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/react-bootstrap-typeahead/-/react-bootstrap-typeahead-3.4.1.tgz#484c3c1be635c49898ca8dce59a6c71f2fce5888" + version "3.4.2" + resolved "https://registry.yarnpkg.com/react-bootstrap-typeahead/-/react-bootstrap-typeahead-3.4.2.tgz#d0090488854a8597387007ced641dd5fbfc901f7" dependencies: classnames "^2.2.0" create-react-context "^0.2.3" @@ -15832,15 +15906,13 @@ react-diff-view@^1.8.1: lodash.mapvalues "^4.6.0" warning "^4.0.1" -"react-docgen-displayname-handler@ ^2.1.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-docgen-displayname-handler/-/react-docgen-displayname-handler-2.1.1.tgz#a7863a2cc0058ac3c72e6348fa5e40cc4278c5ae" - dependencies: - ast-types "0.11.5" +react-docgen-typescript@^1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-1.12.3.tgz#fe62a5ce82e93573e316366e53adfe8273121c70" -react-docgen@3.0.0-rc.2: - version "3.0.0-rc.2" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-3.0.0-rc.2.tgz#5939c64699fd9959da6d97d890f7b648e542dbcc" +react-docgen@^3.0.0-beta11: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-3.0.0.tgz#79c6e1b1870480c3c2bc1a65bede0577a11c38cd" dependencies: "@babel/parser" "^7.1.3" "@babel/runtime" "^7.0.0" @@ -15850,19 +15922,19 @@ react-docgen@3.0.0-rc.2: node-dir "^0.1.10" recast "^0.16.0" -react-docgen@^3.0.0-beta11: - version "3.0.0" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-3.0.0.tgz#79c6e1b1870480c3c2bc1a65bede0577a11c38cd" +react-docgen@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-4.1.0.tgz#218887feba5b2c36af337879a27e74bda90ed7cb" dependencies: - "@babel/parser" "^7.1.3" + "@babel/core" "^7.0.0" "@babel/runtime" "^7.0.0" async "^2.1.4" commander "^2.19.0" - doctrine "^2.0.0" + doctrine "^3.0.0" node-dir "^0.1.10" - recast "^0.16.0" + recast "^0.17.3" -react-dom@^16.2.0, react-dom@^16.6.3, react-dom@~16.8.4: +react-dom@^16.2.0, react-dom@^16.8.4, react-dom@~16.8.4: version "16.8.4" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.4.tgz#1061a8e01a2b3b0c8160037441c3bf00a0e3bc48" dependencies: @@ -15948,10 +16020,6 @@ react-icons@^2.2.7: dependencies: react-icon-base "2.1.0" -react-icons@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.5.0.tgz#a6135480e3bcbc63f5dd045193ef2a814263d8d1" - react-inspector@^2.2.2: version "2.3.1" resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-2.3.1.tgz#f0eb7f520669b545b441af9d38ec6d706e5f649c" @@ -15968,18 +16036,6 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" -react-live@^1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/react-live/-/react-live-1.12.0.tgz#2876d4e913331002b66dfa73cf58051376bc2518" - dependencies: - buble "^0.19.3" - core-js "^2.4.1" - create-react-context "^0.2.3" - dom-iterator "^1.0.0" - prismjs "1.6" - prop-types "^15.5.8" - unescape "^0.2.0" - react-modal@^3.3.2: version "3.8.1" resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.8.1.tgz#7300f94a6f92a2e17994de0be6ccb61734464c9e" @@ -16091,12 +16147,10 @@ react-side-effect@^1.1.0: shallowequal "^1.0.1" react-split-pane@^0.1.77: - version "0.1.85" - resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.85.tgz#64819946a99b617ffa2d20f6f45a0056b6ee4faa" + version "0.1.87" + resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.87.tgz#a7027ae554abfacca35f5f780288b07fe4ec4cbd" dependencies: prop-types "^15.5.10" - react "^16.6.3" - react-dom "^16.6.3" react-lifecycles-compat "^3.0.4" react-style-proptype "^3.0.0" @@ -16169,7 +16223,7 @@ react-wooden-tree@^1.1.2: react "^16.2.0" react-dom "^16.2.0" -react@^16.2.0, react@^16.6.3, react@~16.8.4: +react@^16.2.0, react@^16.8.4, react@~16.8.4: version "16.8.4" resolved "https://registry.yarnpkg.com/react/-/react-16.8.4.tgz#fdf7bd9ae53f03a9c4cd1a371432c206be1c4768" dependencies: @@ -16351,6 +16405,15 @@ recast@^0.16.0: private "~0.1.5" source-map "~0.6.1" +recast@^0.17.3: + version "0.17.4" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.17.4.tgz#b67f8abbfd4a1d8841485f03f41f2ccf2e051d88" + dependencies: + ast-types "0.12.2" + esprima "~4.0.0" + private "^0.1.8" + source-map "~0.6.1" + recast@~0.11.12: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -16469,6 +16532,10 @@ regenerator-runtime@^0.12.0: version "0.12.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -16530,7 +16597,7 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.1.3, regexpu-core@^4.2.0, regexpu-core@^4.5.4: +regexpu-core@^4.1.3, regexpu-core@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" dependencies: @@ -16542,8 +16609,8 @@ regexpu-core@^4.1.3, regexpu-core@^4.2.0, regexpu-core@^4.5.4: unicode-match-property-value-ecmascript "^1.1.0" registry-auth-token@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" dependencies: rc "^1.1.6" safe-buffer "^5.0.1" @@ -16591,6 +16658,26 @@ relay-runtime@2.0.0: "@babel/runtime" "^7.0.0" fbjs "^1.0.0" +remark-parse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + remark-parse@^6.0.0: version "6.0.3" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" @@ -16611,6 +16698,31 @@ remark-parse@^6.0.0: vfile-location "^2.0.0" xtend "^4.0.1" +remark-retext@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-3.1.2.tgz#983003d7495cf9198aa450c5ae5a7737011eec5f" + dependencies: + mdast-util-to-nlcst "^3.2.0" + +remark-stringify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + remark-stringify@^6.0.0: version "6.0.4" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088" @@ -16638,6 +16750,14 @@ remark@^10.0.1: remark-stringify "^6.0.0" unified "^7.0.0" +remark@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" + dependencies: + remark-parse "^5.0.0" + remark-stringify "^5.0.0" + unified "^6.0.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -16833,6 +16953,13 @@ ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" +retext-english@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.2.tgz#efc239c445b112d13f3f511b1856abc2b5476cb4" + dependencies: + parse-english "^4.0.0" + unherit "^1.0.4" + retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" @@ -16859,7 +16986,7 @@ right-pad@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" -rimraf@2, rimraf@2.6.3, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.0, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: +rimraf@2, rimraf@2.6.3, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.0, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" dependencies: @@ -16958,6 +17085,21 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.2.3" +sanitize-html@^1.18.2: + version "1.20.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.20.0.tgz#9a602beb1c9faf960fb31f9890f61911cc4d9156" + dependencies: + chalk "^2.4.1" + htmlparser2 "^3.10.0" + lodash.clonedeep "^4.5.0" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.mergewith "^4.6.1" + postcss "^7.0.5" + srcset "^1.0.0" + xtend "^4.0.1" + sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -17040,6 +17182,13 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -17243,7 +17392,7 @@ shelljs@0.7.6: interpret "^1.0.0" rechoir "^0.6.2" -shelljs@^0.8.1, shelljs@^0.8.2: +shelljs@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" dependencies: @@ -17513,10 +17662,6 @@ source-map@^0.7.2, source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" -sourcemap-codec@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" - space-separated-tokens@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412" @@ -17598,10 +17743,21 @@ split@^1.0.0: dependencies: through "2" +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" +srcset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/srcset/-/srcset-1.0.0.tgz#a5669de12b42f3b1d5e83ed03c71046fc48f41ef" + dependencies: + array-uniq "^1.0.2" + number-is-nan "^1.0.0" + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -17875,6 +18031,10 @@ strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + strip-bom@3.0.0, strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -17943,6 +18103,12 @@ style-search@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" +style-to-object@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.2.tgz#3ea3b276bd3fa9da1195fcdcdd03bc52aa2aae01" + dependencies: + css "2.2.4" + styled-system@^3.1.11: version "3.2.1" resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-3.2.1.tgz#491e1e6f88d7ee021f6f49376f12852cde8007cb" @@ -18523,6 +18689,10 @@ tree-kill@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" +trim-lines@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.1.tgz#da738ff58fa74817588455e30b11b85289f2a396" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -18672,32 +18842,6 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -typedoc-default-themes@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz#6dc2433e78ed8bea8e887a3acde2f31785bd6227" - -typedoc@^0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.14.2.tgz#769f457f4f9e4bdb8b5f3b177c86b6a31d8c3dc3" - dependencies: - "@types/fs-extra" "^5.0.3" - "@types/handlebars" "^4.0.38" - "@types/highlight.js" "^9.12.3" - "@types/lodash" "^4.14.110" - "@types/marked" "^0.4.0" - "@types/minimatch" "3.0.3" - "@types/shelljs" "^0.8.0" - fs-extra "^7.0.0" - handlebars "^4.0.6" - highlight.js "^9.13.1" - lodash "^4.17.10" - marked "^0.4.0" - minimatch "^3.0.0" - progress "^2.0.0" - shelljs "^0.8.2" - typedoc-default-themes "^0.5.0" - typescript "3.2.x" - typescript-eslint-parser@^16.0.0: version "16.0.1" resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-16.0.1.tgz#b40681c7043b222b9772748b700a000b241c031b" @@ -18709,10 +18853,6 @@ typescript@3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5" -typescript@3.2.x: - version "3.2.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.4.tgz#c585cb952912263d915b462726ce244ba510ef3d" - typescript@^2.5.1: version "2.9.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" @@ -18736,7 +18876,7 @@ uglify-es@^3.3.4: commander "~2.13.0" source-map "~0.6.1" -uglify-js@3.4.x, uglify-js@^3.1.4: +uglify-js@3.4.x: version "3.4.10" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" dependencies: @@ -18752,6 +18892,13 @@ uglify-js@^2.8.29: optionalDependencies: uglify-to-browserify "~1.0.0" +uglify-js@^3.1.4: + version "3.5.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.1.tgz#29cb91e76c9941899bc74b075ad0e6da9250abd5" + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" @@ -18795,14 +18942,17 @@ uncontrollable@^5.0.0: dependencies: invariant "^2.2.4" +underscore.string@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" + dependencies: + sprintf-js "^1.0.3" + util-deprecate "^1.0.2" + underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" -unescape@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/unescape/-/unescape-0.2.0.tgz#b78b9b60c86f1629df181bf53eee3bc8d6367ddf" - unherit@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" @@ -18835,6 +18985,17 @@ unidiff@^1.0.1: dependencies: diff "^2.2.2" +unified@^6.0.0, unified@^6.1.5: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + unified@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13" @@ -18883,33 +19044,65 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +unist-builder@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.3.tgz#ab0f9d0f10936b74f3e913521955b0478e0ff036" + dependencies: + object-assign "^4.1.0" + unist-util-find-all-after@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" dependencies: unist-util-is "^2.0.0" +unist-util-generated@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.3.tgz#ca650470aef2fbcc5fe54c465bc26b41ca109e2b" + unist-util-is@^2.0.0, unist-util-is@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" -unist-util-remove-position@^1.0.0: +unist-util-modify-children@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.3.tgz#d764a935f612dfb21b1bb92b0ea24321dc19a5f7" + dependencies: + array-iterate "^1.0.0" + +unist-util-position@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.2.tgz#80ad4a05efc4ab01a66886cc70493893ba73c5eb" + +unist-util-remove-position@^1.0.0, unist-util-remove-position@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" dependencies: unist-util-visit "^1.1.0" +unist-util-select@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-1.5.0.tgz#a93c2be8c0f653827803b81331adec2aa24cd933" + dependencies: + css-selector-parser "^1.1.0" + debug "^2.2.0" + nth-check "^1.0.1" + unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" +unist-util-visit-children@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.2.tgz#bd78b53db9644b9c339ac502854f15471f964f5b" + unist-util-visit-parents@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" dependencies: unist-util-is "^2.1.2" -unist-util-visit@^1.1.0: +unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" dependencies: @@ -19169,6 +19362,15 @@ vfile-message@^1.0.0: dependencies: unist-util-stringify-position "^1.1.1" +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + vfile@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" @@ -19522,6 +19724,10 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web-namespaces@^1.0.0, web-namespaces@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.2.tgz#c8dc267ab639505276bae19e129dbd6ae72b22b4" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -20335,3 +20541,7 @@ zen-observable-ts@^0.8.18: zen-observable@^0.8.0: version "0.8.13" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.13.tgz#a9f1b9dbdfd2d60a08761ceac6a861427d44ae2e" + +zwitch@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.3.tgz#159fae4b3f737db1e42bf321d3423e4c96688a18" From ec899972a75b8d6d71b87f4c4dadbde0b30a8a14 Mon Sep 17 00:00:00 2001 From: redallen Date: Thu, 21 Mar 2019 14:31:26 -0400 Subject: [PATCH 02/46] add nav --- .../src/components/Wizard/Wizard.docs.js | 20 -- .../src/components/Wizard/Wizard.md | 285 ++++++++++++++++++ .../Wizard/examples/SimpleWizard.js | 68 ----- .../Wizard/examples/Steps/SampleFormOne.js | 42 --- .../Wizard/examples/Steps/SampleFormTwo.js | 42 --- .../Wizard/examples/ValidationWizard.js | 134 -------- packages/patternfly-4/react-docs/README.md | 5 +- .../patternfly-4/react-docs/gatsby-browser.js | 2 +- .../patternfly-4/react-docs/gatsby-node.js | 29 +- packages/patternfly-4/react-docs/package.json | 1 + .../gatsby-node.js | 2 +- .../react-docs/src/components/header.js | 42 --- .../react-docs/src/components/layout.js | 52 ---- .../react-docs/src/components/nav/nav.js | 46 +++ .../react-docs/src/components/nav/navGroup.js | 0 .../react-docs/src/components/nav/navItem.js | 58 ++++ .../src/components/sidebarLayout.js | 36 +++ .../react-docs/src/helpers/navHelpers.js | 11 + .../react-docs/src/pages/index.js | 6 +- .../react-docs/src/pages/page-2.js | 6 +- .../react-docs/src/templates/helpers.js | 26 ++ .../src/templates/markdownTemplate.js | 41 +-- 22 files changed, 507 insertions(+), 447 deletions(-) delete mode 100644 packages/patternfly-4/react-core/src/components/Wizard/Wizard.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Wizard/Wizard.md delete mode 100644 packages/patternfly-4/react-core/src/components/Wizard/examples/SimpleWizard.js delete mode 100644 packages/patternfly-4/react-core/src/components/Wizard/examples/Steps/SampleFormOne.js delete mode 100644 packages/patternfly-4/react-core/src/components/Wizard/examples/Steps/SampleFormTwo.js delete mode 100644 packages/patternfly-4/react-core/src/components/Wizard/examples/ValidationWizard.js delete mode 100644 packages/patternfly-4/react-docs/src/components/header.js delete mode 100644 packages/patternfly-4/react-docs/src/components/layout.js create mode 100644 packages/patternfly-4/react-docs/src/components/nav/nav.js create mode 100644 packages/patternfly-4/react-docs/src/components/nav/navGroup.js create mode 100644 packages/patternfly-4/react-docs/src/components/nav/navItem.js create mode 100644 packages/patternfly-4/react-docs/src/components/sidebarLayout.js create mode 100644 packages/patternfly-4/react-docs/src/helpers/navHelpers.js create mode 100644 packages/patternfly-4/react-docs/src/templates/helpers.js diff --git a/packages/patternfly-4/react-core/src/components/Wizard/Wizard.docs.js b/packages/patternfly-4/react-core/src/components/Wizard/Wizard.docs.js deleted file mode 100644 index b39bedd3899..00000000000 --- a/packages/patternfly-4/react-core/src/components/Wizard/Wizard.docs.js +++ /dev/null @@ -1,20 +0,0 @@ -import { Wizard } from '@patternfly/react-core'; -import SimpleWizard from './examples/SimpleWizard'; -import ValidationWizard from './examples/ValidationWizard'; -import SampleFormOne from './examples/Steps/SampleFormOne'; -import SampleFormTwo from './examples/Steps/SampleFormTwo'; - -export default { - title: 'Wizard', - components: { - Wizard - }, - types: { - WizardStepFunctionType: - '(newStep: { id?: string | number; name: string; }, prevStep: { prevId?: string | number; prevName: string; }) => void' - }, - examples: [ - { component: SimpleWizard, title: 'Simple Wizard' }, - { component: ValidationWizard, title: 'Validation Wizard', liveScope: { SampleFormOne, SampleFormTwo } } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Wizard/Wizard.md b/packages/patternfly-4/react-core/src/components/Wizard/Wizard.md new file mode 100644 index 00000000000..da14c000e8d --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Wizard/Wizard.md @@ -0,0 +1,285 @@ +--- +title: "Wizard" +cssPrefix: "pf-c-wizard" +--- +### Simple Wizard +```js +import React from 'react'; +import { Button, Wizard, BackgroundImageSrc } from '@patternfly/react-core'; + +class SimpleWizard extends React.Component { + state = { + isOpen: false + }; + + toggleOpen = () => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + + render() { + const { isOpen } = this.state; + + const images = { + [BackgroundImageSrc.xs]: '/assets/images/pfbg_576.jpg', + [BackgroundImageSrc.xs2x]: '/assets/images/pfbg_576@2x.jpg', + [BackgroundImageSrc.sm]: '/assets/images/pfbg_768.jpg', + [BackgroundImageSrc.sm2x]: '/assets/images/pfbg_768@2x.jpg', + [BackgroundImageSrc.lg]: '/assets/images/pfbg_1200.jpg', + [BackgroundImageSrc.filter]: '/assets/images/background-filter.svg#image_overlay' + }; + + const steps = [ + { name: 'Step 1', component:

    Step 1

    }, + { + name: 'Step 2', + steps: [ + { name: 'Step 2 - A', component:

    Step 2 - A

    }, + { name: 'Step 2 - B', component:

    Step 2 - B

    } + ] + }, + { name: 'Step 3', component:

    Step 3

    }, + { + name: 'Step 4', + steps: [ + { name: 'Step 4 - A', component:

    Step 4 - A

    }, + { name: 'Step 4 - B', component:

    Step 4 - B

    } + ] + }, + { name: 'Final Step', component:

    Final Step

    , hideCancelButton: true, hideBackButton: true } + ]; + + return ( + + + {isOpen && ( + + )} + + ); + } +} +``` + +### Validation Wizard +```js +import React from 'react'; +import { Button, Wizard, BackgroundImageSrc } from '@patternfly/react-core'; +import React from 'react'; +import { Form, FormGroup, TextInput } from '@patternfly/react-core'; + +class SampleFormOne extends React.Component { + state = { + value: this.props.formValue, + isValid: this.props.isFormValid + }; + + handleTextInputChange = value => { + const isValid = /^\d+$/.test(value); + this.setState({ value, isValid }); + this.props.onChange(isValid, value); + }; + + render() { + const { value, isValid } = this.state; + + return ( +
    + + + +
    + ); + } +} + +class SampleFormTwo extends React.Component { + state = { + value: this.props.formValue, + isValid: this.props.isFormValid + }; + + handleTextInputChange = value => { + const isValid = /^\d+$/.test(value); + this.setState({ value, isValid }); + this.props.onChange(isValid, value); + }; + + render() { + const { value, isValid } = this.state; + + return ( +
    + + + +
    + ); + } +} + +class ValidationWizard extends React.Component { + state = { + isOpen: false, + isFormValidA: false, + formValueA: 'Five', + isFormValidB: false, + formValueB: 'Six', + allStepsValid: false + }; + + toggleOpen = () => { + this.setState(({ isOpen }) => ({ + isOpen: !isOpen + })); + }; + + onFormChangeA = (isValid, value) => { + this.setState( + { + isFormValidA: isValid, + formValueA: value + }, + this.areAllStepsValid + ); + }; + + onFormChangeB = (isValid, value) => { + this.setState( + { + isFormValidB: isValid, + formValueB: value + }, + this.areAllStepsValid + ); + }; + + areAllStepsValid = () => { + this.setState({ + allStepsValid: this.state.isFormValidA && this.state.isFormValidB + }); + }; + + onNext = ({ id, name }, { prevId, prevName }) => { + console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); + this.areAllStepsValid(); + }; + + onBack = ({ id, name }, { prevId, prevName }) => { + console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); + this.areAllStepsValid(); + }; + + onGoToStep = ({ id, name }, { prevId, prevName }) => { + console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); + }; + + onSave = () => { + console.log('Saved and closed the wizard'); + this.setState({ + isOpen: false + }); + }; + + render() { + const { isOpen, isFormValidA, isFormValidB, formValueA, formValueB, allStepsValid } = this.state; + + const images = { + [BackgroundImageSrc.xs]: '/assets/images/pfbg_576.jpg', + [BackgroundImageSrc.xs2x]: '/assets/images/pfbg_576@2x.jpg', + [BackgroundImageSrc.sm]: '/assets/images/pfbg_768.jpg', + [BackgroundImageSrc.sm2x]: '/assets/images/pfbg_768@2x.jpg', + [BackgroundImageSrc.lg]: '/assets/images/pfbg_1200.jpg', + [BackgroundImageSrc.filter]: '/assets/images/background-filter.svg#image_overlay' + }; + + const steps = [ + { id: 1, name: 'Information', component:

    Step 1

    }, + { + name: 'Configuration', + steps: [ + { + id: 2, + name: 'Substep A with validation', + component: ( + + ), + enableNext: isFormValidA + }, + { + id: 3, + name: 'Substep B with validation', + component: ( + + ), + enableNext: isFormValidB + }, + { id: 4, name: 'Substep C', component:

    Substep C

    } + ] + }, + { id: 5, name: 'Additional', component:

    Step 3

    , enableNext: allStepsValid }, + { id: 6, name: 'Review', component:

    Step 4

    } + ]; + + return ( + + + {isOpen && ( + + )} + + ); + } +} +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Wizard/examples/SimpleWizard.js b/packages/patternfly-4/react-core/src/components/Wizard/examples/SimpleWizard.js deleted file mode 100644 index 390eec1a32f..00000000000 --- a/packages/patternfly-4/react-core/src/components/Wizard/examples/SimpleWizard.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import { Button, Wizard, BackgroundImageSrc } from '@patternfly/react-core'; - -class SimpleWizard extends React.Component { - state = { - isOpen: false - }; - - toggleOpen = () => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - - const images = { - [BackgroundImageSrc.xs]: '/assets/images/pfbg_576.jpg', - [BackgroundImageSrc.xs2x]: '/assets/images/pfbg_576@2x.jpg', - [BackgroundImageSrc.sm]: '/assets/images/pfbg_768.jpg', - [BackgroundImageSrc.sm2x]: '/assets/images/pfbg_768@2x.jpg', - [BackgroundImageSrc.lg]: '/assets/images/pfbg_1200.jpg', - [BackgroundImageSrc.filter]: '/assets/images/background-filter.svg#image_overlay' - }; - - const steps = [ - { name: 'Step 1', component:

    Step 1

    }, - { - name: 'Step 2', - steps: [ - { name: 'Step 2 - A', component:

    Step 2 - A

    }, - { name: 'Step 2 - B', component:

    Step 2 - B

    } - ] - }, - { name: 'Step 3', component:

    Step 3

    }, - { - name: 'Step 4', - steps: [ - { name: 'Step 4 - A', component:

    Step 4 - A

    }, - { name: 'Step 4 - B', component:

    Step 4 - B

    } - ] - }, - { name: 'Final Step', component:

    Final Step

    , hideCancelButton: true, hideBackButton: true } - ]; - - return ( - - - {isOpen && ( - - )} - - ); - } -} - -export default SimpleWizard; diff --git a/packages/patternfly-4/react-core/src/components/Wizard/examples/Steps/SampleFormOne.js b/packages/patternfly-4/react-core/src/components/Wizard/examples/Steps/SampleFormOne.js deleted file mode 100644 index 6aa66ce6ae4..00000000000 --- a/packages/patternfly-4/react-core/src/components/Wizard/examples/Steps/SampleFormOne.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { Form, FormGroup, TextInput } from '@patternfly/react-core'; - -class SampleFormOne extends React.Component { - state = { - value: this.props.formValue, - isValid: this.props.isFormValid - }; - - handleTextInputChange = value => { - const isValid = /^\d+$/.test(value); - this.setState({ value, isValid }); - this.props.onChange(isValid, value); - }; - - render() { - const { value, isValid } = this.state; - - return ( -
    - - - -
    - ); - } -} - -export default SampleFormOne; diff --git a/packages/patternfly-4/react-core/src/components/Wizard/examples/Steps/SampleFormTwo.js b/packages/patternfly-4/react-core/src/components/Wizard/examples/Steps/SampleFormTwo.js deleted file mode 100644 index a048070a6ea..00000000000 --- a/packages/patternfly-4/react-core/src/components/Wizard/examples/Steps/SampleFormTwo.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { Form, FormGroup, TextInput } from '@patternfly/react-core'; - -class SampleFormTwo extends React.Component { - state = { - value: this.props.formValue, - isValid: this.props.isFormValid - }; - - handleTextInputChange = value => { - const isValid = /^\d+$/.test(value); - this.setState({ value, isValid }); - this.props.onChange(isValid, value); - }; - - render() { - const { value, isValid } = this.state; - - return ( -
    - - - -
    - ); - } -} - -export default SampleFormTwo; diff --git a/packages/patternfly-4/react-core/src/components/Wizard/examples/ValidationWizard.js b/packages/patternfly-4/react-core/src/components/Wizard/examples/ValidationWizard.js deleted file mode 100644 index 92ffb6ec2f6..00000000000 --- a/packages/patternfly-4/react-core/src/components/Wizard/examples/ValidationWizard.js +++ /dev/null @@ -1,134 +0,0 @@ -import React from 'react'; -import { Button, Wizard, BackgroundImageSrc } from '@patternfly/react-core'; -import SampleFormOne from './Steps/SampleFormOne'; -import SampleFormTwo from './Steps/SampleFormTwo'; - -class ValidationWizard extends React.Component { - state = { - isOpen: false, - isFormValidA: false, - formValueA: 'Five', - isFormValidB: false, - formValueB: 'Six', - allStepsValid: false - }; - - toggleOpen = () => { - this.setState(({ isOpen }) => ({ - isOpen: !isOpen - })); - }; - - onFormChangeA = (isValid, value) => { - this.setState( - { - isFormValidA: isValid, - formValueA: value - }, - this.areAllStepsValid - ); - }; - - onFormChangeB = (isValid, value) => { - this.setState( - { - isFormValidB: isValid, - formValueB: value - }, - this.areAllStepsValid - ); - }; - - areAllStepsValid = () => { - this.setState({ - allStepsValid: this.state.isFormValidA && this.state.isFormValidB - }); - }; - - onNext = ({ id, name }, { prevId, prevName }) => { - console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); - this.areAllStepsValid(); - }; - - onBack = ({ id, name }, { prevId, prevName }) => { - console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); - this.areAllStepsValid(); - }; - - onGoToStep = ({ id, name }, { prevId, prevName }) => { - console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); - }; - - onSave = () => { - console.log('Saved and closed the wizard'); - this.setState({ - isOpen: false - }); - }; - - render() { - const { isOpen, isFormValidA, isFormValidB, formValueA, formValueB, allStepsValid } = this.state; - - const images = { - [BackgroundImageSrc.xs]: '/assets/images/pfbg_576.jpg', - [BackgroundImageSrc.xs2x]: '/assets/images/pfbg_576@2x.jpg', - [BackgroundImageSrc.sm]: '/assets/images/pfbg_768.jpg', - [BackgroundImageSrc.sm2x]: '/assets/images/pfbg_768@2x.jpg', - [BackgroundImageSrc.lg]: '/assets/images/pfbg_1200.jpg', - [BackgroundImageSrc.filter]: '/assets/images/background-filter.svg#image_overlay' - }; - - const steps = [ - { id: 1, name: 'Information', component:

    Step 1

    }, - { - name: 'Configuration', - steps: [ - { - id: 2, - name: 'Substep A with validation', - component: ( - - ), - enableNext: isFormValidA - }, - { - id: 3, - name: 'Substep B with validation', - component: ( - - ), - enableNext: isFormValidB - }, - { id: 4, name: 'Substep C', component:

    Substep C

    } - ] - }, - { id: 5, name: 'Additional', component:

    Step 3

    , enableNext: allStepsValid }, - { id: 6, name: 'Review', component:

    Step 4

    } - ]; - - return ( - - - {isOpen && ( - - )} - - ); - } -} - -export default ValidationWizard; diff --git a/packages/patternfly-4/react-docs/README.md b/packages/patternfly-4/react-docs/README.md index fb69781ad83..e7e8c75efe4 100644 --- a/packages/patternfly-4/react-docs/README.md +++ b/packages/patternfly-4/react-docs/README.md @@ -4,8 +4,9 @@ Gatsby is a static site generator that doubles as a hot-module reloader for buil We have to more or less build our own version of [React Styleguidist](https://github.com/styleguidist/react-styleguidist). To enable hot-module reloading and other async efficiences, we have to build our own data pipeline and transformations through Gatsby's GraphQL. -1. **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you’d like to include, etc. (Check out the [config docs](https://www.gatsbyjs.org/docs/gatsby-config/) for more detail). - - We include our own plugins for transforming component source files into metadata via [React Docgen](https://github.com/reactjs/react-docgen) and [React Docgen Typescript](https://github.com/styleguidist/react-docgen-typescript). +1. **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify which Gatsby plugins you’d like to include, etc. (Check out the [config docs](https://www.gatsbyjs.org/docs/gatsby-config/) for more detail). + - We include our own plugin `gatsby-transformer-react-docgen-typescript` for transforming component source files into metadata via [React Docgen](https://github.com/reactjs/react-docgen) and [React Docgen Typescript](https://github.com/styleguidist/react-docgen-typescript). + - We use `gatsby-transformer-remark` to parse the *.md files into HTML 2. **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby Node APIs](https://www.gatsbyjs.org/docs/node-apis/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process. diff --git a/packages/patternfly-4/react-docs/gatsby-browser.js b/packages/patternfly-4/react-docs/gatsby-browser.js index f9458f7b6c3..c73b3f70d24 100644 --- a/packages/patternfly-4/react-docs/gatsby-browser.js +++ b/packages/patternfly-4/react-docs/gatsby-browser.js @@ -1 +1 @@ -import '../react-core/dist/styles/base.css'; +// import '@patternfly/react-core/styles/base.css'; diff --git a/packages/patternfly-4/react-docs/gatsby-node.js b/packages/patternfly-4/react-docs/gatsby-node.js index e5e7b395aec..029c6fb4ef8 100644 --- a/packages/patternfly-4/react-docs/gatsby-node.js +++ b/packages/patternfly-4/react-docs/gatsby-node.js @@ -4,6 +4,7 @@ * See: https://www.gatsbyjs.org/docs/node-apis/ */ +const helpers = require("./src/helpers/navHelpers") const path = require("path") exports.createPages = ({ actions, graphql }) => { @@ -12,32 +13,24 @@ exports.createPages = ({ actions, graphql }) => { const blogPostTemplate = path.resolve(`./src/templates/markdownTemplate.js`) return graphql(` - { - allMarkdownRemark { - edges { - node { - fileAbsolutePath - htmlAst - frontmatter { - title - cssPrefix - } - } - } +{ + allMarkdownRemark { + edges { + node { + fileAbsolutePath } } + } +} `).then(result => { if (result.errors) { return Promise.reject(result.errors) } result.data.allMarkdownRemark.edges.forEach(({ node }) => { - const extension = path.extname(node.fileAbsolutePath); - const componentName = path.basename(node.fileAbsolutePath, extension).toLowerCase().trim(); - const split = node.fileAbsolutePath.split('/'); - const folderName = split[split.length - 2]; // i.e. 'Alert' in '/ff/ff/Alert/AlertSomething.js' + const pagePath = helpers.getPagePath(node.fileAbsolutePath); // node.fileAbsolutePath // + const folderName = helpers.getParentFolder(node.fileAbsolutePath); // 'asdf' // - const pagePath = '/components/' + componentName console.log('adding page', pagePath); createPage({ path: pagePath, @@ -49,4 +42,4 @@ exports.createPages = ({ actions, graphql }) => { }) }) }) -} \ No newline at end of file +}; diff --git a/packages/patternfly-4/react-docs/package.json b/packages/patternfly-4/react-docs/package.json index 1f3d32dd12d..95ee57e530a 100644 --- a/packages/patternfly-4/react-docs/package.json +++ b/packages/patternfly-4/react-docs/package.json @@ -11,6 +11,7 @@ "build": "gatsby build --prefix-paths" }, "dependencies": { + "@patternfly/react-tokens": "^2.2.0", "gatsby": "^2.1.37", "gatsby-image": "^2.0.34", "gatsby-plugin-react-helmet": "^3.0.10", diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js index 1f083e4ca47..9532b0a5eb7 100644 --- a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js @@ -78,7 +78,7 @@ async function onCreateNode({ parsed = docgenJavascript.parse(sourceText); } } catch (err) { - console.warn("Can't find a component in", node.absolutePath); + console.warn("No component found in", node.absolutePath); } if (parsed) { diff --git a/packages/patternfly-4/react-docs/src/components/header.js b/packages/patternfly-4/react-docs/src/components/header.js deleted file mode 100644 index 8990b7e31bb..00000000000 --- a/packages/patternfly-4/react-docs/src/components/header.js +++ /dev/null @@ -1,42 +0,0 @@ -import { Link } from "gatsby" -import PropTypes from "prop-types" -import React from "react" - -const Header = ({ siteTitle }) => ( -
    -
    -

    - - {siteTitle} - -

    -
    -
    -) - -Header.propTypes = { - siteTitle: PropTypes.string, -} - -Header.defaultProps = { - siteTitle: ``, -} - -export default Header diff --git a/packages/patternfly-4/react-docs/src/components/layout.js b/packages/patternfly-4/react-docs/src/components/layout.js deleted file mode 100644 index c1eab7c977e..00000000000 --- a/packages/patternfly-4/react-docs/src/components/layout.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Layout component that queries for data - * with Gatsby's StaticQuery component - * - * See: https://www.gatsbyjs.org/docs/static-query/ - */ - -import React from "react" -import PropTypes from "prop-types" -import { StaticQuery, graphql } from "gatsby" - -import Header from "./header" - -const Layout = ({ children }) => ( - ( - <> -
    -
    -
    {children}
    -
    - © {new Date().getFullYear()}, Built with - {` `} - Gatsby -
    -
    - - )} - /> -) - -Layout.propTypes = { - children: PropTypes.node.isRequired, -} - -export default Layout diff --git a/packages/patternfly-4/react-docs/src/components/nav/nav.js b/packages/patternfly-4/react-docs/src/components/nav/nav.js new file mode 100644 index 00000000000..9775057aaeb --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/nav/nav.js @@ -0,0 +1,46 @@ +import React from "react" +import { useStaticQuery, graphql } from "gatsby" +import { Link } from "gatsby" +import { getPagePath } from '../../helpers/navHelpers' + +const Nav = () => { + const data = useStaticQuery(graphql` +query SiteTitleQuery { + site { + siteMetadata { + title + } + } + allMarkdownRemark { + edges { + node { + fileAbsolutePath + frontmatter { + title + } + } + } + } +}`); + + const orderedNodes = data.allMarkdownRemark.edges.map(edge => { + edge.node.page = getPagePath(edge.node.fileAbsolutePath) + return edge.node + }).sort((n1, n2) => n1.page.localeCompare(n2.page)); + console.log('ordered', orderedNodes); + + return ( + + {data.site.siteMetadata.title} +
      + {orderedNodes.map(node => +
    • + {node.frontmatter.title} +
    • + )} +
    +
    + ) +} + +export default Nav diff --git a/packages/patternfly-4/react-docs/src/components/nav/navGroup.js b/packages/patternfly-4/react-docs/src/components/nav/navGroup.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/patternfly-4/react-docs/src/components/nav/navItem.js b/packages/patternfly-4/react-docs/src/components/nav/navItem.js new file mode 100644 index 00000000000..785f19042b0 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/nav/navItem.js @@ -0,0 +1,58 @@ +import React from 'react'; +import { css } from '@patternfly/react-styles'; +import styles from './navigationItem.styles'; +import { Link } from 'gatsby'; +import { Location } from '@reach/router'; + +const pathPrefix = 'https://github.com/patternfly/patternfly-react/tree/master/packages/'; +const getPkgPrefix = pkg => (pkg === 'icons' ? 'react-icons' : `patternfly-4/react-${pkg}`); +const navItemDescriptor = pkg => `Found in patternfly ${pkg}`; +const navItemDescriptorId = children => `${children}Descriptor`; + +const NavigationItem = ({ to, children, pkg, components, collapsed }) => ( + + {({ location }) => { + const currentPath = location.pathname; + const isActive = currentPath.toLowerCase().indexOf(children.toLowerCase()) > -1; + return ( +
  • + + {children} + + + {pkg} + + {components && + components.length > 0 && + (isActive || !collapsed) && ( +
      + {components.map(route => ( +
    • + {`${route.label} Props`} +
    • + ))} +
    + )} +
  • + ); + }} +
    +); + +export default NavigationItem; diff --git a/packages/patternfly-4/react-docs/src/components/sidebarLayout.js b/packages/patternfly-4/react-docs/src/components/sidebarLayout.js new file mode 100644 index 00000000000..6c30aeb2011 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/sidebarLayout.js @@ -0,0 +1,36 @@ +/** + * Layout component that queries for data + * with Gatsby's StaticQuery component + * + * See: https://www.gatsbyjs.org/docs/static-query/ + */ + +import React from "react" +import Nav from './nav/nav' + +// TODO: make look good https://www.patternfly.org/pattern-library/navigation/vertical-navigation/#code +// or like gatsby's https://www.gatsbyjs.org/docs/linking-and-prefetching-with-gatsby/ +const SidebarLayout = ({ children }) => ( + +
    + +
    {children}
    +
    +
    +) + +export default SidebarLayout diff --git a/packages/patternfly-4/react-docs/src/helpers/navHelpers.js b/packages/patternfly-4/react-docs/src/helpers/navHelpers.js new file mode 100644 index 00000000000..53694c0cd15 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/helpers/navHelpers.js @@ -0,0 +1,11 @@ +const path = require("path") + +exports.getPagePath = (filename) => { + const extension = path.extname(filename); + const componentName = path.basename(filename, extension).toLowerCase().trim(); + return `/components/${componentName}` +} +exports.getParentFolder = (filename) => { + const split = filename.split('/'); + return split[split.length - 2]; // i.e. 'Alert' in '/ff/ff/Alert/AlertSomething.js' +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/pages/index.js b/packages/patternfly-4/react-docs/src/pages/index.js index ef7e66942a7..ce475ca1086 100644 --- a/packages/patternfly-4/react-docs/src/pages/index.js +++ b/packages/patternfly-4/react-docs/src/pages/index.js @@ -2,7 +2,7 @@ import React from "react" import { Link } from "gatsby" import Helmet from 'react-helmet'; -import Layout from "../components/layout" +import SidebarLayout from "../components/sidebarLayout" const IndexPage = () => ( @@ -12,12 +12,12 @@ const IndexPage = () => ( - +

    Hi people

    Welcome to your new Gatsby site.

    Now go build something great.

    Go to page 2 -
    +
    ) diff --git a/packages/patternfly-4/react-docs/src/pages/page-2.js b/packages/patternfly-4/react-docs/src/pages/page-2.js index 6b11ea4d3ec..04ebefffa19 100644 --- a/packages/patternfly-4/react-docs/src/pages/page-2.js +++ b/packages/patternfly-4/react-docs/src/pages/page-2.js @@ -1,14 +1,14 @@ import React from "react" import { Link } from "gatsby" -import Layout from "../components/layout" +import SidebarLayout from "../components/sidebarLayout" const SecondPage = () => ( - +

    Hi from the second page

    Welcome to page 2

    Go back to the homepage -
    + ) export default SecondPage diff --git a/packages/patternfly-4/react-docs/src/templates/helpers.js b/packages/patternfly-4/react-docs/src/templates/helpers.js new file mode 100644 index 00000000000..31c12b7d848 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/templates/helpers.js @@ -0,0 +1,26 @@ +// Recursively look through all tagName: code blocks for which components are used in the *.md file +// Save results in res +function getUsedComponents0(htmlAstNode, possibleComponents, res) { + if (!htmlAstNode) { + return + } + + if (htmlAstNode.type === 'element' && htmlAstNode.tagName === 'code') { + htmlAstNode.children.filter(c => c.type === 'text').map(c => c.value.toLowerCase()).forEach(text => { + possibleComponents.forEach(p => { + if (text.indexOf(p.toLowerCase()) !== -1) res[p] = true; + }) + }); + } + else if (htmlAstNode.children) { + for (const c of htmlAstNode.children) { + getUsedComponents0(c, possibleComponents, res) + } + } +} + +export function getUsedComponents(htmlAstNode, possibleComponents) { + let res = {}; + getUsedComponents0(htmlAstNode, possibleComponents, res); + return Object.keys(res); +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js index 14d4f0d0f78..4e7d3011012 100644 --- a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js +++ b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js @@ -1,30 +1,32 @@ import React from "react" import { graphql } from "gatsby" +import { getUsedComponents } from './helpers' +import SidebarLayout from "../components/sidebarLayout" +// import Tokens from '../components/tokens' +/* */ export default function Template({ data, pageContext }) { - // const { markdownRemark } = data // data.markdownRemark holds our post data - // const { frontmatter, html } = markdownRemark - // return ( - //
    - //
    - //

    {frontmatter.title}

    - //
    - //
    - //
    - // ) - return
    - bad html -
    + // Exported components in the folder (i.e. src/components/Alerts/*) + const siblingComponents = data.metadata.edges.map(e => e.node.name) + // Exported components with names used in the docs + const propComponents = getUsedComponents(data.markdownRemark.htmlAst, siblingComponents, {}) + // Finally, their props! + const props = data.metadata.edges + .filter(edge => propComponents.indexOf(edge.node.name) !== -1) + .map(edge => { return { name: edge.node.name, props: edge.node.props } }); + + return +

    {data.markdownRemark.frontmatter.title}

    + tokens props -
    +
    {JSON.stringify(props)}
    context

    {JSON.stringify(pageContext)}

    + bad html +
    data

    {JSON.stringify(data)}

    -
    + } // Test queries in http://localhost:8000/___graphql @@ -39,9 +41,10 @@ query GetComponent($fileAbsolutePath: String!, $pathRegex: String!) { htmlAst frontmatter { title + cssPrefix } } - allComponentMetadata(filter: {path: {regex: $pathRegex}}) { + metadata: allComponentMetadata(filter: {path: {regex: $pathRegex}}) { edges { node { path From 2f18aedf45e8392f9fd13aa828ad31517032db6e Mon Sep 17 00:00:00 2001 From: redallen Date: Thu, 21 Mar 2019 15:38:50 -0400 Subject: [PATCH 03/46] prettier props and token rendering --- .../react-docs/src/components/index.js | 2 ++ .../react-docs/src/components/nav/nav.js | 1 - .../react-docs/src/components/props.js | 25 +++++++++++++++ .../react-docs/src/components/tokens.js | 31 +++++++++++++++++++ .../src/templates/markdownTemplate.js | 22 ++++++++----- 5 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 packages/patternfly-4/react-docs/src/components/index.js create mode 100644 packages/patternfly-4/react-docs/src/components/props.js create mode 100644 packages/patternfly-4/react-docs/src/components/tokens.js diff --git a/packages/patternfly-4/react-docs/src/components/index.js b/packages/patternfly-4/react-docs/src/components/index.js new file mode 100644 index 00000000000..7e6a92baa2a --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/index.js @@ -0,0 +1,2 @@ +export { default as Props } from './props'; +export { default as Tokens } from './tokens'; diff --git a/packages/patternfly-4/react-docs/src/components/nav/nav.js b/packages/patternfly-4/react-docs/src/components/nav/nav.js index 9775057aaeb..6fa83312a68 100644 --- a/packages/patternfly-4/react-docs/src/components/nav/nav.js +++ b/packages/patternfly-4/react-docs/src/components/nav/nav.js @@ -27,7 +27,6 @@ query SiteTitleQuery { edge.node.page = getPagePath(edge.node.fileAbsolutePath) return edge.node }).sort((n1, n2) => n1.page.localeCompare(n2.page)); - console.log('ordered', orderedNodes); return ( diff --git a/packages/patternfly-4/react-docs/src/components/props.js b/packages/patternfly-4/react-docs/src/components/props.js new file mode 100644 index 00000000000..1f7c063e240 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/props.js @@ -0,0 +1,25 @@ +import React from 'react'; + +const Props = ({ propList }) => { + + return + + + + + + + + {propList.map(prop => + + + + + + + )} + +
    NameTypeRequiredDefault
    {prop.name}{prop.type.name}{'' + prop.required}{prop.defaultValue && prop.defaultValue.value}
    +} + +export default Props diff --git a/packages/patternfly-4/react-docs/src/components/tokens.js b/packages/patternfly-4/react-docs/src/components/tokens.js new file mode 100644 index 00000000000..63216b20690 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/tokens.js @@ -0,0 +1,31 @@ +import React from 'react'; +import * as tokensModule from '@patternfly/react-tokens'; + +class Tokens extends React.Component { + constructor(props) { + super(props); + if (!props.cssPrefix) { + console.error('No css prefix for component'); + return; + } + this.cssTokens = Object.values(tokensModule).filter(val => ( + val.name.indexOf(props.cssPrefix) !== -1)); + } + + render() { + return
    + {this.props.cssPrefix} +
      + {this.cssTokens.map(token => +
    • {token.name} / {token.value} / {token.var}
    • + )} +
    +
    + } +} + +Tokens.defaultProps = { + cssPrefix: null +}; + +export default Tokens; \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js index 4e7d3011012..605fbb21929 100644 --- a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js +++ b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js @@ -2,6 +2,7 @@ import React from "react" import { graphql } from "gatsby" import { getUsedComponents } from './helpers' import SidebarLayout from "../components/sidebarLayout" +import { Tokens, Props } from "../components" // import Tokens from '../components/tokens' /* */ @@ -10,21 +11,26 @@ export default function Template({ data, pageContext }) { const siblingComponents = data.metadata.edges.map(e => e.node.name) // Exported components with names used in the docs const propComponents = getUsedComponents(data.markdownRemark.htmlAst, siblingComponents, {}) - // Finally, their props! + // Finally, the props for each relevant component! const props = data.metadata.edges .filter(edge => propComponents.indexOf(edge.node.name) !== -1) .map(edge => { return { name: edge.node.name, props: edge.node.props } }); return

    {data.markdownRemark.frontmatter.title}

    - tokens - props -
    {JSON.stringify(props)}
    - context -

    {JSON.stringify(pageContext)}

    - bad html
    - data +

    tokens

    + +

    props

    + {props.map(prop => + +

    {prop.name}

    + +
    + )} +

    context

    +

    {JSON.stringify(pageContext)}

    +

    data

    {JSON.stringify(data)}

    } From 8837ea12b3bfa71006256325ac0f6d1d66dc77de Mon Sep 17 00:00:00 2001 From: redallen Date: Thu, 21 Mar 2019 15:46:21 -0400 Subject: [PATCH 04/46] refactor --- .../components/{ => componentDocs}/index.js | 0 .../components/{ => componentDocs}/props.js | 12 +++++----- .../components/{ => componentDocs}/tokens.js | 23 ++++++++++++------- .../src/templates/markdownTemplate.js | 2 +- 4 files changed, 22 insertions(+), 15 deletions(-) rename packages/patternfly-4/react-docs/src/components/{ => componentDocs}/index.js (100%) rename packages/patternfly-4/react-docs/src/components/{ => componentDocs}/props.js (78%) rename packages/patternfly-4/react-docs/src/components/{ => componentDocs}/tokens.js (59%) diff --git a/packages/patternfly-4/react-docs/src/components/index.js b/packages/patternfly-4/react-docs/src/components/componentDocs/index.js similarity index 100% rename from packages/patternfly-4/react-docs/src/components/index.js rename to packages/patternfly-4/react-docs/src/components/componentDocs/index.js diff --git a/packages/patternfly-4/react-docs/src/components/props.js b/packages/patternfly-4/react-docs/src/components/componentDocs/props.js similarity index 78% rename from packages/patternfly-4/react-docs/src/components/props.js rename to packages/patternfly-4/react-docs/src/components/componentDocs/props.js index 1f7c063e240..3da1fb96a59 100644 --- a/packages/patternfly-4/react-docs/src/components/props.js +++ b/packages/patternfly-4/react-docs/src/components/componentDocs/props.js @@ -3,13 +3,13 @@ import React from 'react'; const Props = ({ propList }) => { return - - - - - - + + + + + + {propList.map(prop => diff --git a/packages/patternfly-4/react-docs/src/components/tokens.js b/packages/patternfly-4/react-docs/src/components/componentDocs/tokens.js similarity index 59% rename from packages/patternfly-4/react-docs/src/components/tokens.js rename to packages/patternfly-4/react-docs/src/components/componentDocs/tokens.js index 63216b20690..5dbca889d76 100644 --- a/packages/patternfly-4/react-docs/src/components/tokens.js +++ b/packages/patternfly-4/react-docs/src/components/componentDocs/tokens.js @@ -13,14 +13,21 @@ class Tokens extends React.Component { } render() { - return
    - {this.props.cssPrefix} -
      - {this.cssTokens.map(token => -
    • {token.name} / {token.value} / {token.var}
    • - )} -
    -
    + return
    NameTypeRequiredDefault
    NameTypeRequiredDefault
    {prop.name}
    + Prefix: {this.props.cssPrefix} + + + + + + {this.cssTokens.map(token => + + + + + )} + +
    CSS VariableValue
    {token.name}{token.value}
    } } diff --git a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js index 605fbb21929..65c1381cce4 100644 --- a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js +++ b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js @@ -2,7 +2,7 @@ import React from "react" import { graphql } from "gatsby" import { getUsedComponents } from './helpers' import SidebarLayout from "../components/sidebarLayout" -import { Tokens, Props } from "../components" +import { Tokens, Props } from "../components/componentDocs" // import Tokens from '../components/tokens' /* */ From 3ce9dba5e15aca3f58edcc324e1263361993a78e Mon Sep 17 00:00:00 2001 From: redallen Date: Fri, 22 Mar 2019 09:07:04 -0400 Subject: [PATCH 05/46] live editing --- packages/patternfly-4/react-docs/.eslintrc.js | 9 ++ packages/patternfly-4/react-docs/package.json | 6 +- .../src/components/componentDocs/index.js | 1 + .../src/components/componentDocs/liveEdit.js | 60 +++++++++++ .../src/components/componentDocs/tokens.js | 1 - .../src/templates/markdownTemplate.js | 17 ++- yarn.lock | 100 ++++++++++++++---- 7 files changed, 166 insertions(+), 28 deletions(-) create mode 100644 packages/patternfly-4/react-docs/.eslintrc.js create mode 100644 packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js diff --git a/packages/patternfly-4/react-docs/.eslintrc.js b/packages/patternfly-4/react-docs/.eslintrc.js new file mode 100644 index 00000000000..03f14fb5329 --- /dev/null +++ b/packages/patternfly-4/react-docs/.eslintrc.js @@ -0,0 +1,9 @@ +// We need this file to disable gatsby's default webpack eslintrc +// which will complain when we `import { css } from '@patternfly/react-styles';` +module.exports = { + extends: ["standard"], + plugins: ["standard", "react"], + rules: { + "import/first": "off" + }, +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/package.json b/packages/patternfly-4/react-docs/package.json index 95ee57e530a..775f071156b 100644 --- a/packages/patternfly-4/react-docs/package.json +++ b/packages/patternfly-4/react-docs/package.json @@ -20,7 +20,9 @@ "prop-types": "^15.7.2", "react": "^16.8.4", "react-dom": "^16.8.4", - "react-helmet": "^5.2.0" + "react-helmet": "^5.2.0", + "react-live": "^2.0.0", + "rehype-react": "^3.1.0" }, "devDependencies": { "rimraf": "^2.6.3" @@ -32,4 +34,4 @@ "last 2 versions", "not ie <= 11" ] -} \ No newline at end of file +} diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/index.js b/packages/patternfly-4/react-docs/src/components/componentDocs/index.js index 7e6a92baa2a..34c712f0309 100644 --- a/packages/patternfly-4/react-docs/src/components/componentDocs/index.js +++ b/packages/patternfly-4/react-docs/src/components/componentDocs/index.js @@ -1,2 +1,3 @@ export { default as Props } from './props'; export { default as Tokens } from './tokens'; +export { default as LiveEdit } from './liveEdit'; diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js b/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js new file mode 100644 index 00000000000..d09b459acf7 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js @@ -0,0 +1,60 @@ +import React from 'react'; +import { LiveProvider, LiveEditor, LiveError, LivePreview, withLive } from 'react-live'; +import { css } from '@patternfly/react-styles'; +import * as CoreComponents from '@patternfly/react-core'; +import * as CoreIcons from '@patternfly/react-icons'; +import * as TableComponents from '@patternfly/react-table'; +import * as ChartComponents from '@patternfly/react-charts'; +import * as StyledSystemComponents from '@patternfly/react-styled-system'; + + +class LiveEdit extends React.Component { + constructor(props) { + super(props); + // Our children are elements inside a tag created from rendered markdown + this.code = this.props.children[0]; + console.log('liveedit props', props) + this.scope = this.getScope(this.code); + } + + getScope(code) { + const res = { React }; + + const addToScope = (importPath, mod) => { + if (code.indexOf(importPath) !== -1) { + console.log('react-live importing', importPath); + Object.entries(mod).forEach(([key, value]) => res[key] = value); + } + } + addToScope('@patternfly/react-core', CoreComponents); + addToScope('@patternfly/react-icons', CoreIcons); + addToScope('@patternfly/react-table', TableComponents); + addToScope('@patternfly/react-charts', ChartComponents); + addToScope('@patternfly/react-styled-system', StyledSystemComponents); + + return res; + } + + transformCode(code) { + if (typeof code !== 'string') { + console.log('confusing', code) + return code; + } + const res = code. + replace(/^\s*import.*/gm, ''). + replace(/^\s*export.*/gm, ''); + + console.log('transformed', res) + return res; + } + + render() { + return + + + + + } +} + +export default withLive(LiveEdit) \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/tokens.js b/packages/patternfly-4/react-docs/src/components/componentDocs/tokens.js index 5dbca889d76..44077aa6cb5 100644 --- a/packages/patternfly-4/react-docs/src/components/componentDocs/tokens.js +++ b/packages/patternfly-4/react-docs/src/components/componentDocs/tokens.js @@ -14,7 +14,6 @@ class Tokens extends React.Component { render() { return - Prefix: {this.props.cssPrefix} diff --git a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js index 65c1381cce4..3b1308c5f05 100644 --- a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js +++ b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js @@ -2,9 +2,15 @@ import React from "react" import { graphql } from "gatsby" import { getUsedComponents } from './helpers' import SidebarLayout from "../components/sidebarLayout" -import { Tokens, Props } from "../components/componentDocs" -// import Tokens from '../components/tokens' -/* */ +import { Tokens, Props, LiveEdit } from "../components/componentDocs" +import rehypeReact from "rehype-react" + +const renderAst = new rehypeReact({ + createElement: React.createElement, + components: { + "code": LiveEdit + }, +}).Compiler export default function Template({ data, pageContext }) { // Exported components in the folder (i.e. src/components/Alerts/*) @@ -18,7 +24,9 @@ export default function Template({ data, pageContext }) { return

    {data.markdownRemark.frontmatter.title}

    -
    + {/* https://using-remark.gatsbyjs.org/custom-components/ */} + {renderAst(data.markdownRemark.htmlAst)} + {/*
    */}

    tokens

    props

    @@ -43,7 +51,6 @@ export default function Template({ data, pageContext }) { export const pageQuery = graphql` query GetComponent($fileAbsolutePath: String!, $pathRegex: String!) { markdownRemark(fileAbsolutePath: { eq: $fileAbsolutePath }) { - html htmlAst frontmatter { title diff --git a/yarn.lock b/yarn.lock index 8a37288a42d..0b1a096a931 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1580,6 +1580,12 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" +"@mapbox/hast-util-table-cell-style@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.1.3.tgz#5b7166ae01297d72216932b245e4b2f0b642dca6" + dependencies: + unist-util-visit "^1.3.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -4834,6 +4840,17 @@ btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" +buble@0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" + dependencies: + chalk "^2.4.1" + magic-string "^0.25.1" + minimist "^1.2.0" + os-homedir "^1.0.1" + regexpu-core "^4.2.0" + vlq "^1.0.0" + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -5741,6 +5758,14 @@ component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" +component-props@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/component-props/-/component-props-1.1.1.tgz#f9b7df9b9927b6e6d97c9bd272aa867670f34944" + +component-xor@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/component-xor/-/component-xor-0.0.4.tgz#c55d83ccc1b94cd5089a4e93fa7891c7263e59aa" + compressible@^2.0.0, compressible@~2.0.16: version "2.0.16" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.16.tgz#a49bf9858f3821b64ce1be0296afc7380466a77f" @@ -7029,6 +7054,13 @@ dom-converter@^0.2: dependencies: "@babel/runtime" "^7.1.2" +dom-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dom-iterator/-/dom-iterator-1.0.0.tgz#9c09899846ec41c2d257adc4d6015e4759ef05ad" + dependencies: + component-props "1.1.1" + component-xor "0.0.4" + dom-serializer@0, dom-serializer@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -7710,25 +7742,6 @@ eslint-plugin-node@^6.0.1: resolve "^1.3.3" semver "^5.4.1" -"eslint-plugin-patternfly-react@file:packages/eslint-plugin-patternfly-react": - version "0.2.2" - dependencies: - babel-eslint "^9.0.0" - eslint-config-airbnb "^16.1.0" - eslint-config-prettier "^2.9.0" - eslint-config-standard "^11.0.0" - eslint-config-standard-jsx "^5.0.0" - eslint-config-standard-react "^6.0.0" - eslint-plugin-import "^2.13.0" - eslint-plugin-jest "^21.15.0" - eslint-plugin-jsx-a11y "^6.0.3" - eslint-plugin-node "^6.0.1" - eslint-plugin-prettier "^2.6.0" - eslint-plugin-promise "^3.7.0" - eslint-plugin-react "^7.7.0" - eslint-plugin-rulesdir "^0.1.0" - eslint-plugin-standard "^3.0.1" - eslint-plugin-prettier@^2.6.0: version "2.7.0" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" @@ -12533,6 +12546,12 @@ macos-release@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.1.0.tgz#c87935891fbeb0dba7537913fc66f469fee9d662" +magic-string@^0.25.1: + version "0.25.2" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" + dependencies: + sourcemap-codec "^1.4.4" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -15411,6 +15430,10 @@ pretty-format@^23.0.1, pretty-format@^23.6.0: ansi-regex "^3.0.0" ansi-styles "^3.2.0" +prism-react-renderer@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-0.1.6.tgz#c9216baa234fab1c234209fcdaf0cd23a01c50a9" + prismjs@^1.8.4, prismjs@~1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" @@ -16036,6 +16059,19 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" +react-live@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-live/-/react-live-2.0.0.tgz#37230dfe64dd32494c2700189f74a7ed3b606031" + dependencies: + buble "0.19.6" + core-js "^2.4.1" + create-react-context "^0.2.3" + dom-iterator "^1.0.0" + prism-react-renderer "^0.1.0" + prop-types "^15.5.8" + react-simple-code-editor "^0.9.0" + unescape "^0.2.0" + react-modal@^3.3.2: version "3.8.1" resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.8.1.tgz#7300f94a6f92a2e17994de0be6ccb61734464c9e" @@ -16146,6 +16182,10 @@ react-side-effect@^1.1.0: exenv "^1.2.1" shallowequal "^1.0.1" +react-simple-code-editor@^0.9.0: + version "0.9.4" + resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.9.4.tgz#1c1bd621370d07ec43b25f67378036bbf7b9fbe1" + react-split-pane@^0.1.77: version "0.1.87" resolved "https://registry.yarnpkg.com/react-split-pane/-/react-split-pane-0.1.87.tgz#a7027ae554abfacca35f5f780288b07fe4ec4cbd" @@ -16597,7 +16637,7 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.1.3, regexpu-core@^4.5.4: +regexpu-core@^4.1.3, regexpu-core@^4.2.0, regexpu-core@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" dependencies: @@ -16641,6 +16681,14 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" +rehype-react@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/rehype-react/-/rehype-react-3.1.0.tgz#bdd4b66ff24bd68e57c2f2e716607b3029c9e63e" + dependencies: + "@mapbox/hast-util-table-cell-style" "^0.1.3" + has "^1.0.1" + hast-to-hyperscript "^5.0.0" + relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -17662,6 +17710,10 @@ source-map@^0.7.2, source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" +sourcemap-codec@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" + space-separated-tokens@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412" @@ -18953,6 +19005,10 @@ underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" +unescape@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/unescape/-/unescape-0.2.0.tgz#b78b9b60c86f1629df181bf53eee3bc8d6367ddf" + unherit@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" @@ -19644,6 +19700,10 @@ victory@^30.1.0: victory-voronoi-container "^30.6.1" victory-zoom-container "^30.6.1" +vlq@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806" + vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" From 307e231ff87590c2b6198a9bf92443926c94ae3e Mon Sep 17 00:00:00 2001 From: redallen Date: Fri, 22 Mar 2019 14:02:41 -0400 Subject: [PATCH 06/46] acorn fail --- package.json | 3 + .../patternfly-4/react-docs/gatsby-browser.js | 1 - packages/patternfly-4/react-docs/package.json | 6 +- .../components/componentDocs/astring-jsx.js | 69 +++++++++++++++++++ .../src/components/componentDocs/liveEdit.js | 51 +++++++++++--- .../src/components/sidebarLayout.js | 13 +++- .../react-docs/src/pages/index.js | 7 -- packages/patternfly-4/react-docs/src/test.js | 24 +++++++ 8 files changed, 154 insertions(+), 20 deletions(-) delete mode 100644 packages/patternfly-4/react-docs/gatsby-browser.js create mode 100644 packages/patternfly-4/react-docs/src/components/componentDocs/astring-jsx.js create mode 100644 packages/patternfly-4/react-docs/src/test.js diff --git a/package.json b/package.json index 06cd2eaf7e0..98edd371787 100644 --- a/package.json +++ b/package.json @@ -126,6 +126,9 @@ "workspaces": { "packages": [ "packages/**" + ], + "nohoist": [ + "**/acorn*" ] } } \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/gatsby-browser.js b/packages/patternfly-4/react-docs/gatsby-browser.js deleted file mode 100644 index c73b3f70d24..00000000000 --- a/packages/patternfly-4/react-docs/gatsby-browser.js +++ /dev/null @@ -1 +0,0 @@ -// import '@patternfly/react-core/styles/base.css'; diff --git a/packages/patternfly-4/react-docs/package.json b/packages/patternfly-4/react-docs/package.json index 775f071156b..32e8d23261b 100644 --- a/packages/patternfly-4/react-docs/package.json +++ b/packages/patternfly-4/react-docs/package.json @@ -12,6 +12,10 @@ }, "dependencies": { "@patternfly/react-tokens": "^2.2.0", + "acorn": "^6.1.1", + "acorn-class-fields": "^0.3.1", + "acorn-jsx": "^5.0.1", + "astring": "^1.3.1", "gatsby": "^2.1.37", "gatsby-image": "^2.0.34", "gatsby-plugin-react-helmet": "^3.0.10", @@ -34,4 +38,4 @@ "last 2 versions", "not ie <= 11" ] -} +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/astring-jsx.js b/packages/patternfly-4/react-docs/src/components/componentDocs/astring-jsx.js new file mode 100644 index 00000000000..ab9578ac0ca --- /dev/null +++ b/packages/patternfly-4/react-docs/src/components/componentDocs/astring-jsx.js @@ -0,0 +1,69 @@ +// https://github.com/Qard/astring-jsx/blob/master/index.js +var astring = require('astring'); + +var jsxGenerator = Object.assign({}, astring.baseGenerator, { + //
    + JSXElement: function JSXElement(node, state) { + state.write('<'); + this[node.openingElement.type](node.openingElement, state); + if (node.closingElement) { + state.write('>'); + for (var i = 0; i < node.children.length; i++) { + var child = node.children[i]; + this[child.type](child, state); + } + state.write(''); + } else { + state.write(' />'); + } + }, + //
    + JSXOpeningElement: function JSXOpeningElement(node, state) { + this[node.name.type](node.name, state); + for (var i = 0; i < node.attributes.length; i++) { + var attr = node.attributes[i]; + this[attr.type](attr, state); + } + }, + //
    + JSXClosingElement: function JSXClosingElement(node, state) { + this[node.name.type](node.name, state); + }, + // div + JSXIdentifier: function JSXIdentifier(node, state) { + state.write(node.name); + }, + // \n or attr="{something}" + JSXText: function JSXText(node, state) { + state.write(node.value); + }, + // Member.Expression + JSXMemberExpression: function JSXMemberExpression(node, state) { + this[node.object.type](node.object, state); + state.write('.'); + this[node.property.type](node.property, state); + }, + // attr="something" + JSXAttribute: function JSXAttribute(node, state) { + state.write(' '); + this[node.name.type](node.name, state); + state.write('='); + this[node.value.type](node.value, state); + }, + // namespaced:attr="something" + JSXNamespacedName: function JSXNamespacedName(node, state) { + this[node.namespace.type](node.namespace, state); + state.write(':'); + this[node.name.type](node.name, state); + }, + // {expression} + JSXExpressionContainer: function JSXExpressionContainer(node, state) { + state.write('{'); + this[node.expression.type](node.expression, state); + state.write('}'); + }, +}); + +module.exports = jsxGenerator; diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js b/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js index d09b459acf7..13a37f88d6a 100644 --- a/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js +++ b/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js @@ -1,24 +1,49 @@ import React from 'react'; import { LiveProvider, LiveEditor, LiveError, LivePreview, withLive } from 'react-live'; -import { css } from '@patternfly/react-styles'; +// Acorn has the quirk of not being able to be hoisted in yarn workspaces. +import { Parser } from 'acorn'; +import classFields from 'acorn-class-fields'; +import jsx from 'acorn-jsx'; +import { generate } from 'astring' +import jsxGenerator from './astring-jsx' + +// Things to inject import * as CoreComponents from '@patternfly/react-core'; import * as CoreIcons from '@patternfly/react-icons'; import * as TableComponents from '@patternfly/react-table'; import * as ChartComponents from '@patternfly/react-charts'; import * as StyledSystemComponents from '@patternfly/react-styled-system'; - +import { css } from '@patternfly/react-styles'; +import avatarImg from '../../../../react-core/src/components/Avatar/examples/img_avatar.svg'; class LiveEdit extends React.Component { + static acorn = Parser.extend(jsx()).extend(classFields); + constructor(props) { super(props); // Our children are elements inside a tag created from rendered markdown - this.code = this.props.children[0]; - console.log('liveedit props', props) - this.scope = this.getScope(this.code); + this.scope = this.getScope(this.props.children[0]); + this.code = this.makeCodeES6(this.props.children[0]); + } + + makeCodeES6(code) { + // Before you think about dropping Babel in here, let me remind you it's 1.5MB and we should + // keep this site lightweight for building and testing. Instead, think about linking to a + // real Javascript editor like Blaze, JSBin, JSFiddle, Codepen, etc. + + // console.log('parsing', toParse); + code = this.transformCode(code); + console.log('giving acorn', code); + const ast = LiveEdit.acorn.parse(code, { ecmaVersion: 6 }); + console.log('givinst astring', ast); + const res = generate(ast, { generator: jsxGenerator }); + console.log('transformed', res); + + return res; } getScope(code) { - const res = { React }; + const res = { React, avatarImg }; const addToScope = (importPath, mod) => { if (code.indexOf(importPath) !== -1) { @@ -30,6 +55,7 @@ class LiveEdit extends React.Component { addToScope('@patternfly/react-icons', CoreIcons); addToScope('@patternfly/react-table', TableComponents); addToScope('@patternfly/react-charts', ChartComponents); + addToScope('@patternfly/react-styles', css); addToScope('@patternfly/react-styled-system', StyledSystemComponents); return res; @@ -40,15 +66,20 @@ class LiveEdit extends React.Component { console.log('confusing', code) return code; } - const res = code. + // These don't actually do anything except make Buble mad + const toParse = code. replace(/^\s*import.*/gm, ''). replace(/^\s*export.*/gm, ''); - console.log('transformed', res) - return res; + return toParse; } render() { + // return + //
    + // + //
    + //
    return @@ -57,4 +88,4 @@ class LiveEdit extends React.Component { } } -export default withLive(LiveEdit) \ No newline at end of file +export default LiveEdit \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/components/sidebarLayout.js b/packages/patternfly-4/react-docs/src/components/sidebarLayout.js index 6c30aeb2011..ea2dc0221be 100644 --- a/packages/patternfly-4/react-docs/src/components/sidebarLayout.js +++ b/packages/patternfly-4/react-docs/src/components/sidebarLayout.js @@ -7,11 +7,22 @@ import React from "react" import Nav from './nav/nav' +import Helmet from 'react-helmet'; + +// Import global CSS files here. Have no remorse. +// https://www.gatsbyjs.org/docs/creating-global-styles +import '@patternfly/react-core/dist/styles/base.css' // TODO: make look good https://www.patternfly.org/pattern-library/navigation/vertical-navigation/#code -// or like gatsby's https://www.gatsbyjs.org/docs/linking-and-prefetching-with-gatsby/ +// or like gatsby's https://www.gatsbyjs.org/docs/linking-and-prefetching-with-gatsby const SidebarLayout = ({ children }) => ( + + + + + +
    ( - - - - - -

    Hi people

    Welcome to your new Gatsby site.

    diff --git a/packages/patternfly-4/react-docs/src/test.js b/packages/patternfly-4/react-docs/src/test.js new file mode 100644 index 00000000000..a913a34934c --- /dev/null +++ b/packages/patternfly-4/react-docs/src/test.js @@ -0,0 +1,24 @@ +const { Parser } = require("acorn") +const { generate } = require('astring') + +const MyParser = Parser.extend( + require("acorn-jsx")(), + require("acorn-class-fields") +) + +// const code = ` +// let a = () => hi(, '123'); +// ` +// const ast = MyParser.parse(code) +// console.log(ast) +// const generated = generate(ast) +// console.log(generated) + +// Set example code +var code = 'let answer = 4 + 7 * 5 + 3;\n;' +// Parse it into an AST +var ast = MyParser.parse(code, { ecmaVersion: 6 }) +// Format it into a code string +var formattedCode = generate(ast) +// Check it +console.log(code === formattedCode ? 'It works!' : 'Something went wrong…') \ No newline at end of file From 7a4ea4dcb9db13b6dc38c37cbf11244d71d65bf4 Mon Sep 17 00:00:00 2001 From: redallen Date: Mon, 25 Mar 2019 17:47:03 -0400 Subject: [PATCH 07/46] sloppy dynamic imports --- package.json | 3 - .../examples/common/getContainerProps.js | 19 -- .../examples/common/getContainerPropsDark.js | 26 --- packages/patternfly-4/react-core/.babelrc.js | 4 +- packages/patternfly-4/react-core/package.json | 5 +- .../src/components/Alert/Alert.docs.js | 41 ---- .../react-core/src/components/Alert/Alert.md | 41 ++-- .../components/Alert/examples/DangerAlert.js | 36 --- .../components/Alert/examples/InfoAlert.js | 36 --- .../components/Alert/examples/SuccessAlert.js | 40 ---- .../components/Alert/examples/WarningAlert.js | 40 ---- .../src/components/Avatar/Avatar.docs.js | 17 -- .../src/components/Avatar/Avatar.md | 2 +- .../Avatar/examples/SimpleAvatar.js | 11 - .../{img_avatar.svg => avatarImg.svg} | 0 .../components/Badge/examples/ReadBadge.js | 14 -- .../components/Badge/examples/UnreadBadge.js | 14 -- .../examples/common/getContainerProps.js | 9 - .../Page/examples/common/getContainerProps.js | 19 -- .../examples/common/getContainerProps.js | 9 - .../src/components/Wizard/Wizard.md | 214 ++++++----------- .../Wizard/examples/SampleFormOne.js | 42 ++++ .../Wizard/examples/SampleFormTwo.js | 42 ++++ .../patternfly-4/react-docs/gatsby-config.js | 2 + .../patternfly-4/react-docs/gatsby-node.js | 52 ++--- packages/patternfly-4/react-docs/package.json | 19 +- .../gatsby-node.js | 41 ++-- .../package.json | 2 +- .../test.js | 5 - .../test1.json | 216 ------------------ .../gatsby-node.js | 60 +++++ .../package.json | 23 ++ .../src/components/componentDocs/liveEdit.js | 80 ++----- .../react-docs/src/components/nav/nav.js | 38 +-- .../react-docs/src/helpers/dynamicImports.js | 36 +++ .../react-docs/src/helpers/navHelpers.js | 16 +- .../patternfly-4/react-docs/src/pages/404.js | 10 + .../src/templates/markdownTemplate.js | 47 +++- yarn.lock | 35 +-- 39 files changed, 473 insertions(+), 893 deletions(-) delete mode 100644 packages/patternfly-4/react-charts/src/components/AreaChart/examples/common/getContainerProps.js delete mode 100644 packages/patternfly-4/react-charts/src/components/AreaChart/examples/common/getContainerPropsDark.js delete mode 100644 packages/patternfly-4/react-core/src/components/Alert/Alert.docs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Alert/examples/DangerAlert.js delete mode 100644 packages/patternfly-4/react-core/src/components/Alert/examples/InfoAlert.js delete mode 100644 packages/patternfly-4/react-core/src/components/Alert/examples/SuccessAlert.js delete mode 100644 packages/patternfly-4/react-core/src/components/Alert/examples/WarningAlert.js delete mode 100644 packages/patternfly-4/react-core/src/components/Avatar/Avatar.docs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Avatar/examples/SimpleAvatar.js rename packages/patternfly-4/react-core/src/components/Avatar/examples/{img_avatar.svg => avatarImg.svg} (100%) delete mode 100644 packages/patternfly-4/react-core/src/components/Badge/examples/ReadBadge.js delete mode 100644 packages/patternfly-4/react-core/src/components/Badge/examples/UnreadBadge.js delete mode 100644 packages/patternfly-4/react-core/src/components/Badge/examples/common/getContainerProps.js delete mode 100644 packages/patternfly-4/react-core/src/components/Page/examples/common/getContainerProps.js delete mode 100644 packages/patternfly-4/react-core/src/components/Radio/examples/common/getContainerProps.js create mode 100644 packages/patternfly-4/react-core/src/components/Wizard/examples/SampleFormOne.js create mode 100644 packages/patternfly-4/react-core/src/components/Wizard/examples/SampleFormTwo.js delete mode 100644 packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test.js delete mode 100644 packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test1.json create mode 100644 packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-examples/gatsby-node.js create mode 100644 packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-examples/package.json create mode 100644 packages/patternfly-4/react-docs/src/helpers/dynamicImports.js create mode 100644 packages/patternfly-4/react-docs/src/pages/404.js diff --git a/package.json b/package.json index 98edd371787..06cd2eaf7e0 100644 --- a/package.json +++ b/package.json @@ -126,9 +126,6 @@ "workspaces": { "packages": [ "packages/**" - ], - "nohoist": [ - "**/acorn*" ] } } \ No newline at end of file diff --git a/packages/patternfly-4/react-charts/src/components/AreaChart/examples/common/getContainerProps.js b/packages/patternfly-4/react-charts/src/components/AreaChart/examples/common/getContainerProps.js deleted file mode 100644 index 34aa7949884..00000000000 --- a/packages/patternfly-4/react-charts/src/components/AreaChart/examples/common/getContainerProps.js +++ /dev/null @@ -1,19 +0,0 @@ -import { css, StyleSheet } from '@patternfly/react-styles'; - -const styles = StyleSheet.create({ - demoLayout: { - '& > *': { - '.chart-overflow': { - '& svg': { - overflow: 'visible' - } - }, - '.chart-title': { - marginBottom: '25px', - marginLeft: '10px' - } - } - } -}); - -export default () => ({ className: css(styles.demoLayout) }); diff --git a/packages/patternfly-4/react-charts/src/components/AreaChart/examples/common/getContainerPropsDark.js b/packages/patternfly-4/react-charts/src/components/AreaChart/examples/common/getContainerPropsDark.js deleted file mode 100644 index 2ee49cb06b1..00000000000 --- a/packages/patternfly-4/react-charts/src/components/AreaChart/examples/common/getContainerPropsDark.js +++ /dev/null @@ -1,26 +0,0 @@ -/* eslint-disable camelcase */ -import { global_BackgroundColor_dark_100, global_Color_light_100 } from '@patternfly/react-tokens'; -import { css, StyleSheet } from '@patternfly/react-styles'; - -const styles = StyleSheet.create({ - demoLayout: { - backgroundColor: global_BackgroundColor_dark_100.value, - backgroundImage: 'url("/assets/images/pfbg_1200.jpg")', - backgroundRepeat: 'no-repeat', - backgroundSize: 'cover', - '& > *': { - '.chart-overflow': { - '& svg': { - overflow: 'visible' - } - }, - '.chart-title': { - color: global_Color_light_100.value, - marginBottom: '25px', - marginLeft: '10px' - } - } - } -}); - -export default () => ({ className: css(styles.demoLayout) }); diff --git a/packages/patternfly-4/react-core/.babelrc.js b/packages/patternfly-4/react-core/.babelrc.js index 7a011c3b2d0..1f8acd1a200 100644 --- a/packages/patternfly-4/react-core/.babelrc.js +++ b/packages/patternfly-4/react-core/.babelrc.js @@ -2,7 +2,7 @@ const babelENV = process.env.BABEL_ENV || 'development'; const modules = babelENV !== 'production:esm' ? 'commonjs' : false; module.exports = { - presets: [['@babel/env', { modules }], '@babel/preset-typescript', '@babel/react'], + presets: [['@babel/env', { modules }], '@babel/react'], ignore: (() => { const ignore = ['src/**/__snapshots__']; ignore.push('src/**/*.d.ts'); @@ -14,6 +14,7 @@ module.exports = { env: { 'production:esm': { plugins: [ + '@babel/plugin-transform-typescript', 'babel-plugin-typescript-to-proptypes', '@babel/plugin-proposal-export-default-from', '@babel/proposal-class-properties', @@ -30,6 +31,7 @@ module.exports = { }, 'production:cjs': { plugins: [ + '@babel/plugin-transform-typescript', 'babel-plugin-typescript-to-proptypes', '@babel/plugin-proposal-export-default-from', '@babel/proposal-class-properties', diff --git a/packages/patternfly-4/react-core/package.json b/packages/patternfly-4/react-core/package.json index 9a35acfceae..9ae2d82ddcd 100644 --- a/packages/patternfly-4/react-core/package.json +++ b/packages/patternfly-4/react-core/package.json @@ -28,6 +28,7 @@ }, "homepage": "https://github.com/patternfly/patternfly-react#readme", "scripts": { + "babel": "babel", "build": "yarn typecheck && yarn build:babel && yarn build:types && node ./scripts/copyTS.js && node ./build/copyStyles.js", "build:babel": "concurrently 'yarn build:babel:cjs' 'yarn build:babel:esm' && yarn build:babel:umd", "build:babel:cjs": "cross-env BABEL_ENV=production:cjs babel src --out-dir dist/js --extensions '.js,jsx,.ts,.tsx'", @@ -54,10 +55,10 @@ "@babel/plugin-proposal-export-default-from": "^7.0.0", "@babel/plugin-proposal-export-namespace-from": "^7.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.0.0", "@babel/plugin-transform-object-assign": "^7.0.0", "@babel/preset-env": "^7.0.0", "@babel/preset-react": "^7.0.0", - "@babel/preset-typescript": "^7.0.0", "@patternfly/patternfly": "1.0.240", "@types/enzyme": "3.9.0", "@types/exenv": "^1.2.0", @@ -83,4 +84,4 @@ "react": "^16.4.0", "react-dom": "^15.6.2 || ^16.4.0" } -} +} \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Alert/Alert.docs.js b/packages/patternfly-4/react-core/src/components/Alert/Alert.docs.js deleted file mode 100644 index 0d7061db9cb..00000000000 --- a/packages/patternfly-4/react-core/src/components/Alert/Alert.docs.js +++ /dev/null @@ -1,41 +0,0 @@ -import { Alert, AlertVariant, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; -import SuccessExample from './examples/SuccessAlert'; -import DangerExample from './examples/DangerAlert'; -import InfoExample from './examples/InfoAlert'; -import WarningExample from './examples/WarningAlert'; -import getContainerProps from './examples/common/getContainerProps'; - -export default { - title: 'Alert', - components: { - Alert, - AlertActionCloseButton, - AlertActionLink - }, - enumValues: { - 'Object.values(AlertVariant)': Object.values(AlertVariant) - }, - variablesRoot: 'pf-c-alert', - examples: [ - { - component: SuccessExample, - title: 'Success Alert', - getContainerProps - }, - { - component: DangerExample, - title: 'Danger Alert', - getContainerProps - }, - { - component: WarningExample, - title: 'Warning Alert', - getContainerProps - }, - { - component: InfoExample, - title: 'Info Alert', - getContainerProps - } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Alert/Alert.md b/packages/patternfly-4/react-core/src/components/Alert/Alert.md index 9c6a092baa4..6f6f08a41f7 100644 --- a/packages/patternfly-4/react-core/src/components/Alert/Alert.md +++ b/packages/patternfly-4/react-core/src/components/Alert/Alert.md @@ -8,10 +8,13 @@ import React from 'react'; import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; class InfoAlert extends React.Component { - state = { alertOneVisible: true, alertTwoVisible: true }; - hideAlertOne = () => this.setState({ alertOneVisible: false }); - hideAlertTwo = () => this.setState({ alertTwoVisible: false }); - + constructor(props) { + super(props) + this.state = { alertOneVisible: true, alertTwoVisible: true }; + this.hideAlertOne = () => this.setState({ alertOneVisible: false }); + this.hideAlertTwo = () => this.setState({ alertTwoVisible: false }); + } + render() { const { alertOneVisible, alertTwoVisible } = this.state; return ( @@ -46,10 +49,12 @@ import React from 'react'; import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; class SuccessAlert extends React.Component { - state = { alertOneVisible: true, alertTwoVisible: true }; - hideAlertOne = () => this.setState({ alertOneVisible: false }); - hideAlertTwo = () => this.setState({ alertTwoVisible: false }); - + constructor(props) { + super(props) + this.state = { alertOneVisible: true, alertTwoVisible: true }; + this.hideAlertOne = () => this.setState({ alertOneVisible: false }); + this.hideAlertTwo = () => this.setState({ alertTwoVisible: false }); + } render() { const { alertOneVisible, alertTwoVisible } = this.state; return ( @@ -88,10 +93,12 @@ import React from 'react'; import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; class WarningAlert extends React.Component { - state = { alertOneVisible: true, alertTwoVisible: true }; - hideAlertOne = () => this.setState({ alertOneVisible: false }); - hideAlertTwo = () => this.setState({ alertTwoVisible: false }); - + constructor(props) { + super(props) + this.state = { alertOneVisible: true, alertTwoVisible: true }; + this.hideAlertOne = () => this.setState({ alertOneVisible: false }); + this.hideAlertTwo = () => this.setState({ alertTwoVisible: false }); + } render() { const { alertOneVisible, alertTwoVisible } = this.state; return ( @@ -130,10 +137,12 @@ import React from 'react'; import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; class DangerAlert extends React.Component { - state = { alertOneVisible: true, alertTwoVisible: true }; - hideAlertOne = () => this.setState({ alertOneVisible: false }); - hideAlertTwo = () => this.setState({ alertTwoVisible: false }); - + constructor(props) { + super(props) + this.state = { alertOneVisible: true, alertTwoVisible: true }; + this.hideAlertOne = () => this.setState({ alertOneVisible: false }); + this.hideAlertTwo = () => this.setState({ alertTwoVisible: false }); + } render() { const { alertOneVisible, alertTwoVisible } = this.state; return ( diff --git a/packages/patternfly-4/react-core/src/components/Alert/examples/DangerAlert.js b/packages/patternfly-4/react-core/src/components/Alert/examples/DangerAlert.js deleted file mode 100644 index e0d3d3edd5f..00000000000 --- a/packages/patternfly-4/react-core/src/components/Alert/examples/DangerAlert.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; - -class DangerAlert extends React.Component { - state = { alertOneVisible: true, alertTwoVisible: true }; - hideAlertOne = () => this.setState({ alertOneVisible: false }); - hideAlertTwo = () => this.setState({ alertTwoVisible: false }); - - render() { - const { alertOneVisible, alertTwoVisible } = this.state; - return ( - - {alertOneVisible && ( - } />} - > - Danger alert description. This is a link. - - )} - {alertTwoVisible && ( - } - /> - )} - Action Button} /> - - - ); - } -} - -export default DangerAlert; diff --git a/packages/patternfly-4/react-core/src/components/Alert/examples/InfoAlert.js b/packages/patternfly-4/react-core/src/components/Alert/examples/InfoAlert.js deleted file mode 100644 index 9675906f7bd..00000000000 --- a/packages/patternfly-4/react-core/src/components/Alert/examples/InfoAlert.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; - -class InfoAlert extends React.Component { - state = { alertOneVisible: true, alertTwoVisible: true }; - hideAlertOne = () => this.setState({ alertOneVisible: false }); - hideAlertTwo = () => this.setState({ alertTwoVisible: false }); - - render() { - const { alertOneVisible, alertTwoVisible } = this.state; - return ( - - {alertOneVisible && ( - } - > - Info alert description. This is a link. - - )} - {alertTwoVisible && ( - } - /> - )} - Action Button} /> - - - ); - } -} - -export default InfoAlert; diff --git a/packages/patternfly-4/react-core/src/components/Alert/examples/SuccessAlert.js b/packages/patternfly-4/react-core/src/components/Alert/examples/SuccessAlert.js deleted file mode 100644 index edc76b61bb1..00000000000 --- a/packages/patternfly-4/react-core/src/components/Alert/examples/SuccessAlert.js +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; - -class SuccessAlert extends React.Component { - state = { alertOneVisible: true, alertTwoVisible: true }; - hideAlertOne = () => this.setState({ alertOneVisible: false }); - hideAlertTwo = () => this.setState({ alertTwoVisible: false }); - - render() { - const { alertOneVisible, alertTwoVisible } = this.state; - return ( - - {alertOneVisible && ( - } - > - Success alert description. This is a link. - - )} - {alertTwoVisible && ( - } - /> - )} - Action Button} - /> - - - ); - } -} - -export default SuccessAlert; diff --git a/packages/patternfly-4/react-core/src/components/Alert/examples/WarningAlert.js b/packages/patternfly-4/react-core/src/components/Alert/examples/WarningAlert.js deleted file mode 100644 index a98febd1958..00000000000 --- a/packages/patternfly-4/react-core/src/components/Alert/examples/WarningAlert.js +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { Alert, AlertActionLink, AlertActionCloseButton } from '@patternfly/react-core'; - -class WarningAlert extends React.Component { - state = { alertOneVisible: true, alertTwoVisible: true }; - hideAlertOne = () => this.setState({ alertOneVisible: false }); - hideAlertTwo = () => this.setState({ alertTwoVisible: false }); - - render() { - const { alertOneVisible, alertTwoVisible } = this.state; - return ( - - {alertOneVisible && ( - } - > - Warning alert description. This is a link. - - )} - {alertTwoVisible && ( - } - /> - )} - Action Button} - /> - - - ); - } -} - -export default WarningAlert; diff --git a/packages/patternfly-4/react-core/src/components/Avatar/Avatar.docs.js b/packages/patternfly-4/react-core/src/components/Avatar/Avatar.docs.js deleted file mode 100644 index cabe8b14fe1..00000000000 --- a/packages/patternfly-4/react-core/src/components/Avatar/Avatar.docs.js +++ /dev/null @@ -1,17 +0,0 @@ -import { Avatar } from '@patternfly/react-core'; -import Simple from './examples/SimpleAvatar'; - -export default { - title: 'Avatar', - components: { - Avatar - }, - variablesRoot: 'pf-c-avatar', - examples: [ - { - component: Simple, - displayName: 'SimpleAvatar', - title: 'Simple Avatar' - } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Avatar/Avatar.md b/packages/patternfly-4/react-core/src/components/Avatar/Avatar.md index 671d2401ab7..b2c390edf85 100644 --- a/packages/patternfly-4/react-core/src/components/Avatar/Avatar.md +++ b/packages/patternfly-4/react-core/src/components/Avatar/Avatar.md @@ -6,7 +6,7 @@ cssPrefix: "pf-c-avatar" ```js import { Avatar } from '@patternfly/react-core'; -import avatarImg from './examples/img_avatar.svg'; +import { avatarImg } from './examples/imgAvatar.svg'; ``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Avatar/examples/SimpleAvatar.js b/packages/patternfly-4/react-core/src/components/Avatar/examples/SimpleAvatar.js deleted file mode 100644 index 85d2ef5cfec..00000000000 --- a/packages/patternfly-4/react-core/src/components/Avatar/examples/SimpleAvatar.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import { Avatar } from '@patternfly/react-core'; -import avatarImg from './img_avatar.svg'; - -class SimpleAvatar extends React.Component { - render() { - return ; - } -} - -export default SimpleAvatar; diff --git a/packages/patternfly-4/react-core/src/components/Avatar/examples/img_avatar.svg b/packages/patternfly-4/react-core/src/components/Avatar/examples/avatarImg.svg similarity index 100% rename from packages/patternfly-4/react-core/src/components/Avatar/examples/img_avatar.svg rename to packages/patternfly-4/react-core/src/components/Avatar/examples/avatarImg.svg diff --git a/packages/patternfly-4/react-core/src/components/Badge/examples/ReadBadge.js b/packages/patternfly-4/react-core/src/components/Badge/examples/ReadBadge.js deleted file mode 100644 index 4e6065cadee..00000000000 --- a/packages/patternfly-4/react-core/src/components/Badge/examples/ReadBadge.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { Badge } from '@patternfly/react-core'; - -class ReadBadge extends React.Component { - render() { - return ( - - 7 24 240 999+ - - ); - } -} - -export default ReadBadge; diff --git a/packages/patternfly-4/react-core/src/components/Badge/examples/UnreadBadge.js b/packages/patternfly-4/react-core/src/components/Badge/examples/UnreadBadge.js deleted file mode 100644 index f38334d79cf..00000000000 --- a/packages/patternfly-4/react-core/src/components/Badge/examples/UnreadBadge.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { Badge } from '@patternfly/react-core'; - -class UnreadBadge extends React.Component { - render() { - return ( - - 7 24 240 999+ - - ); - } -} - -export default UnreadBadge; diff --git a/packages/patternfly-4/react-core/src/components/Badge/examples/common/getContainerProps.js b/packages/patternfly-4/react-core/src/components/Badge/examples/common/getContainerProps.js deleted file mode 100644 index b3d2b3d3f90..00000000000 --- a/packages/patternfly-4/react-core/src/components/Badge/examples/common/getContainerProps.js +++ /dev/null @@ -1,9 +0,0 @@ -import { css, StyleSheet } from '@patternfly/react-styles'; - -const styles = StyleSheet.create({ - demoLayout: { - backgroundColor: '#fff' - } -}); - -export default () => ({ className: css(styles.demoLayout) }); diff --git a/packages/patternfly-4/react-core/src/components/Page/examples/common/getContainerProps.js b/packages/patternfly-4/react-core/src/components/Page/examples/common/getContainerProps.js deleted file mode 100644 index c8e5ac272fc..00000000000 --- a/packages/patternfly-4/react-core/src/components/Page/examples/common/getContainerProps.js +++ /dev/null @@ -1,19 +0,0 @@ -import { StyleSheet, css } from '@patternfly/react-styles'; -import { global_BorderColor as borderColor, global_BorderWidth_md as borderWidth } from '@patternfly/react-tokens'; - -const styles = StyleSheet.create({ - demoLayout: { - '& .pf-l-page > *': { - borderWidth: borderWidth.var, - borderStyle: 'dashed', - borderColor: borderColor.var - }, - '& .pf-l-page__header > *': { - borderWidth: borderWidth.var, - borderStyle: 'dashed', - borderColor: borderColor.var - } - } -}); - -export default () => ({ className: css(styles.demoLayout) }); diff --git a/packages/patternfly-4/react-core/src/components/Radio/examples/common/getContainerProps.js b/packages/patternfly-4/react-core/src/components/Radio/examples/common/getContainerProps.js deleted file mode 100644 index b3d2b3d3f90..00000000000 --- a/packages/patternfly-4/react-core/src/components/Radio/examples/common/getContainerProps.js +++ /dev/null @@ -1,9 +0,0 @@ -import { css, StyleSheet } from '@patternfly/react-styles'; - -const styles = StyleSheet.create({ - demoLayout: { - backgroundColor: '#fff' - } -}); - -export default () => ({ className: css(styles.demoLayout) }); diff --git a/packages/patternfly-4/react-core/src/components/Wizard/Wizard.md b/packages/patternfly-4/react-core/src/components/Wizard/Wizard.md index da14c000e8d..f0e59dd011e 100644 --- a/packages/patternfly-4/react-core/src/components/Wizard/Wizard.md +++ b/packages/patternfly-4/react-core/src/components/Wizard/Wizard.md @@ -8,15 +8,17 @@ import React from 'react'; import { Button, Wizard, BackgroundImageSrc } from '@patternfly/react-core'; class SimpleWizard extends React.Component { - state = { - isOpen: false - }; - - toggleOpen = () => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; + constructor(props) { + super(props); + this.state = { + isOpen: false + }; + this.toggleOpen = () => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } render() { const { isOpen } = this.state; @@ -78,145 +80,65 @@ import React from 'react'; import { Button, Wizard, BackgroundImageSrc } from '@patternfly/react-core'; import React from 'react'; import { Form, FormGroup, TextInput } from '@patternfly/react-core'; - -class SampleFormOne extends React.Component { - state = { - value: this.props.formValue, - isValid: this.props.isFormValid - }; - - handleTextInputChange = value => { - const isValid = /^\d+$/.test(value); - this.setState({ value, isValid }); - this.props.onChange(isValid, value); - }; - - render() { - const { value, isValid } = this.state; - - return ( -
    - - - - - ); - } -} - -class SampleFormTwo extends React.Component { - state = { - value: this.props.formValue, - isValid: this.props.isFormValid - }; - - handleTextInputChange = value => { - const isValid = /^\d+$/.test(value); - this.setState({ value, isValid }); - this.props.onChange(isValid, value); - }; - - render() { - const { value, isValid } = this.state; - - return ( -
    - - - - - ); - } -} +import { SampleFormOne, SampleFormTwo } from './examples'; class ValidationWizard extends React.Component { - state = { - isOpen: false, - isFormValidA: false, - formValueA: 'Five', - isFormValidB: false, - formValueB: 'Six', - allStepsValid: false - }; - - toggleOpen = () => { - this.setState(({ isOpen }) => ({ - isOpen: !isOpen - })); - }; - - onFormChangeA = (isValid, value) => { - this.setState( - { - isFormValidA: isValid, - formValueA: value - }, - this.areAllStepsValid - ); - }; - - onFormChangeB = (isValid, value) => { - this.setState( - { - isFormValidB: isValid, - formValueB: value - }, - this.areAllStepsValid - ); - }; - - areAllStepsValid = () => { - this.setState({ - allStepsValid: this.state.isFormValidA && this.state.isFormValidB - }); - }; - - onNext = ({ id, name }, { prevId, prevName }) => { - console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); - this.areAllStepsValid(); - }; - - onBack = ({ id, name }, { prevId, prevName }) => { - console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); - this.areAllStepsValid(); - }; - - onGoToStep = ({ id, name }, { prevId, prevName }) => { - console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); - }; - - onSave = () => { - console.log('Saved and closed the wizard'); - this.setState({ - isOpen: false - }); - }; + constructor(props) { + super(props); + this.state = { + isOpen: false, + isFormValidA: false, + formValueA: 'Five', + isFormValidB: false, + formValueB: 'Six', + allStepsValid: false + }; + this.toggleOpen = () => { + this.setState(({ isOpen }) => ({ + isOpen: !isOpen + })); + }; + this.onFormChangeA = (isValid, value) => { + this.setState( + { + isFormValidA: isValid, + formValueA: value + }, + this.areAllStepsValid + ); + }; + this.onFormChangeB = (isValid, value) => { + this.setState( + { + isFormValidB: isValid, + formValueB: value + }, + this.areAllStepsValid + ); + }; + this.areAllStepsValid = () => { + this.setState({ + allStepsValid: this.state.isFormValidA && this.state.isFormValidB + }); + }; + this.onNext = ({ id, name }, { prevId, prevName }) => { + console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); + this.areAllStepsValid(); + }; + this.onBack = ({ id, name }, { prevId, prevName }) => { + console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); + this.areAllStepsValid(); + }; + this.onGoToStep = ({ id, name }, { prevId, prevName }) => { + console.log(`current id: ${id}, current name: ${name}, previous id: ${prevId}, previous name: ${prevName}`); + }; + this.onSave = () => { + console.log('Saved and closed the wizard'); + this.setState({ + isOpen: false + }); + }; + } render() { const { isOpen, isFormValidA, isFormValidB, formValueA, formValueB, allStepsValid } = this.state; diff --git a/packages/patternfly-4/react-core/src/components/Wizard/examples/SampleFormOne.js b/packages/patternfly-4/react-core/src/components/Wizard/examples/SampleFormOne.js new file mode 100644 index 00000000000..6aa66ce6ae4 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Wizard/examples/SampleFormOne.js @@ -0,0 +1,42 @@ +import React from 'react'; +import { Form, FormGroup, TextInput } from '@patternfly/react-core'; + +class SampleFormOne extends React.Component { + state = { + value: this.props.formValue, + isValid: this.props.isFormValid + }; + + handleTextInputChange = value => { + const isValid = /^\d+$/.test(value); + this.setState({ value, isValid }); + this.props.onChange(isValid, value); + }; + + render() { + const { value, isValid } = this.state; + + return ( +
    + + + + + ); + } +} + +export default SampleFormOne; diff --git a/packages/patternfly-4/react-core/src/components/Wizard/examples/SampleFormTwo.js b/packages/patternfly-4/react-core/src/components/Wizard/examples/SampleFormTwo.js new file mode 100644 index 00000000000..a048070a6ea --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Wizard/examples/SampleFormTwo.js @@ -0,0 +1,42 @@ +import React from 'react'; +import { Form, FormGroup, TextInput } from '@patternfly/react-core'; + +class SampleFormTwo extends React.Component { + state = { + value: this.props.formValue, + isValid: this.props.isFormValid + }; + + handleTextInputChange = value => { + const isValid = /^\d+$/.test(value); + this.setState({ value, isValid }); + this.props.onChange(isValid, value); + }; + + render() { + const { value, isValid } = this.state; + + return ( +
    + + + + + ); + } +} + +export default SampleFormTwo; diff --git a/packages/patternfly-4/react-docs/gatsby-config.js b/packages/patternfly-4/react-docs/gatsby-config.js index 57bd142cafe..34b39375371 100644 --- a/packages/patternfly-4/react-docs/gatsby-config.js +++ b/packages/patternfly-4/react-docs/gatsby-config.js @@ -9,6 +9,7 @@ module.exports = { `gatsby-plugin-react-helmet`, { // react-core source files to pipe through react-docgen // react-core .md files to pipe through remark + // react-core example/* files to dynamically require in various ways resolve: `gatsby-source-filesystem`, options: { name: `react-core`, @@ -17,6 +18,7 @@ module.exports = { }, }, `gatsby-transformer-react-docgen-typescript`, + `gatsby-transformer-react-examples`, `gatsby-transformer-remark` ], } diff --git a/packages/patternfly-4/react-docs/gatsby-node.js b/packages/patternfly-4/react-docs/gatsby-node.js index 029c6fb4ef8..e5e0089986f 100644 --- a/packages/patternfly-4/react-docs/gatsby-node.js +++ b/packages/patternfly-4/react-docs/gatsby-node.js @@ -4,42 +4,38 @@ * See: https://www.gatsbyjs.org/docs/node-apis/ */ -const helpers = require("./src/helpers/navHelpers") -const path = require("path") +const helpers = require("./src/helpers/navHelpers"); +const path = require("path"); exports.createPages = ({ actions, graphql }) => { - const { createPage } = actions + const templatePath = path.resolve(`./src/templates/markdownTemplate.js`) - const blogPostTemplate = path.resolve(`./src/templates/markdownTemplate.js`) - - return graphql(` -{ - allMarkdownRemark { - edges { - node { - fileAbsolutePath + const markdown = graphql(` + { + allMarkdownRemark { + edges { + node { + fileAbsolutePath + rawMarkdownBody + } } } - } -} - `).then(result => { - if (result.errors) { - return Promise.reject(result.errors) - } - - result.data.allMarkdownRemark.edges.forEach(({ node }) => { - const pagePath = helpers.getPagePath(node.fileAbsolutePath); // node.fileAbsolutePath // - const folderName = helpers.getParentFolder(node.fileAbsolutePath); // 'asdf' // + }`); - console.log('adding page', pagePath); - createPage({ - path: pagePath, - component: blogPostTemplate, + return markdown.then(markdownRemark => { + markdownRemark.data.allMarkdownRemark.edges.forEach(({ node }) => { + const componentName = helpers.getFileName(node.fileAbsolutePath); + const folderName = helpers.getParentFolder(node.fileAbsolutePath); + console.log('adding page', `/${componentName}`); + actions.createPage({ + path: `/${componentName}`, + component: templatePath, context: { fileAbsolutePath: node.fileAbsolutePath, // Helps us get the markdown - pathRegex: `/${folderName}\/.*/` // Helps us get the docgenned props + pathRegex: `/${folderName}\/.*/`, // Helps us get the docgenned props + examplesRegex: `/${folderName}\/examples\/.*/`, // Helps us inject the example files } - }) - }) + }); + }); }) }; diff --git a/packages/patternfly-4/react-docs/package.json b/packages/patternfly-4/react-docs/package.json index 32e8d23261b..0b2ce00a1a8 100644 --- a/packages/patternfly-4/react-docs/package.json +++ b/packages/patternfly-4/react-docs/package.json @@ -6,22 +6,23 @@ "license": "MIT", "private": true, "scripts": { - "clean": "rimraf .cache .tmp dist public static", + "clean": "rimraf .cache dist public static", "develop": "gatsby develop", - "build": "gatsby build --prefix-paths" + "build": "gatsby build --prefix-paths", + "serve": "gatsby serve --prefix-paths" }, "dependencies": { - "@patternfly/react-tokens": "^2.2.0", - "acorn": "^6.1.1", - "acorn-class-fields": "^0.3.1", - "acorn-jsx": "^5.0.1", - "astring": "^1.3.1", + "@patternfly/react-charts": "file:../react-charts", + "@patternfly/react-core": "file:../react-core", + "@patternfly/react-icons": "file:../react-icons", + "@patternfly/react-styled-system": "file:../react-styled-system", + "@patternfly/react-styles": "file:../react-styles", + "@patternfly/react-table": "file:../react-table", + "@patternfly/react-tokens": "file:../react-tokens", "gatsby": "^2.1.37", - "gatsby-image": "^2.0.34", "gatsby-plugin-react-helmet": "^3.0.10", "gatsby-source-filesystem": "^2.0.27", "gatsby-transformer-remark": "^2.3.7", - "prop-types": "^15.7.2", "react": "^16.8.4", "react-dom": "^16.8.4", "react-helmet": "^5.2.0", diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js index 9532b0a5eb7..67341b338ba 100644 --- a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/gatsby-node.js @@ -4,7 +4,8 @@ const docgenJavascript = require('react-docgen') function isSource(node) { if (!node || node.relativePath.indexOf('/example') !== -1 || - node.relativePath.indexOf('.docs') !== -1) + node.relativePath.indexOf('.docs') !== -1 || + node.relativePath.indexOf('.md') !== -1) return false; return true; @@ -38,6 +39,7 @@ function flattenProps(props) { return res; } +// Docs https://www.gatsbyjs.org/docs/actions/#createNode async function onCreateNode({ node, actions, @@ -45,28 +47,8 @@ async function onCreateNode({ createNodeId, createContentDigest, }) { - const { createNode, createParentChildLink } = actions - if (!canParse(node)) return - // Docs https://www.gatsbyjs.org/docs/actions/#createNode - function registerNode(node, result) { - const metadataNode = { - ...result, - path: node.relativePath, - basePath: node.relativePath.split('/')[0], - id: createNodeId(`${node.id}imunique${node.relativePath}`), - children: [], - parent: node.id, - internal: { - contentDigest: createContentDigest(node), - type: `ComponentMetadata`, - }, - } - createNode(metadataNode) - createParentChildLink({ parent: node, child: metadataNode }) - } - const sourceText = await loadNodeContent(node); let parsed = null; try { @@ -82,11 +64,22 @@ async function onCreateNode({ } if (parsed) { - registerNode(node, { + const metadataNode = { name: parsed.displayName, description: parsed.description, - props: flattenProps(parsed.props) - }); + props: flattenProps(parsed.props), + path: node.relativePath, + basePath: node.relativePath.split('/')[0], + id: createNodeId(`${node.id}imunique${node.relativePath}`), + children: [], + parent: node.id, + internal: { + contentDigest: createContentDigest(node), + type: `ComponentMetadata`, + }, + } + actions.createNode(metadataNode) + actions.createParentChildLink({ parent: node, child: metadataNode }) } } diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/package.json b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/package.json index 04dd4e14ec4..59fb739588d 100644 --- a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/package.json +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-transformer-react-docgen-typescript", - "description": "Transformer JSX/TSX source files into JSON metadata", + "description": "Transforms JSX/TSX source files into JSON metadata", "version": "0.0.1", "author": "Red Hat", "license": "MIT", diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test.js b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test.js deleted file mode 100644 index 290e54cdf21..00000000000 --- a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test.js +++ /dev/null @@ -1,5 +0,0 @@ -const docgenTypescript = require('react-docgen-typescript').withDefaultConfig() - -const res = docgenTypescript.parse('/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Avatar/Avatar.tsx'); - -console.log(res) \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test1.json b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test1.json deleted file mode 100644 index b8312e5c0e3..00000000000 --- a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-docgen-typescript/test1.json +++ /dev/null @@ -1,216 +0,0 @@ -{ isOpen: { defaultValue: { value: 'false' - }, - description: 'True to show the wizard', - name: 'isOpen', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'boolean' - } - }, - title: { defaultValue: null, - description: 'The wizard title', - name: 'title', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: true, - type: { name: 'string' - } - }, - description: { defaultValue: { value: '' - }, - description: 'The wizard description', - name: 'description', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string' - } - }, - backgroundImgSrc: { defaultValue: null, - description: 'Mapping of image sizes to image paths', - name: 'backgroundImgSrc', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string | BackgroundImageSrcMap' - } - }, - onClose: { defaultValue: null, - description: 'Calback function to close the wizard', - name: 'onClose', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: '() => void' - } - }, - onSave: { defaultValue: null, - description: 'Callback function to save at the end of the wizard, if not specified uses onClose', - name: 'onSave', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: '() => void' - } - }, - onNext: { defaultValue: { value: 'null' - }, - description: 'Callback function after Next button is clicked', - name: 'onNext', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'WizardStepFunctionType' - } - }, - onBack: { defaultValue: { value: 'null' - }, - description: 'Callback function after Back button is clicked', - name: 'onBack', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'WizardStepFunctionType' - } - }, - onGoToStep: { defaultValue: { value: 'null' - }, - description: 'Calback function when a step in the nav is clicked', - name: 'onGoToStep', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'WizardStepFunctionType' - } - }, - className: { defaultValue: { value: '' - }, - description: 'Additional classes spread to the Wizard', - name: 'className', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string' - } - }, - steps: { defaultValue: null, - description: 'The wizard steps configuration object', - name: 'steps', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: true, - type: { name: 'WizardStep[]' - } - }, - startAtStep: { defaultValue: { value: '1' - }, - description: 'The step to start the wizard at (1 or higher)', - name: 'startAtStep', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'number' - } - }, - nextButtonText: { defaultValue: { value: 'Next' - }, - description: 'The Next button text', - name: 'nextButtonText', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string' - } - }, - backButtonText: { defaultValue: { value: 'Back' - }, - description: 'The Back button text', - name: 'backButtonText', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string' - } - }, - cancelButtonText: { defaultValue: { value: 'Cancel' - }, - description: 'The Cancel button text', - name: 'cancelButtonText', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string' - } - }, - lastStepButtonText: { defaultValue: { value: 'Save' - }, - description: 'The text for the Next button on the last step', - name: 'lastStepButtonText', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string' - } - }, - footerRightAlign: { defaultValue: { value: 'false' - }, - description: 'Alignment of the footer items', - name: 'footerRightAlign', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'boolean' - } - }, - ariaLabelCloseButton: { defaultValue: { value: 'Close' - }, - description: 'aria-label for the close button', - name: 'ariaLabelCloseButton', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string' - } - }, - ariaLabelNav: { defaultValue: { value: 'Steps' - }, - description: 'aria-label for the Nav', - name: 'ariaLabelNav', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'string' - } - }, - hasBodyPadding: { defaultValue: { value: 'true' - }, - description: 'Can remove the default padding around the main body content by setting this to false', - name: 'hasBodyPadding', - parent: { fileName: '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Wizard/Wizard.tsx', - name: 'WizardProps' - }, - required: false, - type: { name: 'boolean' - } - } -} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-examples/gatsby-node.js b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-examples/gatsby-node.js new file mode 100644 index 00000000000..8a09c02939e --- /dev/null +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-examples/gatsby-node.js @@ -0,0 +1,60 @@ +const path = require('path'); +const fs = require('fs'); + + +function isExample(node) { + if (!node || !node.relativePath || node.relativePath.indexOf('/example') === -1) + return false; + + return true; +} + +function isJSX(node) { + return node.internal.mediaType === `application/javascript` || + node.internal.mediaType === `text/jsx` +} + +function isImage(node) { + return (/gif|jpe?g|tiff|png|svg$/i).test(node.extension) +} + +function canParse(node) { + return node && isExample(node) && (isJSX(node) || isImage(node)); +} + +let imports = {}; +// Docs https://www.gatsbyjs.org/docs/actions/#createNode +exports.onCreateNode = ({ node, actions, createNodeId, createContentDigest }) => { + if (!canParse(node)) return + + const extension = path.extname(node.absolutePath); + const importName = path.basename(node.absolutePath, extension).replace('-', '').replace('_', '').trim(); + + if (imports[importName]) + console.warn(`Import ${importName} from ${node.absolutePath} also appears in ${imports[importName].path}`); + + imports[importName] = { + importString: `export { default as ${importName} } from '${node.absolutePath}';\n`, + path: node.absolutePath + }; + + let importString = ''; + Object.values(imports).forEach(imp => importString += imp.importString); + + fs.writeFileSync('./.cache/example_index.js', importString); + + const metadataNode = { + importName: importName, + path: node.relativePath, + basePath: node.relativePath.split('/')[0], + id: createNodeId(`${node.id}imunique${node.relativePath}`), + children: [], + parent: node.id, + internal: { + contentDigest: createContentDigest(node), + type: `ComponentExamples`, + }, + } + actions.createNode(metadataNode) + actions.createParentChildLink({ parent: node, child: metadataNode }) +} diff --git a/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-examples/package.json b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-examples/package.json new file mode 100644 index 00000000000..f4d8264138b --- /dev/null +++ b/packages/patternfly-4/react-docs/plugins/gatsby-transformer-react-examples/package.json @@ -0,0 +1,23 @@ +{ + "name": "gatsby-transformer-react-assets", + "description": "Transforms JSX into compiled JS", + "version": "0.0.1", + "author": "Red Hat", + "license": "MIT", + "private": true, + "scripts": { + "babel": "babel", + "clean": "rimraf .cache .tmp dist public static", + "develop": "gatsby develop", + "build": "gatsby build --prefix-paths" + }, + "dependencies": { + "gatsby": "^2.1.37" + }, + "keywords": [ + "gatsby", + "gatsby-plugin", + "gatsby-transformer-plugin", + "react" + ] +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js b/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js index 13a37f88d6a..9ec89df296f 100644 --- a/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js +++ b/packages/patternfly-4/react-docs/src/components/componentDocs/liveEdit.js @@ -1,64 +1,30 @@ import React from 'react'; -import { LiveProvider, LiveEditor, LiveError, LivePreview, withLive } from 'react-live'; -// Acorn has the quirk of not being able to be hoisted in yarn workspaces. -import { Parser } from 'acorn'; -import classFields from 'acorn-class-fields'; -import jsx from 'acorn-jsx'; -import { generate } from 'astring' -import jsxGenerator from './astring-jsx' +import { LiveProvider, LiveEditor, LiveError, LivePreview } from 'react-live'; -// Things to inject -import * as CoreComponents from '@patternfly/react-core'; -import * as CoreIcons from '@patternfly/react-icons'; -import * as TableComponents from '@patternfly/react-table'; -import * as ChartComponents from '@patternfly/react-charts'; -import * as StyledSystemComponents from '@patternfly/react-styled-system'; -import { css } from '@patternfly/react-styles'; -import avatarImg from '../../../../react-core/src/components/Avatar/examples/img_avatar.svg'; class LiveEdit extends React.Component { - static acorn = Parser.extend(jsx()).extend(classFields); - constructor(props) { super(props); // Our children are elements inside a tag created from rendered markdown - this.scope = this.getScope(this.props.children[0]); - this.code = this.makeCodeES6(this.props.children[0]); - } - - makeCodeES6(code) { - // Before you think about dropping Babel in here, let me remind you it's 1.5MB and we should - // keep this site lightweight for building and testing. Instead, think about linking to a - // real Javascript editor like Blaze, JSBin, JSFiddle, Codepen, etc. - - // console.log('parsing', toParse); - code = this.transformCode(code); - console.log('giving acorn', code); - const ast = LiveEdit.acorn.parse(code, { ecmaVersion: 6 }); - console.log('givinst astring', ast); - const res = generate(ast, { generator: jsxGenerator }); - console.log('transformed', res); - - return res; - } - - getScope(code) { - const res = { React, avatarImg }; - - const addToScope = (importPath, mod) => { - if (code.indexOf(importPath) !== -1) { - console.log('react-live importing', importPath); - Object.entries(mod).forEach(([key, value]) => res[key] = value); - } - } - addToScope('@patternfly/react-core', CoreComponents); - addToScope('@patternfly/react-icons', CoreIcons); - addToScope('@patternfly/react-table', TableComponents); - addToScope('@patternfly/react-charts', ChartComponents); - addToScope('@patternfly/react-styles', css); - addToScope('@patternfly/react-styled-system', StyledSystemComponents); - - return res; + this.code = this.props.children[0]; + this.scope = this.props.scope; + this.scope.React = React; + console.log('scope', this.scope); + // this.scope = { + // React, + // ...CoreComponents, + // ...CoreIcons, + // ...TableComponents, + // ...ChartComponents, + // ...StyledSystemComponents, + // ...Styles + // }; + + // const fullPath = props.exampleResources[0]; + // const importName = fullPath.replace(/^.*[\\\/]/, '').replace(/\..*/, ''); + // console.log(importName, '=require', fullPath); + // console.log('confused', '/Users/zallen/src/patternfly-react/packages/patternfly-4/react-core/src/components/Avatar/examples/avatarImg.svg' === fullPath); + // this.scope.importName = require(fullPath); } transformCode(code) { @@ -67,9 +33,9 @@ class LiveEdit extends React.Component { return code; } // These don't actually do anything except make Buble mad - const toParse = code. - replace(/^\s*import.*/gm, ''). - replace(/^\s*export.*/gm, ''); + const toParse = code + .replace(/^\s*import.*/gm, '') + .replace(/^\s*export.*/gm, ''); return toParse; } diff --git a/packages/patternfly-4/react-docs/src/components/nav/nav.js b/packages/patternfly-4/react-docs/src/components/nav/nav.js index 6fa83312a68..bcbb5e64940 100644 --- a/packages/patternfly-4/react-docs/src/components/nav/nav.js +++ b/packages/patternfly-4/react-docs/src/components/nav/nav.js @@ -1,40 +1,40 @@ import React from "react" import { useStaticQuery, graphql } from "gatsby" import { Link } from "gatsby" -import { getPagePath } from '../../helpers/navHelpers' +import { getFileName } from '../../helpers/navHelpers' const Nav = () => { const data = useStaticQuery(graphql` -query SiteTitleQuery { - site { - siteMetadata { - title - } - } - allMarkdownRemark { - edges { - node { - fileAbsolutePath - frontmatter { + query SiteTitleQuery { + site { + siteMetadata { title } } - } - } -}`); + allMarkdownRemark { + edges { + node { + fileAbsolutePath + frontmatter { + title + } + } + } + } + }`); const orderedNodes = data.allMarkdownRemark.edges.map(edge => { - edge.node.page = getPagePath(edge.node.fileAbsolutePath) + edge.node.pageName = getFileName(edge.node.fileAbsolutePath) return edge.node - }).sort((n1, n2) => n1.page.localeCompare(n2.page)); + }).sort((n1, n2) => n1.pageName.localeCompare(n2.pageName)); return ( {data.site.siteMetadata.title}
      {orderedNodes.map(node => -
    • - {node.frontmatter.title} +
    • + {node.frontmatter.title}
    • )}
    diff --git a/packages/patternfly-4/react-docs/src/helpers/dynamicImports.js b/packages/patternfly-4/react-docs/src/helpers/dynamicImports.js new file mode 100644 index 00000000000..a39fc67a8e2 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/helpers/dynamicImports.js @@ -0,0 +1,36 @@ +// Dynamic imports +const reactCharts = require("@patternfly/react-charts"); +const reactCore = require("@patternfly/react-core"); +const reactIcons = require("@patternfly/react-icons"); +const reactStyled = require("@patternfly/react-styled-system"); +const reactStyles = require("@patternfly/react-styles"); +const reactTable = require("@patternfly/react-table"); +const reactTokens = require("@patternfly/react-tokens"); +// This is from our gatsby-transformer-react-examples plugin +const exampleComponents = require("../../.cache/example_index"); + + +let imports = { + "@patternfly/react-charts": reactCharts, + "@patternfly/react-core": reactCore, + "@patternfly/react-icons": reactIcons, + "@patternfly/react-styled-system": reactStyled, + "@patternfly/react-styles": reactStyles, + "@patternfly/react-table": reactTable, + "@patternfly/react-tokens": reactTokens +}; + +exports.getScope = (sourceCode, exampleResources) => { + let res = {}; + Object.entries(imports).forEach(([key, value]) => { + if (sourceCode.indexOf(key) !== -1) { + Object.keys(value).forEach(expor => res[expor] = value[expor]); + } + }); + + exampleResources.forEach(resource => { + res[resource] = exampleComponents[resource]; + }); + + return res; +} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/helpers/navHelpers.js b/packages/patternfly-4/react-docs/src/helpers/navHelpers.js index 53694c0cd15..431bcfa290e 100644 --- a/packages/patternfly-4/react-docs/src/helpers/navHelpers.js +++ b/packages/patternfly-4/react-docs/src/helpers/navHelpers.js @@ -1,11 +1,11 @@ const path = require("path") -exports.getPagePath = (filename) => { - const extension = path.extname(filename); - const componentName = path.basename(filename, extension).toLowerCase().trim(); - return `/components/${componentName}` +exports.getFileName = filename => { + const extension = path.extname(filename); + return path.basename(filename, extension).toLowerCase().trim(); +} + +exports.getParentFolder = filename => { + const split = filename.split('/'); + return split[split.length - 2]; // i.e. 'Alert' in '/ff/ff/Alert/AlertSomething.js' } -exports.getParentFolder = (filename) => { - const split = filename.split('/'); - return split[split.length - 2]; // i.e. 'Alert' in '/ff/ff/Alert/AlertSomething.js' -} \ No newline at end of file diff --git a/packages/patternfly-4/react-docs/src/pages/404.js b/packages/patternfly-4/react-docs/src/pages/404.js new file mode 100644 index 00000000000..25b96562344 --- /dev/null +++ b/packages/patternfly-4/react-docs/src/pages/404.js @@ -0,0 +1,10 @@ +import React from 'react'; + +const NotFoundPage = () => ( +
    +

    NOT FOUND

    +

    You just hit a route that doesn't exist... the sadness.

    +
    +); + +export default NotFoundPage; diff --git a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js index 3b1308c5f05..1473c467f79 100644 --- a/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js +++ b/packages/patternfly-4/react-docs/src/templates/markdownTemplate.js @@ -4,13 +4,23 @@ import { getUsedComponents } from './helpers' import SidebarLayout from "../components/sidebarLayout" import { Tokens, Props, LiveEdit } from "../components/componentDocs" import rehypeReact from "rehype-react" +import { getScope } from '../helpers/dynamicImports'; -const renderAst = new rehypeReact({ - createElement: React.createElement, - components: { - "code": LiveEdit - }, -}).Compiler + +const getRehypeReact = scope => { + return new rehypeReact({ + // Here we inject the scope property down to our liveEdit + createElement: (type, props, ...children) => { + if (typeof type === 'function') { + props.scope = scope; + } + return React.createElement(type, props, ...children); + }, + components: { + code: LiveEdit + }, + }).Compiler; +} export default function Template({ data, pageContext }) { // Exported components in the folder (i.e. src/components/Alerts/*) @@ -22,11 +32,18 @@ export default function Template({ data, pageContext }) { .filter(edge => propComponents.indexOf(edge.node.name) !== -1) .map(edge => { return { name: edge.node.name, props: edge.node.props } }); + // These get set at compile time, so no hot-reloading (which is good, we don't want) + // every single one of our packages' full dist in our bundle + let scope = getScope(data.markdownRemark.rawMarkdownBody, + data.exampleResources.edges.map(edge => edge.node.importName)); + + // https://github.com/rhysd/rehype-react#programmatic + // https://using-remark.gatsbyjs.org/custom-components + const renderAst = getRehypeReact(scope); + return

    {data.markdownRemark.frontmatter.title}

    - {/* https://using-remark.gatsbyjs.org/custom-components/ */} {renderAst(data.markdownRemark.htmlAst)} - {/*
    */}

    tokens

    props

    @@ -41,7 +58,7 @@ export default function Template({ data, pageContext }) {

    data

    {JSON.stringify(data)}

    -} +}; // Test queries in http://localhost:8000/___graphql // See how to filter from: https://www.gatsbyjs.org/docs/graphql-reference/ @@ -49,9 +66,10 @@ export default function Template({ data, pageContext }) { // We want ALL the component metadata from gatsby-transformer-react-docgen-typescript // for components in that folder export const pageQuery = graphql` -query GetComponent($fileAbsolutePath: String!, $pathRegex: String!) { +query GetComponent($fileAbsolutePath: String!, $pathRegex: String!, $examplesRegex: String!) { markdownRemark(fileAbsolutePath: { eq: $fileAbsolutePath }) { htmlAst + rawMarkdownBody frontmatter { title cssPrefix @@ -76,5 +94,12 @@ query GetComponent($fileAbsolutePath: String!, $pathRegex: String!) { } } } + exampleResources: allComponentExamples(filter: {path: {regex: $examplesRegex}}) { + edges { + node { + importName + } + } + } } -` \ No newline at end of file +`; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 0b1a096a931..f8e85a360ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -707,7 +707,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typescript@^7.1.0", "@babel/plugin-transform-typescript@^7.3.2": +"@babel/plugin-transform-typescript@^7.0.0", "@babel/plugin-transform-typescript@^7.1.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.0.tgz#0389ec53a34e80f99f708c4ca311181449a68eb1" dependencies: @@ -844,13 +844,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.1.0" -"@babel/preset-typescript@^7.0.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.3.2" - "@babel/runtime-corejs2@^7.0.0": version "7.4.2" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.4.2.tgz#a0cec2c41717fa415e9c204f32b603d88b1796c2" @@ -7742,6 +7735,25 @@ eslint-plugin-node@^6.0.1: resolve "^1.3.3" semver "^5.4.1" +"eslint-plugin-patternfly-react@file:packages/eslint-plugin-patternfly-react": + version "0.2.2" + dependencies: + babel-eslint "^9.0.0" + eslint-config-airbnb "^16.1.0" + eslint-config-prettier "^2.9.0" + eslint-config-standard "^11.0.0" + eslint-config-standard-jsx "^5.0.0" + eslint-config-standard-react "^6.0.0" + eslint-plugin-import "^2.13.0" + eslint-plugin-jest "^21.15.0" + eslint-plugin-jsx-a11y "^6.0.3" + eslint-plugin-node "^6.0.1" + eslint-plugin-prettier "^2.6.0" + eslint-plugin-promise "^3.7.0" + eslint-plugin-react "^7.7.0" + eslint-plugin-rulesdir "^0.1.0" + eslint-plugin-standard "^3.0.1" + eslint-plugin-prettier@^2.6.0: version "2.7.0" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" @@ -8906,13 +8918,6 @@ gatsby-cli@^2.4.17: yargs "^12.0.5" yurnalist "^1.0.2" -gatsby-image@^2.0.34: - version "2.0.34" - resolved "https://registry.yarnpkg.com/gatsby-image/-/gatsby-image-2.0.34.tgz#b4f33c3b9391d55fe2648fb629fee9db2d524a86" - dependencies: - "@babel/runtime" "^7.0.0" - prop-types "^15.6.1" - gatsby-link@^2.0.16: version "2.0.16" resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-2.0.16.tgz#5d140e43f3aec6dd59e01c1468d77a54092370c5" From 1a752d29c0c1ce20adc004fb34299e6b81c13d81 Mon Sep 17 00:00:00 2001 From: redallen Date: Tue, 26 Mar 2019 12:47:31 -0400 Subject: [PATCH 08/46] Convert react-core docs to markdown --- .../components/AboutModal/AboutModal.docs.js | 16 - .../SimpleAboutModal.js => AboutModal.md} | 33 +- .../{pf_mini_logo_white.svg => brandImg.svg} | 0 .../examples/{pf_logo.svg => logoImg.svg} | 0 .../ApplicationLauncher.docs.js | 15 - .../ApplicationLauncher.md | 114 ++++ .../examples/SimpleApplicationLauncher.js | 46 -- .../examples/TooltipApplicationLauncher.js | 57 -- .../BackgroundImage/BackgroundImage.docs.js | 15 - .../BackgroundImage/BackgroundImage.md | 29 + .../examples/SimpleBackgroundImage.js | 22 - .../src/components/Badge/Badge.docs.js | 24 - .../react-core/src/components/Badge/Badge.md | 34 ++ .../src/components/Brand/Brand.docs.js | 10 - .../react-core/src/components/Brand/Brand.md | 14 + .../components/Brand/examples/SimpleBrand.js | 11 - .../examples/{pf_logo.svg => pfLogo.svg} | 0 .../components/Breadcrumb/Breadcrumb.docs.js | 28 - .../src/components/Breadcrumb/Breadcrumb.md | 55 ++ .../Breadcrumb/examples/HeadingBreadcrumbs.js | 18 - .../Breadcrumb/examples/SimpleBreadcrumbs.js | 19 - .../examples/WithoutLinkBreadcrumbs.js | 21 - .../src/components/Button/Button.docs.js | 24 - .../src/components/Button/Button.md | 53 ++ .../components/Button/examples/BlockButton.js | 10 - .../Button/examples/ButtonVariants.js | 22 - .../components/Button/examples/LinkButton.js | 22 - .../src/components/Card/Card.docs.js | 22 - .../react-core/src/components/Card/Card.md | 55 ++ .../Card/examples/ContentOnlyCard.js | 14 - .../components/Card/examples/NoFooterCard.js | 15 - .../components/Card/examples/NoHeaderCard.js | 15 - .../components/Card/examples/SimpleCard.js | 16 - .../src/components/Checkbox/Checkbox.docs.js | 17 - .../src/components/Checkbox/Checkbox.md | 77 +++ .../Checkbox/examples/ControlledCheckbox.js | 39 -- .../Checkbox/examples/DisabledCheckbox.js | 21 - .../Checkbox/examples/UncontrolledCheckbox.js | 15 - .../components/ChipGroup/ChipGroup.docs.js | 28 - .../src/components/ChipGroup/ChipGroup.md | 147 ++++++ .../ChipGroup/examples/BadgeChip.js | 46 -- .../examples/MultiSelectChipGroup.js | 32 -- .../ChipGroup/examples/ToolbarChipGroup.js | 58 -- .../src/components/DataList/DataList.docs.js | 50 -- .../src/components/DataList/DataList.md | 341 ++++++++++++ .../DataList/examples/ActionsDataList.js | 72 --- .../examples/CheckboxActionDataList.js | 38 -- .../DataList/examples/ExpandableDataList.js | 77 --- .../DataList/examples/ModifiersDataList.js | 118 ----- .../DataList/examples/SimpleDataList.js | 25 - .../src/components/Dropdown/Dropdown.md | 397 ++++++++++++++ .../Dropdown/examples/DirectionUpDropdown.js | 53 -- .../Dropdown/examples/DisabledDropdown.js | 52 -- .../Dropdown/examples/DropdownPanel.js | 36 -- .../Dropdown/examples/IconDropdown.js | 55 -- .../Dropdown/examples/KebabDropdown.js | 53 -- .../examples/PositionRightDropdown.js | 53 -- .../Dropdown/examples/ReactLinkDropdown.js | 29 - .../Dropdown/examples/SimpleDropdown.js | 52 -- .../src/components/EmptyState/EmptyState.md | 37 ++ .../EmptyState/examples/SimpleEmptyState.js | 36 -- .../src/components/Form/Form.docs.js | 19 - .../react-core/src/components/Form/Form.md | 255 +++++++++ .../Form/examples/HorizontalForm.js | 119 ----- .../components/Form/examples/InvalidForm.js | 40 -- .../components/Form/examples/SimpleForm.js | 90 ---- .../components/FormSelect/FormSelect.docs.js | 21 - .../src/components/FormSelect/FormSelect.md | 175 ++++++ .../FormSelect/examples/FormSelectInput.js | 34 -- .../examples/FormSelectInputDisabled.js | 32 -- .../examples/FormSelectInputGrouped.js | 59 --- .../examples/FormSelectInputInvalid.js | 38 -- .../components/InputGroup/InputGroup.docs.js | 16 - .../SimpleInputGroups.js => InputGroup.md} | 43 +- .../src/components/Label/Label.docs.js | 11 - .../react-core/src/components/Label/Label.md | 15 + .../components/Label/examples/SimpleLabel.js | 14 - .../src/components/List/List.docs.js | 18 - .../react-core/src/components/List/List.md | 48 ++ .../src/components/List/examples/GridList.js | 19 - .../components/List/examples/InlineList.js | 16 - .../components/List/examples/SimpleList.js | 16 - .../components/LoginPage/LoginPage.docs.js | 13 - .../SimpleLoginPage.js => LoginPage.md} | 73 ++- .../{pf_logo_color.svg => brandImgColor.svg} | 0 .../src/components/Modal/Modal.docs.js | 21 - .../react-core/src/components/Modal/Modal.md | 256 +++++++++ .../components/Modal/examples/LargeModal.js | 48 -- .../src/components/Modal/examples/NoHeader.js | 47 -- .../components/Modal/examples/SimpleModal.js | 47 -- .../components/Modal/examples/SmallModal.js | 48 -- .../components/Modal/examples/WidthModal.js | 48 -- .../react-core/src/components/Nav/Nav.docs.js | 34 -- .../react-core/src/components/Nav/Nav.md | 496 ++++++++++++++++++ .../components/Nav/examples/NavDefaultList.js | 38 -- .../Nav/examples/NavExpandableList.js | 99 ---- .../Nav/examples/NavExpandableTitlesList.js | 86 --- .../components/Nav/examples/NavGroupedList.js | 46 -- .../Nav/examples/NavHorizontalList.js | 37 -- .../components/Nav/examples/NavMixedList.js | 89 ---- .../components/Nav/examples/NavSimpleList.js | 38 -- .../Nav/examples/NavTertiaryList.js | 38 -- .../src/components/Page/Page.docs.js | 22 - .../{examples/VerticalPage.js => Page.md} | 43 +- .../Page/examples/HorizontalPage.js | 25 - .../components/Pagination/Pagination.docs.js | 18 - .../src/components/Pagination/Pagination.md | 80 +++ .../Pagination/examples/PaginationBottom.js | 35 -- .../Pagination/examples/PaginationTop.js | 36 -- .../src/components/Popover/Popover.docs.js | 22 - .../AdvancedPopover.js => Popover.md} | 86 ++- .../Popover/examples/HeadlessPopover.js | 23 - .../Popover/examples/SimplePopover.js | 23 - .../src/components/Progress/Progress.docs.js | 44 -- .../src/components/Progress/Progress.md | 136 +++++ .../Progress/examples/LabeledProgress.js | 17 - .../Progress/examples/LargeProgress.js | 10 - .../Progress/examples/ProgressFailure.js | 10 - .../examples/ProgressFailureWithoutMeasure.js | 17 - .../Progress/examples/ProgressInside.js | 10 - .../examples/ProgressInsideSuccess.js | 17 - .../Progress/examples/ProgressOutside.js | 10 - .../examples/ProgressOutsideFailure.js | 17 - .../Progress/examples/ProgressSuccess.js | 10 - .../ProgressWithDynamicDescription.js | 10 - .../examples/ProgressWithoutMeasure.js | 10 - .../Progress/examples/SimpleProgress.js | 10 - .../Progress/examples/SingleLineProgress.js | 10 - .../Progress/examples/SmallProgress.js | 10 - .../src/components/Radio/Radio.docs.js | 18 - .../react-core/src/components/Radio/Radio.md | 71 +++ .../Radio/examples/ControlledRadio.js | 38 -- .../Radio/examples/DisabledRadio.js | 15 - .../Radio/examples/UncontrolledRadio.js | 15 - .../src/components/Select/Select.docs.js | 12 - .../SingleSelectInput.js => Select.md} | 75 +-- .../src/components/Switch/Switch.docs.js | 19 - .../src/components/Switch/Switch.md | 122 +++++ .../Switch/examples/DisabledSwitch.js | 36 -- .../Switch/examples/NoLabelSwitch.js | 26 - .../Switch/examples/SimpleSwitch.js | 27 - .../Switch/examples/UncontrolledSwitch.js | 28 - .../src/components/Tabs/Tabs.docs.js | 21 - .../react-core/src/components/Tabs/Tabs.md | 193 +++++++ .../components/Tabs/examples/FilledTabs.js | 33 -- .../Tabs/examples/ScrollButtonsTabs.js | 60 --- .../components/Tabs/examples/SecondaryTabs.js | 51 -- .../components/Tabs/examples/SimpleTabs.js | 33 -- .../src/components/Text/Text.docs.js | 41 -- .../react-core/src/components/Text/Text.md | 103 ++++ .../src/components/Text/examples/BodyText.js | 30 -- .../src/components/Text/examples/DataList.js | 23 - .../src/components/Text/examples/Headings.js | 19 - .../components/Text/examples/OrderedList.js | 22 - .../components/Text/examples/UnorderedList.js | 25 - .../src/components/TextArea/TextArea.docs.js | 12 - .../src/components/TextArea/TextArea.md | 58 ++ .../TextArea/examples/InvalidTextArea.js | 28 - .../TextArea/examples/SimpleTextArea.js | 20 - .../components/TextInput/TextInput.docs.js | 19 - .../src/components/TextInput/TextInput.md | 81 +++ .../TextInput/examples/DisabledTextInput.js | 27 - .../TextInput/examples/InvalidTextInput.js | 29 - .../TextInput/examples/ReadOnlyTextInput.js | 16 - .../TextInput/examples/SimpleTextInput.js | 22 - .../src/components/Title/Title.docs.js | 14 - .../react-core/src/components/Title/Title.md | 19 + .../components/Title/examples/TitleSizes.js | 19 - .../src/components/Tooltip/Tooltip.md | 81 +++ packages/patternfly-4/react-docs/package.json | 4 +- .../gatsby-node.js | 2 +- .../src/components/componentDocs/liveEdit.js | 51 +- .../src/components/componentDocs/tokens.js | 28 +- 173 files changed, 3804 insertions(+), 4246 deletions(-) delete mode 100644 packages/patternfly-4/react-core/src/components/AboutModal/AboutModal.docs.js rename packages/patternfly-4/react-core/src/components/AboutModal/{examples/SimpleAboutModal.js => AboutModal.md} (82%) rename packages/patternfly-4/react-core/src/components/AboutModal/examples/{pf_mini_logo_white.svg => brandImg.svg} (100%) rename packages/patternfly-4/react-core/src/components/AboutModal/examples/{pf_logo.svg => logoImg.svg} (100%) delete mode 100644 packages/patternfly-4/react-core/src/components/ApplicationLauncher/ApplicationLauncher.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/ApplicationLauncher/ApplicationLauncher.md delete mode 100644 packages/patternfly-4/react-core/src/components/ApplicationLauncher/examples/SimpleApplicationLauncher.js delete mode 100644 packages/patternfly-4/react-core/src/components/ApplicationLauncher/examples/TooltipApplicationLauncher.js delete mode 100644 packages/patternfly-4/react-core/src/components/BackgroundImage/BackgroundImage.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/BackgroundImage/BackgroundImage.md delete mode 100644 packages/patternfly-4/react-core/src/components/BackgroundImage/examples/SimpleBackgroundImage.js delete mode 100644 packages/patternfly-4/react-core/src/components/Badge/Badge.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Badge/Badge.md delete mode 100644 packages/patternfly-4/react-core/src/components/Brand/Brand.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Brand/Brand.md delete mode 100644 packages/patternfly-4/react-core/src/components/Brand/examples/SimpleBrand.js rename packages/patternfly-4/react-core/src/components/Brand/examples/{pf_logo.svg => pfLogo.svg} (100%) delete mode 100644 packages/patternfly-4/react-core/src/components/Breadcrumb/Breadcrumb.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Breadcrumb/Breadcrumb.md delete mode 100644 packages/patternfly-4/react-core/src/components/Breadcrumb/examples/HeadingBreadcrumbs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Breadcrumb/examples/SimpleBreadcrumbs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Breadcrumb/examples/WithoutLinkBreadcrumbs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Button/Button.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Button/Button.md delete mode 100644 packages/patternfly-4/react-core/src/components/Button/examples/BlockButton.js delete mode 100644 packages/patternfly-4/react-core/src/components/Button/examples/ButtonVariants.js delete mode 100644 packages/patternfly-4/react-core/src/components/Button/examples/LinkButton.js delete mode 100644 packages/patternfly-4/react-core/src/components/Card/Card.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Card/Card.md delete mode 100644 packages/patternfly-4/react-core/src/components/Card/examples/ContentOnlyCard.js delete mode 100644 packages/patternfly-4/react-core/src/components/Card/examples/NoFooterCard.js delete mode 100644 packages/patternfly-4/react-core/src/components/Card/examples/NoHeaderCard.js delete mode 100644 packages/patternfly-4/react-core/src/components/Card/examples/SimpleCard.js delete mode 100644 packages/patternfly-4/react-core/src/components/Checkbox/Checkbox.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Checkbox/Checkbox.md delete mode 100644 packages/patternfly-4/react-core/src/components/Checkbox/examples/ControlledCheckbox.js delete mode 100644 packages/patternfly-4/react-core/src/components/Checkbox/examples/DisabledCheckbox.js delete mode 100644 packages/patternfly-4/react-core/src/components/Checkbox/examples/UncontrolledCheckbox.js delete mode 100644 packages/patternfly-4/react-core/src/components/ChipGroup/ChipGroup.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/ChipGroup/ChipGroup.md delete mode 100644 packages/patternfly-4/react-core/src/components/ChipGroup/examples/BadgeChip.js delete mode 100644 packages/patternfly-4/react-core/src/components/ChipGroup/examples/MultiSelectChipGroup.js delete mode 100644 packages/patternfly-4/react-core/src/components/ChipGroup/examples/ToolbarChipGroup.js delete mode 100644 packages/patternfly-4/react-core/src/components/DataList/DataList.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/DataList/DataList.md delete mode 100644 packages/patternfly-4/react-core/src/components/DataList/examples/ActionsDataList.js delete mode 100644 packages/patternfly-4/react-core/src/components/DataList/examples/CheckboxActionDataList.js delete mode 100644 packages/patternfly-4/react-core/src/components/DataList/examples/ExpandableDataList.js delete mode 100644 packages/patternfly-4/react-core/src/components/DataList/examples/ModifiersDataList.js delete mode 100644 packages/patternfly-4/react-core/src/components/DataList/examples/SimpleDataList.js create mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/Dropdown.md delete mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/examples/DirectionUpDropdown.js delete mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/examples/DisabledDropdown.js delete mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/examples/DropdownPanel.js delete mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/examples/IconDropdown.js delete mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/examples/KebabDropdown.js delete mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/examples/PositionRightDropdown.js delete mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/examples/ReactLinkDropdown.js delete mode 100644 packages/patternfly-4/react-core/src/components/Dropdown/examples/SimpleDropdown.js create mode 100644 packages/patternfly-4/react-core/src/components/EmptyState/EmptyState.md delete mode 100644 packages/patternfly-4/react-core/src/components/EmptyState/examples/SimpleEmptyState.js delete mode 100644 packages/patternfly-4/react-core/src/components/Form/Form.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Form/Form.md delete mode 100644 packages/patternfly-4/react-core/src/components/Form/examples/HorizontalForm.js delete mode 100644 packages/patternfly-4/react-core/src/components/Form/examples/InvalidForm.js delete mode 100644 packages/patternfly-4/react-core/src/components/Form/examples/SimpleForm.js delete mode 100644 packages/patternfly-4/react-core/src/components/FormSelect/FormSelect.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/FormSelect/FormSelect.md delete mode 100644 packages/patternfly-4/react-core/src/components/FormSelect/examples/FormSelectInput.js delete mode 100644 packages/patternfly-4/react-core/src/components/FormSelect/examples/FormSelectInputDisabled.js delete mode 100644 packages/patternfly-4/react-core/src/components/FormSelect/examples/FormSelectInputGrouped.js delete mode 100644 packages/patternfly-4/react-core/src/components/FormSelect/examples/FormSelectInputInvalid.js delete mode 100644 packages/patternfly-4/react-core/src/components/InputGroup/InputGroup.docs.js rename packages/patternfly-4/react-core/src/components/InputGroup/{examples/SimpleInputGroups.js => InputGroup.md} (91%) delete mode 100644 packages/patternfly-4/react-core/src/components/Label/Label.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Label/Label.md delete mode 100644 packages/patternfly-4/react-core/src/components/Label/examples/SimpleLabel.js delete mode 100644 packages/patternfly-4/react-core/src/components/List/List.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/List/List.md delete mode 100644 packages/patternfly-4/react-core/src/components/List/examples/GridList.js delete mode 100644 packages/patternfly-4/react-core/src/components/List/examples/InlineList.js delete mode 100644 packages/patternfly-4/react-core/src/components/List/examples/SimpleList.js delete mode 100644 packages/patternfly-4/react-core/src/components/LoginPage/LoginPage.docs.js rename packages/patternfly-4/react-core/src/components/LoginPage/{examples/SimpleLoginPage.js => LoginPage.md} (82%) rename packages/patternfly-4/react-core/src/components/LoginPage/examples/{pf_logo_color.svg => brandImgColor.svg} (100%) delete mode 100644 packages/patternfly-4/react-core/src/components/Modal/Modal.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Modal/Modal.md delete mode 100644 packages/patternfly-4/react-core/src/components/Modal/examples/LargeModal.js delete mode 100644 packages/patternfly-4/react-core/src/components/Modal/examples/NoHeader.js delete mode 100644 packages/patternfly-4/react-core/src/components/Modal/examples/SimpleModal.js delete mode 100644 packages/patternfly-4/react-core/src/components/Modal/examples/SmallModal.js delete mode 100644 packages/patternfly-4/react-core/src/components/Modal/examples/WidthModal.js delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/Nav.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Nav/Nav.md delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/examples/NavDefaultList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/examples/NavExpandableList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/examples/NavExpandableTitlesList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/examples/NavGroupedList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/examples/NavHorizontalList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/examples/NavMixedList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/examples/NavSimpleList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Nav/examples/NavTertiaryList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Page/Page.docs.js rename packages/patternfly-4/react-core/src/components/Page/{examples/VerticalPage.js => Page.md} (54%) delete mode 100644 packages/patternfly-4/react-core/src/components/Page/examples/HorizontalPage.js delete mode 100644 packages/patternfly-4/react-core/src/components/Pagination/Pagination.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Pagination/Pagination.md delete mode 100644 packages/patternfly-4/react-core/src/components/Pagination/examples/PaginationBottom.js delete mode 100644 packages/patternfly-4/react-core/src/components/Pagination/examples/PaginationTop.js delete mode 100644 packages/patternfly-4/react-core/src/components/Popover/Popover.docs.js rename packages/patternfly-4/react-core/src/components/Popover/{examples/AdvancedPopover.js => Popover.md} (59%) delete mode 100644 packages/patternfly-4/react-core/src/components/Popover/examples/HeadlessPopover.js delete mode 100644 packages/patternfly-4/react-core/src/components/Popover/examples/SimplePopover.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/Progress.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Progress/Progress.md delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/LabeledProgress.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/LargeProgress.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressFailure.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressFailureWithoutMeasure.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressInside.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressInsideSuccess.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressOutside.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressOutsideFailure.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressSuccess.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressWithDynamicDescription.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/ProgressWithoutMeasure.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/SimpleProgress.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/SingleLineProgress.js delete mode 100644 packages/patternfly-4/react-core/src/components/Progress/examples/SmallProgress.js delete mode 100644 packages/patternfly-4/react-core/src/components/Radio/Radio.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Radio/Radio.md delete mode 100644 packages/patternfly-4/react-core/src/components/Radio/examples/ControlledRadio.js delete mode 100644 packages/patternfly-4/react-core/src/components/Radio/examples/DisabledRadio.js delete mode 100644 packages/patternfly-4/react-core/src/components/Radio/examples/UncontrolledRadio.js delete mode 100644 packages/patternfly-4/react-core/src/components/Select/Select.docs.js rename packages/patternfly-4/react-core/src/components/Select/{examples/SingleSelectInput.js => Select.md} (50%) delete mode 100644 packages/patternfly-4/react-core/src/components/Switch/Switch.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Switch/Switch.md delete mode 100644 packages/patternfly-4/react-core/src/components/Switch/examples/DisabledSwitch.js delete mode 100644 packages/patternfly-4/react-core/src/components/Switch/examples/NoLabelSwitch.js delete mode 100644 packages/patternfly-4/react-core/src/components/Switch/examples/SimpleSwitch.js delete mode 100644 packages/patternfly-4/react-core/src/components/Switch/examples/UncontrolledSwitch.js delete mode 100644 packages/patternfly-4/react-core/src/components/Tabs/Tabs.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Tabs/Tabs.md delete mode 100644 packages/patternfly-4/react-core/src/components/Tabs/examples/FilledTabs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Tabs/examples/ScrollButtonsTabs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Tabs/examples/SecondaryTabs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Tabs/examples/SimpleTabs.js delete mode 100644 packages/patternfly-4/react-core/src/components/Text/Text.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Text/Text.md delete mode 100644 packages/patternfly-4/react-core/src/components/Text/examples/BodyText.js delete mode 100644 packages/patternfly-4/react-core/src/components/Text/examples/DataList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Text/examples/Headings.js delete mode 100644 packages/patternfly-4/react-core/src/components/Text/examples/OrderedList.js delete mode 100644 packages/patternfly-4/react-core/src/components/Text/examples/UnorderedList.js delete mode 100644 packages/patternfly-4/react-core/src/components/TextArea/TextArea.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/TextArea/TextArea.md delete mode 100644 packages/patternfly-4/react-core/src/components/TextArea/examples/InvalidTextArea.js delete mode 100644 packages/patternfly-4/react-core/src/components/TextArea/examples/SimpleTextArea.js delete mode 100644 packages/patternfly-4/react-core/src/components/TextInput/TextInput.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/TextInput/TextInput.md delete mode 100644 packages/patternfly-4/react-core/src/components/TextInput/examples/DisabledTextInput.js delete mode 100644 packages/patternfly-4/react-core/src/components/TextInput/examples/InvalidTextInput.js delete mode 100644 packages/patternfly-4/react-core/src/components/TextInput/examples/ReadOnlyTextInput.js delete mode 100644 packages/patternfly-4/react-core/src/components/TextInput/examples/SimpleTextInput.js delete mode 100644 packages/patternfly-4/react-core/src/components/Title/Title.docs.js create mode 100644 packages/patternfly-4/react-core/src/components/Title/Title.md delete mode 100644 packages/patternfly-4/react-core/src/components/Title/examples/TitleSizes.js create mode 100644 packages/patternfly-4/react-core/src/components/Tooltip/Tooltip.md diff --git a/packages/patternfly-4/react-core/src/components/AboutModal/AboutModal.docs.js b/packages/patternfly-4/react-core/src/components/AboutModal/AboutModal.docs.js deleted file mode 100644 index bc8166ef20d..00000000000 --- a/packages/patternfly-4/react-core/src/components/AboutModal/AboutModal.docs.js +++ /dev/null @@ -1,16 +0,0 @@ -import { AboutModal } from '@patternfly/react-core'; -import SimpleAboutModal from './examples/SimpleAboutModal'; - -export default { - title: 'AboutModal', - components: { - AboutModal - }, - variablesRoot: 'pf-c-about-modal-box', - examples: [ - { - component: SimpleAboutModal, - title: 'Simple AboutModal' - } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/AboutModal/examples/SimpleAboutModal.js b/packages/patternfly-4/react-core/src/components/AboutModal/AboutModal.md similarity index 82% rename from packages/patternfly-4/react-core/src/components/AboutModal/examples/SimpleAboutModal.js rename to packages/patternfly-4/react-core/src/components/AboutModal/AboutModal.md index 8934f97dd9f..9853da66aec 100644 --- a/packages/patternfly-4/react-core/src/components/AboutModal/examples/SimpleAboutModal.js +++ b/packages/patternfly-4/react-core/src/components/AboutModal/AboutModal.md @@ -1,18 +1,26 @@ +--- +title: "About Modal" +cssPrefix: "pf-c-about-modal-box" +--- +#### Simple About Modal + +```js import React from 'react'; import { AboutModal, Button, TextContent, TextList, TextListItem } from '@patternfly/react-core'; -import brandImg from './pf_mini_logo_white.svg'; -import logoImg from './pf_logo.svg'; +import brandImg from './examples/brandImg.svg'; +import logoImg from './examples/logoImg.svg'; class SimpleAboutModal extends React.Component { - state = { - isModalOpen: false - }; - - handleModalToggle = () => { - this.setState(({ isModalOpen }) => ({ - isModalOpen: !isModalOpen - })); - }; + constructor(props) { + this.state = { + isModalOpen: false + }; + this.handleModalToggle = () => { + this.setState(({ isModalOpen }) => ({ + isModalOpen: !isModalOpen + })); + }; + } render() { const { isModalOpen } = this.state; @@ -55,5 +63,4 @@ class SimpleAboutModal extends React.Component { ); } } - -export default SimpleAboutModal; +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/AboutModal/examples/pf_mini_logo_white.svg b/packages/patternfly-4/react-core/src/components/AboutModal/examples/brandImg.svg similarity index 100% rename from packages/patternfly-4/react-core/src/components/AboutModal/examples/pf_mini_logo_white.svg rename to packages/patternfly-4/react-core/src/components/AboutModal/examples/brandImg.svg diff --git a/packages/patternfly-4/react-core/src/components/AboutModal/examples/pf_logo.svg b/packages/patternfly-4/react-core/src/components/AboutModal/examples/logoImg.svg similarity index 100% rename from packages/patternfly-4/react-core/src/components/AboutModal/examples/pf_logo.svg rename to packages/patternfly-4/react-core/src/components/AboutModal/examples/logoImg.svg diff --git a/packages/patternfly-4/react-core/src/components/ApplicationLauncher/ApplicationLauncher.docs.js b/packages/patternfly-4/react-core/src/components/ApplicationLauncher/ApplicationLauncher.docs.js deleted file mode 100644 index 43ab16d433b..00000000000 --- a/packages/patternfly-4/react-core/src/components/ApplicationLauncher/ApplicationLauncher.docs.js +++ /dev/null @@ -1,15 +0,0 @@ -import { ApplicationLauncher } from '@patternfly/react-core'; -import SimpleApplicationLauncher from './examples/SimpleApplicationLauncher'; -import TooltipApplicationLauncher from './examples/TooltipApplicationLauncher'; - -export default { - title: 'Application Launcher', - components: { - ApplicationLauncher - }, - variablesRoot: 'pf-c-app-launcher', - examples: [ - { component: SimpleApplicationLauncher, title: 'Application Launcher' }, - { component: TooltipApplicationLauncher, title: 'Application Launcher with Tool Tip' } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/ApplicationLauncher/ApplicationLauncher.md b/packages/patternfly-4/react-core/src/components/ApplicationLauncher/ApplicationLauncher.md new file mode 100644 index 00000000000..2f9e1b60f0f --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/ApplicationLauncher/ApplicationLauncher.md @@ -0,0 +1,114 @@ +--- +title: "Application Launcher" +cssPrefix: "pf-c-app-launcher" +--- +#### Simple Application Launcher +```js +import React from 'react'; +import { ApplicationLauncher, DropdownItem } from '@patternfly/react-core'; + +class SimpleApplicationLauncher extends React.Component { + constructor(props) { + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + const dropdownItems = [ + + Application 1 + , + + Application 2 + , + + Application 3 + , + + Unavailable Application + + ]; + return ( + + ); + } +} +``` + +#### Application Launcher with Tooltip +```js +import React from 'react'; +import { ApplicationLauncher, DropdownItem, Tooltip } from '@patternfly/react-core'; + +class TooltipApplicationLauncher extends React.Component { + constructor(props) { + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + const dropdownItems = [ + Launch Application 1
    }> + + Application 1 + + + , + Launch Application 2} position="right"> + + Application 2 + + + , + Launch Application 3} position="right"> + + Application 3 + + + , + Application Unavailable At This Time} position="bottom"> + + Unavailable Application + + + ]; + return ( + + ); + } +} +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/ApplicationLauncher/examples/SimpleApplicationLauncher.js b/packages/patternfly-4/react-core/src/components/ApplicationLauncher/examples/SimpleApplicationLauncher.js deleted file mode 100644 index 8cfb8571be1..00000000000 --- a/packages/patternfly-4/react-core/src/components/ApplicationLauncher/examples/SimpleApplicationLauncher.js +++ /dev/null @@ -1,46 +0,0 @@ -import React, { Component } from 'react'; -import { ApplicationLauncher, DropdownItem } from '@patternfly/react-core'; - -export default class SimpleApplicationLauncher extends Component { - state = { - isOpen: false - }; - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - const dropdownItems = [ - - Application 1 - , - - Application 2 - , - - Application 3 - , - - Unavailable Application - - ]; - return ( - - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/ApplicationLauncher/examples/TooltipApplicationLauncher.js b/packages/patternfly-4/react-core/src/components/ApplicationLauncher/examples/TooltipApplicationLauncher.js deleted file mode 100644 index 05312357e8a..00000000000 --- a/packages/patternfly-4/react-core/src/components/ApplicationLauncher/examples/TooltipApplicationLauncher.js +++ /dev/null @@ -1,57 +0,0 @@ -import React, { Component } from 'react'; -import { ApplicationLauncher, DropdownItem, Tooltip } from '@patternfly/react-core'; - -export default class TooltipApplicationLauncher extends Component { - state = { - isOpen: false - }; - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - const dropdownItems = [ - Launch Application 1}> - - Application 1 - - - , - Launch Application 2} position="right"> - - Application 2 - - - , - Launch Application 3} position="right"> - - Application 3 - - - , - Application Unavailable At This Time} position="bottom"> - - Unavailable Application - - - ]; - return ( - - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/BackgroundImage/BackgroundImage.docs.js b/packages/patternfly-4/react-core/src/components/BackgroundImage/BackgroundImage.docs.js deleted file mode 100644 index a9363124bee..00000000000 --- a/packages/patternfly-4/react-core/src/components/BackgroundImage/BackgroundImage.docs.js +++ /dev/null @@ -1,15 +0,0 @@ -import { BackgroundImage, BackgroundImageSrc } from '@patternfly/react-core'; -import SimpleBackgroundImage from './examples/SimpleBackgroundImage'; - -export default { - title: 'Background Image', - components: { - BackgroundImage - }, - enumValues: { - 'Object.values(BackgroundImageSrc)': Object.values(BackgroundImageSrc) - }, - variablesRoot: 'pf-c-background-image', - examples: [{ component: SimpleBackgroundImage, title: 'Simple Background Image' }], - fullPageOnly: true -}; diff --git a/packages/patternfly-4/react-core/src/components/BackgroundImage/BackgroundImage.md b/packages/patternfly-4/react-core/src/components/BackgroundImage/BackgroundImage.md new file mode 100644 index 00000000000..4396175efd1 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/BackgroundImage/BackgroundImage.md @@ -0,0 +1,29 @@ +--- +title: "Background Image" +cssPrefix: "pf-c-background-image" +--- +#### Simple Background Image + +```js +import React from 'react'; +import { BackgroundImage, BackgroundImageSrc } from '@patternfly/react-core'; + +class SimpleBackgroundImage extends React.Component { + constructor(props) { + /** + * Note: When using background-filter.svg, you must also include #image_overlay as the fragment identifier + */ + this.images = { + [BackgroundImageSrc.xs]: '/assets/images/pfbg_576.jpg', + [BackgroundImageSrc.xs2x]: '/assets/images/pfbg_576@2x.jpg', + [BackgroundImageSrc.sm]: '/assets/images/pfbg_768.jpg', + [BackgroundImageSrc.sm2x]: '/assets/images/pfbg_768@2x.jpg', + [BackgroundImageSrc.lg]: '/assets/images/pfbg_1200.jpg', + [BackgroundImageSrc.filter]: '/assets/images/background-filter.svg#image_overlay' + }; + } + render() { + return ; + } +} +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/BackgroundImage/examples/SimpleBackgroundImage.js b/packages/patternfly-4/react-core/src/components/BackgroundImage/examples/SimpleBackgroundImage.js deleted file mode 100644 index 65f802bb5a5..00000000000 --- a/packages/patternfly-4/react-core/src/components/BackgroundImage/examples/SimpleBackgroundImage.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import { BackgroundImage, BackgroundImageSrc } from '@patternfly/react-core'; - -/** - * Note: When using background-filter.svg, you must also include #image_overlay as the fragment identifier - */ -const images = { - [BackgroundImageSrc.xs]: '/assets/images/pfbg_576.jpg', - [BackgroundImageSrc.xs2x]: '/assets/images/pfbg_576@2x.jpg', - [BackgroundImageSrc.sm]: '/assets/images/pfbg_768.jpg', - [BackgroundImageSrc.sm2x]: '/assets/images/pfbg_768@2x.jpg', - [BackgroundImageSrc.lg]: '/assets/images/pfbg_1200.jpg', - [BackgroundImageSrc.filter]: '/assets/images/background-filter.svg#image_overlay' -}; - -class SimpleBackgroundImage extends React.Component { - render() { - return ; - } -} - -export default SimpleBackgroundImage; diff --git a/packages/patternfly-4/react-core/src/components/Badge/Badge.docs.js b/packages/patternfly-4/react-core/src/components/Badge/Badge.docs.js deleted file mode 100644 index 58e08282af5..00000000000 --- a/packages/patternfly-4/react-core/src/components/Badge/Badge.docs.js +++ /dev/null @@ -1,24 +0,0 @@ -import { Badge } from '@patternfly/react-core'; -import Read from './examples/ReadBadge'; -import Unread from './examples/UnreadBadge'; -import getContainerProps from './examples/common/getContainerProps'; - -export default { - title: 'Badge', - components: { - Badge - }, - variablesRoot: 'pf-c-badge', - examples: [ - { - component: Read, - title: 'Read Badge', - getContainerProps - }, - { - component: Unread, - title: 'Unread Badge', - getContainerProps - } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Badge/Badge.md b/packages/patternfly-4/react-core/src/components/Badge/Badge.md new file mode 100644 index 00000000000..7abfdc0274e --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Badge/Badge.md @@ -0,0 +1,34 @@ +--- +title: "Badge" +cssPrefix: "pf-c-badge" +--- +#### Badge (Read) + +```js +import React from 'react'; +import { Badge } from '@patternfly/react-core'; + +ReadBadge = () => ( + + 7 + 24 + 240 + 999+ + +); +``` + +#### Badge (Unread) +```js +import React from 'react'; +import { Badge } from '@patternfly/react-core'; + +UnreadBadge = () => ( + + 7 + 24 + 240 + 999+ + +); +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Brand/Brand.docs.js b/packages/patternfly-4/react-core/src/components/Brand/Brand.docs.js deleted file mode 100644 index 1d41ecebfc6..00000000000 --- a/packages/patternfly-4/react-core/src/components/Brand/Brand.docs.js +++ /dev/null @@ -1,10 +0,0 @@ -import { Brand } from '@patternfly/react-core'; -import Simple from './examples/SimpleBrand'; - -export default { - title: 'Brand', - components: { - Brand - }, - examples: [{ component: Simple, title: 'Simple Brand' }] -}; diff --git a/packages/patternfly-4/react-core/src/components/Brand/Brand.md b/packages/patternfly-4/react-core/src/components/Brand/Brand.md new file mode 100644 index 00000000000..56acfdee025 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Brand/Brand.md @@ -0,0 +1,14 @@ +--- +title: "Brand" +cssPrefix: null +--- +#### Simple Brand +```js +import React from 'react'; +import { Brand } from '@patternfly/react-core'; +import pfLogo from './pf_logo.svg'; + +SimpleBrand = () => ( + +); +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Brand/examples/SimpleBrand.js b/packages/patternfly-4/react-core/src/components/Brand/examples/SimpleBrand.js deleted file mode 100644 index 98f73286a8e..00000000000 --- a/packages/patternfly-4/react-core/src/components/Brand/examples/SimpleBrand.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import { Brand } from '@patternfly/react-core'; -import brandImg from './pf_logo.svg'; - -class SimpleBrand extends React.Component { - render() { - return ; - } -} - -export default SimpleBrand; diff --git a/packages/patternfly-4/react-core/src/components/Brand/examples/pf_logo.svg b/packages/patternfly-4/react-core/src/components/Brand/examples/pfLogo.svg similarity index 100% rename from packages/patternfly-4/react-core/src/components/Brand/examples/pf_logo.svg rename to packages/patternfly-4/react-core/src/components/Brand/examples/pfLogo.svg diff --git a/packages/patternfly-4/react-core/src/components/Breadcrumb/Breadcrumb.docs.js b/packages/patternfly-4/react-core/src/components/Breadcrumb/Breadcrumb.docs.js deleted file mode 100644 index 8b0a57ea20f..00000000000 --- a/packages/patternfly-4/react-core/src/components/Breadcrumb/Breadcrumb.docs.js +++ /dev/null @@ -1,28 +0,0 @@ -import Simple from './examples/SimpleBreadcrumbs'; -import WithoutLinkBreadcrumbs from './examples/WithoutLinkBreadcrumbs'; -import HeadingBreadcrumbs from './examples/HeadingBreadcrumbs'; -import { Breadcrumb, BreadcrumbItem, BreadcrumbHeading } from '@patternfly/react-core'; - -export default { - title: 'Breadcrumb', - components: { - Breadcrumb, - BreadcrumbItem, - BreadcrumbHeading - }, - variablesRoot: 'pf-c-breadcrumb', - examples: [ - { - component: Simple, - title: 'Breadcrumb' - }, - { - component: WithoutLinkBreadcrumbs, - title: 'Breadcrumb without Home Link' - }, - { - component: HeadingBreadcrumbs, - title: 'Breadcrumb with Heading' - } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Breadcrumb/Breadcrumb.md b/packages/patternfly-4/react-core/src/components/Breadcrumb/Breadcrumb.md new file mode 100644 index 00000000000..5c98283b62a --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Breadcrumb/Breadcrumb.md @@ -0,0 +1,55 @@ +--- +title: "Breadcrumb" +cssPrefix: "pf-c-breadcrumb" +--- +#### Simple Breadcrumb +```js +import React from 'react'; +import { Breadcrumb, BreadcrumbItem } from '@patternfly/react-core'; + +SimpleBreadcrumbs = () => ( + + Section Home + Section Title + Section Title + + Section Landing + + +); +``` + +#### Breadcrumb without Home Link +```js +import React from 'react'; +import { Breadcrumb, BreadcrumbItem } from '@patternfly/react-core'; + +WithoutLinkBreadcrumbs = () => ( + + Section Home + Section Title + Section Title + Section Title + Section Title + + Section Landing + + +); +``` + +#### Breadcrumb with Heading +```js +import React from 'react'; +import { Breadcrumb, BreadcrumbItem } from '@patternfly/react-core'; + +HeadingBreadcrumbs = () => ( + + Section Home + Section Title + Section Title + Section Title + Section Title + +); +``` diff --git a/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/HeadingBreadcrumbs.js b/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/HeadingBreadcrumbs.js deleted file mode 100644 index 6a4aa72ecf3..00000000000 --- a/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/HeadingBreadcrumbs.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import { Breadcrumb, BreadcrumbItem, BreadcrumbHeading } from '@patternfly/react-core'; - -class HeadingBreadcrumbs extends React.Component { - render() { - return ( - - Section Home - Section Title - Section Title - Section Title - Section Title - - ); - } -} - -export default HeadingBreadcrumbs; diff --git a/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/SimpleBreadcrumbs.js b/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/SimpleBreadcrumbs.js deleted file mode 100644 index 7df3746f893..00000000000 --- a/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/SimpleBreadcrumbs.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import { Breadcrumb, BreadcrumbItem } from '@patternfly/react-core'; - -class SimpleBreadcrumbs extends React.Component { - render() { - return ( - - Section Home - Section Title - Section Title - - Section Landing - - - ); - } -} - -export default SimpleBreadcrumbs; diff --git a/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/WithoutLinkBreadcrumbs.js b/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/WithoutLinkBreadcrumbs.js deleted file mode 100644 index 692db3ecad7..00000000000 --- a/packages/patternfly-4/react-core/src/components/Breadcrumb/examples/WithoutLinkBreadcrumbs.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { Breadcrumb, BreadcrumbItem } from '@patternfly/react-core'; - -class WithoutLinkBreadcrumbs extends React.Component { - render() { - return ( - - Section Home - Section Title - Section Title - Section Title - Section Title - - Section Landing - - - ); - } -} - -export default WithoutLinkBreadcrumbs; diff --git a/packages/patternfly-4/react-core/src/components/Button/Button.docs.js b/packages/patternfly-4/react-core/src/components/Button/Button.docs.js deleted file mode 100644 index 81cf5ffc2f4..00000000000 --- a/packages/patternfly-4/react-core/src/components/Button/Button.docs.js +++ /dev/null @@ -1,24 +0,0 @@ -import { Button, ButtonVariant, ButtonType } from '@patternfly/react-core'; -import VariantsExample from './examples/ButtonVariants'; -import BlockExample from './examples/BlockButton'; -import LinkExample from './examples/LinkButton'; - -export default { - title: 'Button', - components: { - Button - }, - enumValues: { - 'Object.values(ButtonVariant)': Object.values(ButtonVariant), - 'Object.values(ButtonType)': Object.values(ButtonType) - }, - variablesRoot: 'pf-c-button', - examples: [ - { component: VariantsExample, title: 'Button Variants' }, - { component: BlockExample, title: 'Block Button' }, - { - component: LinkExample, - title: 'Links' - } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Button/Button.md b/packages/patternfly-4/react-core/src/components/Button/Button.md new file mode 100644 index 00000000000..ebfeb1b2b73 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Button/Button.md @@ -0,0 +1,53 @@ +--- +title: "Button" +cssPrefix: "pf-c-button" +--- +#### Block Button +```js +import React from 'react'; +import { Button } from '@patternfly/react-core'; + +BlockButton = () => ( + +); +``` + +#### Button Variants +```js +import React from 'react'; +import { Button } from '@patternfly/react-core'; +import { TimesIcon, PlusCircleIcon } from '@patternfly/react-icons'; + +ButtonVariants = () => ( + + {' '} + {' '} + {' '} + + +); +``` + +#### Link Button +```js +import React from 'react'; +import { Button } from '@patternfly/react-core'; + +LinkButton = () => ( + + {' '} + {' '} + + +); +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Button/examples/BlockButton.js b/packages/patternfly-4/react-core/src/components/Button/examples/BlockButton.js deleted file mode 100644 index 2fe6c7c2af6..00000000000 --- a/packages/patternfly-4/react-core/src/components/Button/examples/BlockButton.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import { Button } from '@patternfly/react-core'; - -class BlockButton extends React.Component { - render() { - return ; - } -} - -export default BlockButton; diff --git a/packages/patternfly-4/react-core/src/components/Button/examples/ButtonVariants.js b/packages/patternfly-4/react-core/src/components/Button/examples/ButtonVariants.js deleted file mode 100644 index 894537d78a1..00000000000 --- a/packages/patternfly-4/react-core/src/components/Button/examples/ButtonVariants.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import { Button } from '@patternfly/react-core'; -import { TimesIcon, PlusCircleIcon } from '@patternfly/react-icons'; - -class ButtonVariants extends React.Component { - render() { - return ( - - {' '} - {' '} - {' '} - - - ); - } -} - -export default ButtonVariants; diff --git a/packages/patternfly-4/react-core/src/components/Button/examples/LinkButton.js b/packages/patternfly-4/react-core/src/components/Button/examples/LinkButton.js deleted file mode 100644 index 615ef06d1a2..00000000000 --- a/packages/patternfly-4/react-core/src/components/Button/examples/LinkButton.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import { Button } from '@patternfly/react-core'; - -class LinkButton extends React.Component { - render() { - return ( - - {' '} - {' '} - - - ); - } -} - -export default LinkButton; diff --git a/packages/patternfly-4/react-core/src/components/Card/Card.docs.js b/packages/patternfly-4/react-core/src/components/Card/Card.docs.js deleted file mode 100644 index 3f974e93155..00000000000 --- a/packages/patternfly-4/react-core/src/components/Card/Card.docs.js +++ /dev/null @@ -1,22 +0,0 @@ -import { Card, CardBody, CardFooter, CardHeader } from '@patternfly/react-core'; -import Simple from './examples/SimpleCard'; -import NoFooter from './examples/NoFooterCard'; -import NoHeader from './examples/NoHeaderCard'; -import ContentOnly from './examples/ContentOnlyCard'; - -export default { - title: 'Card', - components: { - Card, - CardHeader, - CardBody, - CardFooter - }, - variablesRoot: 'pf-c-card', - examples: [ - { component: Simple, title: 'Card' }, - { component: NoFooter, title: 'Card with no footer' }, - { component: NoHeader, title: 'Card with no header' }, - { component: ContentOnly, title: 'Card with only a content section' } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Card/Card.md b/packages/patternfly-4/react-core/src/components/Card/Card.md new file mode 100644 index 00000000000..1c8c5615da2 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Card/Card.md @@ -0,0 +1,55 @@ +--- +title: "Card" +cssPrefix: "pf-c-card" +--- +#### Simple Card +```js +import React from 'react'; +import { Card, CardHeader, CardBody, CardFooter } from '@patternfly/react-core'; + +SimpleCard = () => ( + + Header + Body + Footer + +); +``` + +#### Card with no Footer +```js +import React from 'react'; +import { Card, CardHeader, CardBody, CardFooter } from '@patternfly/react-core'; + +NoFooterCard = () => ( + + Header + This card has no footer + +); +``` + +#### Card with no Header +```js +import React from 'react'; +import { Card, CardHeader, CardBody, CardFooter } from '@patternfly/react-core'; + +NoHeaderCard = () => ( + + This card has no header + Footer + +); +``` + +#### Card with only a Content Section +```js +import React from 'react'; +import { Card, CardBody } from '@patternfly/react-core'; + +ContentOnlyCard = () => ( + + Body + +); +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Card/examples/ContentOnlyCard.js b/packages/patternfly-4/react-core/src/components/Card/examples/ContentOnlyCard.js deleted file mode 100644 index e8520c80954..00000000000 --- a/packages/patternfly-4/react-core/src/components/Card/examples/ContentOnlyCard.js +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { Card, CardHeader, CardBody, CardFooter } from '@patternfly/react-core'; - -class ContentOnlyCard extends React.Component { - render() { - return ( - - Body - - ); - } -} - -export default ContentOnlyCard; diff --git a/packages/patternfly-4/react-core/src/components/Card/examples/NoFooterCard.js b/packages/patternfly-4/react-core/src/components/Card/examples/NoFooterCard.js deleted file mode 100644 index 873a64ff177..00000000000 --- a/packages/patternfly-4/react-core/src/components/Card/examples/NoFooterCard.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import { Card, CardHeader, CardBody, CardFooter } from '@patternfly/react-core'; - -class NoFooterCard extends React.Component { - render() { - return ( - - Header - This card has no footer - - ); - } -} - -export default NoFooterCard; diff --git a/packages/patternfly-4/react-core/src/components/Card/examples/NoHeaderCard.js b/packages/patternfly-4/react-core/src/components/Card/examples/NoHeaderCard.js deleted file mode 100644 index 2f0217957c3..00000000000 --- a/packages/patternfly-4/react-core/src/components/Card/examples/NoHeaderCard.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import { Card, CardHeader, CardBody, CardFooter } from '@patternfly/react-core'; - -class NoHeaderCard extends React.Component { - render() { - return ( - - This card has no header - Footer - - ); - } -} - -export default NoHeaderCard; diff --git a/packages/patternfly-4/react-core/src/components/Card/examples/SimpleCard.js b/packages/patternfly-4/react-core/src/components/Card/examples/SimpleCard.js deleted file mode 100644 index 31a5577a3e5..00000000000 --- a/packages/patternfly-4/react-core/src/components/Card/examples/SimpleCard.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import { Card, CardHeader, CardBody, CardFooter } from '@patternfly/react-core'; - -class SimpleCard extends React.Component { - render() { - return ( - - Header - Body - Footer - - ); - } -} - -export default SimpleCard; diff --git a/packages/patternfly-4/react-core/src/components/Checkbox/Checkbox.docs.js b/packages/patternfly-4/react-core/src/components/Checkbox/Checkbox.docs.js deleted file mode 100644 index e967e9f1e06..00000000000 --- a/packages/patternfly-4/react-core/src/components/Checkbox/Checkbox.docs.js +++ /dev/null @@ -1,17 +0,0 @@ -import Controlled from './examples/ControlledCheckbox'; -import Uncontrolled from './examples/UncontrolledCheckbox'; -import Disabled from './examples/DisabledCheckbox'; -import { Checkbox } from '@patternfly/react-core'; - -export default { - title: 'Checkbox', - components: { - Checkbox - }, - variablesRoot: 'pf-c-check', - examples: [ - { component: Controlled, title: 'Controlled Checkbox' }, - { component: Uncontrolled, title: 'Uncontrolled Checkbox' }, - { component: Disabled, title: 'Disabled Checkbox' } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Checkbox/Checkbox.md b/packages/patternfly-4/react-core/src/components/Checkbox/Checkbox.md new file mode 100644 index 00000000000..7bab253e093 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Checkbox/Checkbox.md @@ -0,0 +1,77 @@ +--- +title: "Checkbox" +cssPrefix: "pf-c-check" +--- +#### Controlled Checkbox +```js +import React from 'react'; +import { Checkbox } from '@patternfly/react-core'; + +class ControlledCheckbox extends React.Component { + constructor(props) { + this.state = { + check1: false, + check2: false + }; + this.handleChange = checked => { + const target = event.target; + const value = target.type === 'checkbox' ? target.checked : target.value; + const name = target.name; + this.setState({ [name]: value }); + }; + } + + render() { + return ( + + + + + ); + } +} +``` + +#### Uncontrolled Checkbox +```js +import React from 'react'; +import { Checkbox } from '@patternfly/react-core'; + +UncontrolledCheckbox = () => ( + + + + +); +``` + +#### Disabled Checkbox +```js +import React from 'react'; +import { Checkbox } from '@patternfly/react-core'; + +DisabledCheckbox = () => ( + + {' '} + + +); +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Checkbox/examples/ControlledCheckbox.js b/packages/patternfly-4/react-core/src/components/Checkbox/examples/ControlledCheckbox.js deleted file mode 100644 index 75ca950ca0d..00000000000 --- a/packages/patternfly-4/react-core/src/components/Checkbox/examples/ControlledCheckbox.js +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; -import { Checkbox } from '@patternfly/react-core'; - -class ControlledCheckbox extends React.Component { - state = { - check1: false, - check2: false - }; - - handleChange = checked => { - const target = event.target; - const value = target.type === 'checkbox' ? target.checked : target.value; - const name = target.name; - this.setState({ [name]: value }); - }; - - render() { - return ( - - - - - ); - } -} - -export default ControlledCheckbox; diff --git a/packages/patternfly-4/react-core/src/components/Checkbox/examples/DisabledCheckbox.js b/packages/patternfly-4/react-core/src/components/Checkbox/examples/DisabledCheckbox.js deleted file mode 100644 index b6555c3b799..00000000000 --- a/packages/patternfly-4/react-core/src/components/Checkbox/examples/DisabledCheckbox.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { Checkbox } from '@patternfly/react-core'; - -class DisabledCheckbox extends React.Component { - render() { - return ( - - {' '} - - - ); - } -} - -export default DisabledCheckbox; diff --git a/packages/patternfly-4/react-core/src/components/Checkbox/examples/UncontrolledCheckbox.js b/packages/patternfly-4/react-core/src/components/Checkbox/examples/UncontrolledCheckbox.js deleted file mode 100644 index f22723112b3..00000000000 --- a/packages/patternfly-4/react-core/src/components/Checkbox/examples/UncontrolledCheckbox.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import { Checkbox } from '@patternfly/react-core'; - -class UncontrolledCheckbox extends React.Component { - render() { - return ( - - - - - ); - } -} - -export default UncontrolledCheckbox; diff --git a/packages/patternfly-4/react-core/src/components/ChipGroup/ChipGroup.docs.js b/packages/patternfly-4/react-core/src/components/ChipGroup/ChipGroup.docs.js deleted file mode 100644 index bd0aadcd1ca..00000000000 --- a/packages/patternfly-4/react-core/src/components/ChipGroup/ChipGroup.docs.js +++ /dev/null @@ -1,28 +0,0 @@ -import { ChipGroup, ChipGroupToolbarItem, Chip } from '@patternfly/react-core'; -import Toolbar from './examples/ToolbarChipGroup'; -import MultiSelect from './examples/MultiSelectChipGroup'; -import BadgeChip from './examples/BadgeChip'; - -export default { - title: 'ChipGroup', - components: { - ChipGroup, - ChipGroupToolbarItem, - Chip - }, - variablesRoot: ['pf-c-chip', 'pf-c-chip-group'], - examples: [ - { - component: Toolbar, - title: 'Chip Group Toolbar' - }, - { - component: MultiSelect, - title: 'Chip Group Multi-Select' - }, - { - component: BadgeChip, - title: 'Badge Chip Group' - } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/ChipGroup/ChipGroup.md b/packages/patternfly-4/react-core/src/components/ChipGroup/ChipGroup.md new file mode 100644 index 00000000000..debf3424b3c --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/ChipGroup/ChipGroup.md @@ -0,0 +1,147 @@ +--- +title: "Chip Group" +cssPrefix: "pf-c-chip" +--- +#### Chip Group Toolbar +```js +import React from 'react'; +import { Chip, ChipGroup, ChipGroupToolbarItem } from '@patternfly/react-core'; + +class ToolbarChipGroup extends React.Component { + constructor(props) { + this.state = { + chipGroups: [ + { + category: 'Category 1', + chips: ['Chip 1', 'Chip 2'] + }, + { + category: 'Category 2', + chips: ['Chip 3', 'Chip 4'] + }, + { + category: 'Category 3', + chips: ['Chip 5', 'Chip 6', 'Chip 7', 'Chip 8'] + } + ] + }; + this.deleteItem = id => { + const copyOfChipGroups = this.state.chipGroups; + for (let i = 0; copyOfChipGroups.length > i; i++) { + const index = copyOfChipGroups[i].chips.indexOf(id); + if (index !== -1) { + copyOfChipGroups[i].chips.splice(index, 1); + // check if this is the last item in the group category + if (copyOfChipGroups[i].chips.length === 0) { + copyOfChipGroups.splice(i, 1); + this.setState({ chipGroups: copyOfChipGroups }); + } else { + this.setState({ chipGroups: copyOfChipGroups }); + } + } + } + }; + } + + render() { + const { chipGroups } = this.state; + + return ( + + {chipGroups.map(currentGroup => ( + + {currentGroup.chips.map(chip => ( + this.deleteItem(chip)}> + {chip} + + ))} + + ))} + + ); + } +} +``` + +#### Chip Group Multi-Select +```js +import React from 'react'; +import { Chip, ChipGroup, ChipGroupItem } from '@patternfly/react-core'; + +class MultiSelectChipGroup extends React.Component { + constructor(props) { + this.state = { + chipObject: ['Chip 1', 'Really long chip that goes on and on', 'Chip 3', 'Chip 4'] + }; + this.deleteItem = id => { + const copyOfChipObject = this.state.chipObject; + const index = copyOfChipObject.indexOf(id); + if (index !== -1) { + copyOfChipObject.splice(index, 1); + this.setState({ chipObject: copyOfChipObject }); + } + }; + } + + render() { + const { chipObject } = this.state; + return ( + + {chipObject.map(currentChip => ( + this.deleteItem(currentChip)}> + {currentChip} + + ))} + + ); + } +} +``` + +#### Badge Chip Group +```js +import React from 'react'; +import { Badge, ChipGroup, Chip } from '@patternfly/react-core'; + +class BadgeChip extends React.Component { + constructor(props) { + this.state = { + badgeChipArray: [ + { + name: 'Lemons', + isRead: true, + count: 10 + }, + { + name: 'Limes', + isRead: true, + count: 8 + } + ] + }; + this.deleteItem = id => { + const copyOfbadgeChipArray = this.state.badgeChipArray; + const index = copyOfbadgeChipArray.findIndex(chipObj => chipObj.name === id); + + if (index !== -1) { + copyOfbadgeChipArray.splice(index, 1); + this.setState({ badgeChipArray: copyOfbadgeChipArray }); + } + }; + } + + render() { + const { badgeChipArray } = this.state; + return ( + + {badgeChipArray.map(chip => ( + this.deleteItem(chip.name)}> + {chip.name} + {chip.count} + + ))} + + ); + } +} +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/ChipGroup/examples/BadgeChip.js b/packages/patternfly-4/react-core/src/components/ChipGroup/examples/BadgeChip.js deleted file mode 100644 index 7569aa8aefb..00000000000 --- a/packages/patternfly-4/react-core/src/components/ChipGroup/examples/BadgeChip.js +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; -import { Badge, ChipGroup, Chip } from '@patternfly/react-core'; - -class BadgeChip extends React.Component { - state = { - badgeChipArray: [ - { - name: 'Lemons', - isRead: true, - count: 10 - }, - { - name: 'Limes', - isRead: true, - count: 8 - } - ] - }; - - deleteItem = id => { - debugger; - const copyOfbadgeChipArray = this.state.badgeChipArray; - const index = copyOfbadgeChipArray.findIndex(chipObj => chipObj.name === id); - - if (index !== -1) { - copyOfbadgeChipArray.splice(index, 1); - this.setState({ badgeChipArray: copyOfbadgeChipArray }); - } - }; - - render() { - const { badgeChipArray } = this.state; - return ( - - {badgeChipArray.map(chip => ( - this.deleteItem(chip.name)}> - {chip.name} - {chip.count} - - ))} - - ); - } -} - -export default BadgeChip; diff --git a/packages/patternfly-4/react-core/src/components/ChipGroup/examples/MultiSelectChipGroup.js b/packages/patternfly-4/react-core/src/components/ChipGroup/examples/MultiSelectChipGroup.js deleted file mode 100644 index 57f41057082..00000000000 --- a/packages/patternfly-4/react-core/src/components/ChipGroup/examples/MultiSelectChipGroup.js +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; -import { Chip, ChipGroup, ChipGroupItem } from '@patternfly/react-core'; - -class MultiSelectChipGroup extends React.Component { - state = { - chipObject: ['Chip 1', 'Really long chip that goes on and on', 'Chip 3', 'Chip 4'] - }; - - deleteItem = id => { - const copyOfChipObject = this.state.chipObject; - const index = copyOfChipObject.indexOf(id); - if (index !== -1) { - copyOfChipObject.splice(index, 1); - this.setState({ chipObject: copyOfChipObject }); - } - }; - - render() { - const { chipObject } = this.state; - return ( - - {chipObject.map(currentChip => ( - this.deleteItem(currentChip)}> - {currentChip} - - ))} - - ); - } -} - -export default MultiSelectChipGroup; diff --git a/packages/patternfly-4/react-core/src/components/ChipGroup/examples/ToolbarChipGroup.js b/packages/patternfly-4/react-core/src/components/ChipGroup/examples/ToolbarChipGroup.js deleted file mode 100644 index 5eb1b78246c..00000000000 --- a/packages/patternfly-4/react-core/src/components/ChipGroup/examples/ToolbarChipGroup.js +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; -import { Chip, ChipGroup, ChipGroupToolbarItem } from '@patternfly/react-core'; - -class ToolbarChipGroup extends React.Component { - state = { - chipGroups: [ - { - category: 'Category 1', - chips: ['Chip 1', 'Chip 2'] - }, - { - category: 'Category 2', - chips: ['Chip 3', 'Chip 4'] - }, - { - category: 'Category 3', - chips: ['Chip 5', 'Chip 6', 'Chip 7', 'Chip 8'] - } - ] - }; - - deleteItem = id => { - const copyOfChipGroups = this.state.chipGroups; - for (let i = 0; copyOfChipGroups.length > i; i++) { - const index = copyOfChipGroups[i].chips.indexOf(id); - if (index !== -1) { - copyOfChipGroups[i].chips.splice(index, 1); - // check if this is the last item in the group category - if (copyOfChipGroups[i].chips.length === 0) { - copyOfChipGroups.splice(i, 1); - this.setState({ chipGroups: copyOfChipGroups }); - } else { - this.setState({ chipGroups: copyOfChipGroups }); - } - } - } - }; - - render() { - const { chipGroups } = this.state; - - return ( - - {chipGroups.map(currentGroup => ( - - {currentGroup.chips.map(chip => ( - this.deleteItem(chip)}> - {chip} - - ))} - - ))} - - ); - } -} - -export default ToolbarChipGroup; diff --git a/packages/patternfly-4/react-core/src/components/DataList/DataList.docs.js b/packages/patternfly-4/react-core/src/components/DataList/DataList.docs.js deleted file mode 100644 index 65c54f6761a..00000000000 --- a/packages/patternfly-4/react-core/src/components/DataList/DataList.docs.js +++ /dev/null @@ -1,50 +0,0 @@ -import { - DataList, - DataListItem, - DataListCell, - DataListCheck, - DataListAction, - DataListContent, - DataListToggle -} from '@patternfly/react-core'; -import Simple from './examples/SimpleDataList'; -import CheckboxAction from './examples/CheckboxActionDataList'; -import Expandable from './examples/ExpandableDataList'; -import Modifiers from './examples/ModifiersDataList'; -import Actions from './examples/ActionsDataList'; - -export default { - title: 'DataList', - components: { - DataList, - DataListItem, - DataListCell, - DataListCheck, - DataListAction, - DataListContent, - DataListToggle - }, - variablesRoot: 'pf-c-data-list', - examples: [ - { - component: Simple, - title: 'Data List Simple' - }, - { - component: CheckboxAction, - title: 'Data List Checkboxes, Actions and Additional Cells' - }, - { - component: Actions, - title: 'Data List Actions: single and multiple' - }, - { - component: Expandable, - title: 'Data List Expandable' - }, - { - component: Modifiers, - title: 'Data List Width Modifiers' - } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/DataList/DataList.md b/packages/patternfly-4/react-core/src/components/DataList/DataList.md new file mode 100644 index 00000000000..56f3c15567c --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/DataList/DataList.md @@ -0,0 +1,341 @@ +--- +title: "Data List" +cssPrefix: "pf-c-data-list" +--- +#### Simple Data List +```js +import React from 'react'; +import { DataList, DataListItem, DataListCell } from '@patternfly/react-core'; + +SimpleDataList = () => ( + + + + Primary content + + Secondary content + + + + Second list item title + + Secondary content + + +); +``` + +#### Data List Checkboxes, Actions and Additional Cells +```js +import React from 'react'; +import { DataList, DataListItem, DataListCell, DataListCheck, DataListAction } from '@patternfly/react-core'; + +CheckboxActionDataList = () => ( + + + + + Primary content + + Secondary content + + + + + + Primary content - Lorem ipsum dolor sit amet, consectetur adipisicing + elit, sed do eiusmod. + + Secondary content + + + +); +``` + +#### Data List Actions: single and multiple +```js +import React from 'react'; +import { + Button, + Dropdown, + KebabToggle, + DropdownItem, + DataList, + DataListItem, + DataListCell, + DataListCheck, + DataListAction +} from '@patternfly/react-core'; + +class ActionsDataList extends React.Component { + constructor(props) { + this.state = { isOpen: false, isDeleted: false }; + } + render() { + return ( + + + {!this.state.isDeleted && ( + + + Single actionable Primary content + + Single actionable Secondary content + + + + + )} + + + Multi actions Primary content + + Multi actions Secondary content + Link, + + Action + , + + Disabled Link + + ]} + /> + } /> + + + + ); + } +} +``` + +#### Data List Expandable +```js +import React from 'react'; +import { + DataList, + DataListItem, + DataListCell, + DataListToggle, + DataListContent, + DataListCheck, + DataListAction +} from '@patternfly/react-core'; + +class ExpandableDataList extends React.Component { + constructor(props) { + this.state = { + expanded: ['ex-toggle1'] + }; + } + +render() { + const toggle = id => { + const expanded = this.state.expanded; + const index = expanded.indexOf(id); + const newExpanded = + index >= 0 ? [...expanded.slice(0, index), ...expanded.slice(index + 1, expanded.length)] : [...expanded, id]; + this.setState(() => ({ expanded: newExpanded })); + }; + return ( + + + toggle('ex-toggle1')} + isExpanded={this.state.expanded.includes('ex-toggle1')} + id="ex-toggle1" + aria-controls="ex-expand1" + /> + + +
    Primary content
    + link +
    + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + + + +

    + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et + dolore magna aliqua. +

    +
    +
    + + toggle('ex-toggle2')} + isExpanded={this.state.expanded.includes('ex-toggle2')} + id="ex-toggle2" + aria-controls="ex-expand2" + /> + + +
    Primary content
    +
    + + Lorem ipsum dolor sit amet. + + + +

    + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et + dolore magna aliqua. +

    +
    +
    +
    + ); + } +} +``` + +#### Data List Width Modifiers +```js +import React from 'react'; +import { + DataList, + DataListItem, + DataListCell, + DataListCheck, + DataListAction, + DataListToggle, + DataListContent +} from '@patternfly/react-core'; + +class ModifiersDataList extends React.Component { + constructor(props) { + this.state = { show: true }; + } + render() { + const previewPlaceholder = { + display: 'block', + width: '100%', + padding: '.25rem .5rem', + color: '#004e8a', + backgroundColor: '#def3ff', + border: '1px solid rgba(0,0,0,.1)', + borderRadius: '4px' + }; + + return [ +
    +

    Default fitting - example 1

    + + + + +
    + default +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit.

    +
    +
    + +
    + default +

    + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore + et dolore magna aliqua. +

    +
    +
    +
    +
    +
    , +
    +

    Flex modifiers - example 2

    + + + + +
    + width 2 +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.

    +
    +
    + +
    + width 4 +

    Lorem ipsum dolor sit amet.

    +
    +
    + +
    +
    +
    , +
    +

    Flex modifiers - example 3

    + + + this.setState({ show: !this.state.show })} + /> + + +
    + width 5 +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit.

    +
    +
    + +
    + width 2 +

    Lorem ipsum dolor sit amet, consectetur adipisicing elit.

    +
    +
    + +
    default
    +
    + + +

    + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et + dolore magna aliqua. +

    +
    +
    +
    +
    + ]; + } +} +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/DataList/examples/ActionsDataList.js b/packages/patternfly-4/react-core/src/components/DataList/examples/ActionsDataList.js deleted file mode 100644 index 4d20dbe91c4..00000000000 --- a/packages/patternfly-4/react-core/src/components/DataList/examples/ActionsDataList.js +++ /dev/null @@ -1,72 +0,0 @@ -import React from 'react'; -import { - Button, - Dropdown, - KebabToggle, - DropdownItem, - DataList, - DataListItem, - DataListCell, - DataListCheck, - DataListAction -} from '@patternfly/react-core'; - -class ActionsDataList extends React.Component { - state = { isOpen: false, isDeleted: false }; - render() { - return ( - - - {!this.state.isDeleted && ( - - - Single actionable Primary content - - Single actionable Secondary content - - - - - )} - - - Multi actions Primary content - - Multi actions Secondary content - Link, - - Action - , - - Disabled Link - - ]} - /> - } /> - - - - ); - } -} - -export default ActionsDataList; diff --git a/packages/patternfly-4/react-core/src/components/DataList/examples/CheckboxActionDataList.js b/packages/patternfly-4/react-core/src/components/DataList/examples/CheckboxActionDataList.js deleted file mode 100644 index 8d32f8714b1..00000000000 --- a/packages/patternfly-4/react-core/src/components/DataList/examples/CheckboxActionDataList.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import { DataList, DataListItem, DataListCell, DataListCheck, DataListAction } from '@patternfly/react-core'; - -class CheckboxActionDataList extends React.Component { - render() { - return ( - - - - - Primary content - - Secondary content - - - - - - Primary content - Lorem ipsum dolor sit amet, consectetur adipisicing - elit, sed do eiusmod. - - Secondary content - - - - ); - } -} - -export default CheckboxActionDataList; diff --git a/packages/patternfly-4/react-core/src/components/DataList/examples/ExpandableDataList.js b/packages/patternfly-4/react-core/src/components/DataList/examples/ExpandableDataList.js deleted file mode 100644 index d8f348cfc62..00000000000 --- a/packages/patternfly-4/react-core/src/components/DataList/examples/ExpandableDataList.js +++ /dev/null @@ -1,77 +0,0 @@ -import React from 'react'; -import { - DataList, - DataListItem, - DataListCell, - DataListToggle, - DataListContent, - DataListCheck, - DataListAction -} from '@patternfly/react-core'; - -class ExpandableDataList extends React.Component { - state = { - expanded: ['ex-toggle1'] - }; - - render() { - const toggle = id => { - const expanded = this.state.expanded; - const index = expanded.indexOf(id); - const newExpanded = - index >= 0 ? [...expanded.slice(0, index), ...expanded.slice(index + 1, expanded.length)] : [...expanded, id]; - this.setState(() => ({ expanded: newExpanded })); - }; - return ( - - - toggle('ex-toggle1')} - isExpanded={this.state.expanded.includes('ex-toggle1')} - id="ex-toggle1" - aria-controls="ex-expand1" - /> - - -
    Primary content
    - link -
    - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - - - -

    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et - dolore magna aliqua. -

    -
    -
    - - toggle('ex-toggle2')} - isExpanded={this.state.expanded.includes('ex-toggle2')} - id="ex-toggle2" - aria-controls="ex-expand2" - /> - - -
    Primary content
    -
    - - Lorem ipsum dolor sit amet. - - - -

    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et - dolore magna aliqua. -

    -
    -
    -
    - ); - } -} - -export default ExpandableDataList; diff --git a/packages/patternfly-4/react-core/src/components/DataList/examples/ModifiersDataList.js b/packages/patternfly-4/react-core/src/components/DataList/examples/ModifiersDataList.js deleted file mode 100644 index d022579def9..00000000000 --- a/packages/patternfly-4/react-core/src/components/DataList/examples/ModifiersDataList.js +++ /dev/null @@ -1,118 +0,0 @@ -import React from 'react'; -import { - DataList, - DataListItem, - DataListCell, - DataListCheck, - DataListAction, - DataListToggle, - DataListContent -} from '@patternfly/react-core'; - -class ModifiersDataList extends React.Component { - state = { show: true }; - render() { - const previewPlaceholder = { - display: 'block', - width: '100%', - padding: '.25rem .5rem', - color: '#004e8a', - backgroundColor: '#def3ff', - border: '1px solid rgba(0,0,0,.1)', - borderRadius: '4px' - }; - - return [ -
    -

    Default fitting - example 1

    - - - - -
    - default -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit.

    -
    -
    - -
    - default -

    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore - et dolore magna aliqua. -

    -
    -
    -
    -
    -
    , -
    -

    Flex modifiers - example 2

    - - - - -
    - width 2 -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt.

    -
    -
    - -
    - width 4 -

    Lorem ipsum dolor sit amet.

    -
    -
    - -
    -
    -
    , -
    -

    Flex modifiers - example 3

    - - - this.setState({ show: !this.state.show })} - /> - - -
    - width 5 -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit.

    -
    -
    - -
    - width 2 -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit.

    -
    -
    - -
    default
    -
    - - -

    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et - dolore magna aliqua. -

    -
    -
    -
    -
    - ]; - } -} - -export default ModifiersDataList; diff --git a/packages/patternfly-4/react-core/src/components/DataList/examples/SimpleDataList.js b/packages/patternfly-4/react-core/src/components/DataList/examples/SimpleDataList.js deleted file mode 100644 index d83ba4510b9..00000000000 --- a/packages/patternfly-4/react-core/src/components/DataList/examples/SimpleDataList.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { DataList, DataListItem, DataListCell } from '@patternfly/react-core'; - -class SimpleDataList extends React.Component { - render() { - return ( - - - - Primary content - - Secondary content - - - - Second list item title - - Secondary content - - - ); - } -} - -export default SimpleDataList; diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/Dropdown.md b/packages/patternfly-4/react-core/src/components/Dropdown/Dropdown.md new file mode 100644 index 00000000000..37f2e2f1a81 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Dropdown/Dropdown.md @@ -0,0 +1,397 @@ +--- +title: "Dropdown" +cssPrefix: "pf-c-dropdown" +--- +#### Simple Dropdown +```js +import React from 'react'; +import { Dropdown, DropdownToggle, DropdownItem, DropdownSeparator } from '@patternfly/react-core'; + +class SimpleDropdown extends React.Component { + constructor(props) { + super(props); + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + const dropdownItems = [ + Link, + + Action + , + + Disabled Link + , + + Disabled Action + , + , + Separated Link, + + Separated Action + + ]; + return ( + Dropdown} + isOpen={isOpen} + dropdownItems={dropdownItems} + /> + ); + } +} +``` + +#### Dropdown (disabled) +```js +import React from 'react'; +import { Dropdown, DropdownToggle, DropdownItem, DropdownSeparator } from '@patternfly/react-core'; + +class DisabledDropdown extends React.Component { + constructor(props) { + super(props); + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + const dropdownItems = [ + Link, + + Action + , + + Disabled Link + , + + Disabled Action + , + , + Separated Link, + + Separated Action + + ]; + return ( + Dropdown} + isOpen={isOpen} + dropdownItems={dropdownItems} + /> + ); + } +} +``` + +#### Dropdown (position right) +```js +import React from 'react'; +import { Dropdown, DropdownToggle, DropdownItem, DropdownSeparator, DropdownPosition } from '@patternfly/react-core'; + +class PositionRightDropdown extends React.Component { + constructor(props) { + super(props); + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + const dropdownItems = [ + Link, + + Action + , + + Disabled Link + , + + Disabled Action + , + , + Separated Link, + + Separated Action + + ]; + return ( + Dropdown} + isOpen={isOpen} + dropdownItems={dropdownItems} + /> + ); + } +} +``` + +#### Dropdown (direction up) +```js +import React from 'react'; +import { Dropdown, DropdownToggle, DropdownItem, DropdownSeparator, DropdownDirection } from '@patternfly/react-core'; + +class DirectionUpDropdown extends React.Component { + constructor(props) { + super(props); + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + const dropdownItems = [ + Link, + + Action + , + + Disabled Link + , + + Disabled Action + , + , + Separated Link, + + Separated Action + + ]; + return ( + Dropdown} + isOpen={isOpen} + dropdownItems={dropdownItems} + /> + ); + } +} +``` + +#### Dropdown with Kebab +```js +import React from 'react'; +import { Dropdown, KebabToggle, DropdownItem, DropdownSeparator } from '@patternfly/react-core'; + +class KebabDropdown extends React.Component { + constructor(props) { + super(props); + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + const dropdownItems = [ + Link, + + Action + , + + Disabled Link + , + + Disabled Action + , + , + Separated Link, + + Separated Action + + ]; + return ( + } + isOpen={isOpen} + isPlain + dropdownItems={dropdownItems} + /> + ); + } +} +``` + +#### Dropdown (icon only) +```js +import React from 'react'; +import { Dropdown, DropdownItem, DropdownToggle, DropdownSeparator } from '@patternfly/react-core'; +import { ThIcon } from '@patternfly/react-icons'; + +class IconDropdown extends React.Component { + constructor(props) { + super(props); + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + const dropdownItems = [ + Link, + + Action + , + + Disabled Link + , + + Disabled Action + , + , + Separated Link, + + Separated Action + + ]; + return ( + + + + } + isOpen={isOpen} + isPlain + dropdownItems={dropdownItems} + /> + ); + } +} +``` + +#### React Router Link usage +A react-router Link may be wrapped by DropdownItem or used directly within Dropdown. +```nolive +/** Wrapped Link for DropdownItem list **/ + + Link + + +/** Direct child of Dropdown **/ + + Expanded Dropdown + +} +isOpen={isOpen} +> + Link + +``` + +#### Dropdown Panel +The Basic Dropdown is provided for flexibility in allowing various content within a dropdown. +```js +import React from 'react'; +import { Dropdown, DropdownToggle } from '@patternfly/react-core'; + +class DropdownPanel extends React.Component { + constructor(props) { + super(props); + this.state = { + isOpen: false + }; + this.onToggle = isOpen => { + this.setState({ + isOpen + }); + }; + this.onSelect = event => { + this.setState({ + isOpen: !this.state.isOpen + }); + }; + } + + render() { + const { isOpen } = this.state; + return ( + Expanded Dropdown} + isOpen={isOpen} + > +
    [Panel contents here]
    +
    + ); + } +} +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/examples/DirectionUpDropdown.js b/packages/patternfly-4/react-core/src/components/Dropdown/examples/DirectionUpDropdown.js deleted file mode 100644 index 210570ef171..00000000000 --- a/packages/patternfly-4/react-core/src/components/Dropdown/examples/DirectionUpDropdown.js +++ /dev/null @@ -1,53 +0,0 @@ -import React, { Component } from 'react'; -import { Dropdown, DropdownToggle, DropdownItem, DropdownSeparator, DropdownDirection } from '@patternfly/react-core'; - -export default class DirectionUpDropdown extends Component { - constructor(props) { - super(props); - this.state = { - isOpen: false - }; - } - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - const dropdownItems = [ - Link, - - Action - , - - Disabled Link - , - - Disabled Action - , - , - Separated Link, - - Separated Action - - ]; - return ( - Dropdown} - isOpen={isOpen} - dropdownItems={dropdownItems} - /> - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/examples/DisabledDropdown.js b/packages/patternfly-4/react-core/src/components/Dropdown/examples/DisabledDropdown.js deleted file mode 100644 index 7e898158282..00000000000 --- a/packages/patternfly-4/react-core/src/components/Dropdown/examples/DisabledDropdown.js +++ /dev/null @@ -1,52 +0,0 @@ -import React, { Component } from 'react'; -import { Dropdown, DropdownToggle, DropdownItem, DropdownSeparator } from '@patternfly/react-core'; - -export default class DisabledDropdown extends Component { - constructor(props) { - super(props); - this.state = { - isOpen: false - }; - } - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - const dropdownItems = [ - Link, - - Action - , - - Disabled Link - , - - Disabled Action - , - , - Separated Link, - - Separated Action - - ]; - return ( - Dropdown} - isOpen={isOpen} - dropdownItems={dropdownItems} - /> - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/examples/DropdownPanel.js b/packages/patternfly-4/react-core/src/components/Dropdown/examples/DropdownPanel.js deleted file mode 100644 index 4c0b7910fba..00000000000 --- a/packages/patternfly-4/react-core/src/components/Dropdown/examples/DropdownPanel.js +++ /dev/null @@ -1,36 +0,0 @@ -import React, { Component } from 'react'; -import { Dropdown, DropdownToggle } from '@patternfly/react-core'; - -export default class DropdownPanel extends Component { - constructor(props) { - super(props); - this.state = { - isOpen: false - }; - } - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - return ( - Expanded Dropdown} - isOpen={isOpen} - > -
    [Panel contents here]
    -
    - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/examples/IconDropdown.js b/packages/patternfly-4/react-core/src/components/Dropdown/examples/IconDropdown.js deleted file mode 100644 index 71bad8509bd..00000000000 --- a/packages/patternfly-4/react-core/src/components/Dropdown/examples/IconDropdown.js +++ /dev/null @@ -1,55 +0,0 @@ -import React, { Component } from 'react'; -import { Dropdown, DropdownItem, DropdownToggle, DropdownSeparator } from '@patternfly/react-core'; -import { ThIcon } from '@patternfly/react-icons'; - -export default class IconDropdown extends Component { - state = { - isOpen: false - }; - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - const dropdownItems = [ - Link, - - Action - , - - Disabled Link - , - - Disabled Action - , - , - Separated Link, - - Separated Action - - ]; - return ( - - - - } - isOpen={isOpen} - isPlain - dropdownItems={dropdownItems} - /> - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/examples/KebabDropdown.js b/packages/patternfly-4/react-core/src/components/Dropdown/examples/KebabDropdown.js deleted file mode 100644 index 32abc69cfd2..00000000000 --- a/packages/patternfly-4/react-core/src/components/Dropdown/examples/KebabDropdown.js +++ /dev/null @@ -1,53 +0,0 @@ -import React, { Component } from 'react'; -import { Dropdown, KebabToggle, DropdownItem, DropdownSeparator } from '@patternfly/react-core'; - -export default class KebabDropdown extends Component { - constructor(props) { - super(props); - this.state = { - isOpen: false - }; - } - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - const dropdownItems = [ - Link, - - Action - , - - Disabled Link - , - - Disabled Action - , - , - Separated Link, - - Separated Action - - ]; - return ( - } - isOpen={isOpen} - isPlain - dropdownItems={dropdownItems} - /> - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/examples/PositionRightDropdown.js b/packages/patternfly-4/react-core/src/components/Dropdown/examples/PositionRightDropdown.js deleted file mode 100644 index ab4faeb1563..00000000000 --- a/packages/patternfly-4/react-core/src/components/Dropdown/examples/PositionRightDropdown.js +++ /dev/null @@ -1,53 +0,0 @@ -import React, { Component } from 'react'; -import { Dropdown, DropdownToggle, DropdownItem, DropdownSeparator, DropdownPosition } from '@patternfly/react-core'; - -export default class PositionRightDropdown extends Component { - constructor(props) { - super(props); - this.state = { - isOpen: false - }; - } - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - const dropdownItems = [ - Link, - - Action - , - - Disabled Link - , - - Disabled Action - , - , - Separated Link, - - Separated Action - - ]; - return ( - Dropdown} - isOpen={isOpen} - dropdownItems={dropdownItems} - /> - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/examples/ReactLinkDropdown.js b/packages/patternfly-4/react-core/src/components/Dropdown/examples/ReactLinkDropdown.js deleted file mode 100644 index 348bb39741c..00000000000 --- a/packages/patternfly-4/react-core/src/components/Dropdown/examples/ReactLinkDropdown.js +++ /dev/null @@ -1,29 +0,0 @@ -import React, { Component } from 'react'; - -export default class ReactLinkDropdown extends Component { - render() { - return ( -
    -        {`
    -  /** Wrapped Link for DropdownItem list **/
    -  
    -    Link
    -  
    -
    -  /** Direct child of Dropdown **/
    -  
    -        Expanded Dropdown
    -      
    -    }
    -    isOpen={isOpen}
    -  >
    -    Link
    -  
    -        `}
    -      
    - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/Dropdown/examples/SimpleDropdown.js b/packages/patternfly-4/react-core/src/components/Dropdown/examples/SimpleDropdown.js deleted file mode 100644 index c53f9e58e44..00000000000 --- a/packages/patternfly-4/react-core/src/components/Dropdown/examples/SimpleDropdown.js +++ /dev/null @@ -1,52 +0,0 @@ -import React, { Component } from 'react'; -import { Dropdown, DropdownToggle, DropdownItem, DropdownSeparator } from '@patternfly/react-core'; - -export default class SimpleDropdown extends Component { - constructor(props) { - super(props); - this.state = { - isOpen: false - }; - } - - onToggle = isOpen => { - this.setState({ - isOpen - }); - }; - - onSelect = event => { - this.setState({ - isOpen: !this.state.isOpen - }); - }; - - render() { - const { isOpen } = this.state; - const dropdownItems = [ - Link, - - Action - , - - Disabled Link - , - - Disabled Action - , - , - Separated Link, - - Separated Action - - ]; - return ( - Dropdown} - isOpen={isOpen} - dropdownItems={dropdownItems} - /> - ); - } -} diff --git a/packages/patternfly-4/react-core/src/components/EmptyState/EmptyState.md b/packages/patternfly-4/react-core/src/components/EmptyState/EmptyState.md new file mode 100644 index 00000000000..90e54d6a3b6 --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/EmptyState/EmptyState.md @@ -0,0 +1,37 @@ +--- +title: "Empty State" +cssPrefix: "pf-c-empty-state" +--- +#### Simple Empty State +```js +import React from 'react'; +import { + Title, + Button, + EmptyState, + EmptyStateIcon, + EmptyStateBody, + EmptyStateSecondaryActions +} from '@patternfly/react-core'; +import { CubesIcon } from '@patternfly/react-icons'; + +SimpleEmptyState = () => ( + + + Empty State + + This represents an the empty state pattern in Patternfly 4. Hopefully it's simple enough to use but flexible + enough to meet a variety of needs. + + + + + + + + + + + +); +``` \ No newline at end of file diff --git a/packages/patternfly-4/react-core/src/components/EmptyState/examples/SimpleEmptyState.js b/packages/patternfly-4/react-core/src/components/EmptyState/examples/SimpleEmptyState.js deleted file mode 100644 index 7a87595ba3c..00000000000 --- a/packages/patternfly-4/react-core/src/components/EmptyState/examples/SimpleEmptyState.js +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import { - Title, - Button, - EmptyState, - EmptyStateIcon, - EmptyStateBody, - EmptyStateSecondaryActions -} from '@patternfly/react-core'; -import { CubesIcon } from '@patternfly/react-icons'; - -class SimpleEmptyState extends React.Component { - render() { - return ( - - - Empty State - - This represents an the empty state pattern in Patternfly 4. Hopefully it's simple enough to use but flexible - enough to meet a variety of needs. - - - - - - - - - - - - ); - } -} - -export default SimpleEmptyState; diff --git a/packages/patternfly-4/react-core/src/components/Form/Form.docs.js b/packages/patternfly-4/react-core/src/components/Form/Form.docs.js deleted file mode 100644 index 3572ffd5090..00000000000 --- a/packages/patternfly-4/react-core/src/components/Form/Form.docs.js +++ /dev/null @@ -1,19 +0,0 @@ -import Simple from './examples/SimpleForm'; -import Horizontal from './examples/HorizontalForm'; -import Invalid from './examples/InvalidForm'; -import { Form, FormGroup, ActionGroup } from '@patternfly/react-core'; - -export default { - title: 'Form', - components: { - Form, - FormGroup, - ActionGroup - }, - variablesRoot: 'pf-c-form', - examples: [ - { component: Simple, title: 'Simple Form' }, - { component: Horizontal, title: 'Horizontal form' }, - { component: Invalid, title: 'Invalid form' } - ] -}; diff --git a/packages/patternfly-4/react-core/src/components/Form/Form.md b/packages/patternfly-4/react-core/src/components/Form/Form.md new file mode 100644 index 00000000000..6a4194a807b --- /dev/null +++ b/packages/patternfly-4/react-core/src/components/Form/Form.md @@ -0,0 +1,255 @@ +--- +title: "Form" +cssPrefix: "pf-c-form" +--- +#### Simple Form +```js +import React from 'react'; +import { Form, FormGroup, TextInput, Checkbox, ActionGroup, Button, Radio } from '@patternfly/react-core'; + +class SimpleForm extends React.Component { + constructor(props) { + this.state = { + value1: '', + value2: '', + value3: '' + }; + this.handleTextInputChange1 = value1 => { + this.setState({ value1 }); + }; + this.handleTextInputChange2 = value2 => { + this.setState({ value2 }); + }; + this.handleTextInputChange3 = value3 => { + this.setState({ value3 }); + }; + } + + render() { + const { value1, value2, value3 } = this.state; + + return ( +
    + + + + + + + + + + + + + + + + + + + + + + + + + + ); + } +} +``` + +#### Form (Horizontal) +```js +import React from 'react'; +import { + FormGroup, + TextInput, + TextArea, + Form, + FormSelectOption, + FormSelect, + Radio, + Button, + ActionGroup, + Checkbox +} from '@patternfly/react-core'; + +class HorizontalForm extends React.Component { + constructor(props) { + this.state = { + value: 'please choose', + value1: '', + value2: '', + value3: '' + }; + this.onChange = (value, event) => { + this.setState({ value }); + }; + this.handleTextInputChange1 = value1 => { + this.setState({ value1 }); + }; + this.handleTextInputChange2 = value2 => { + this.setState({ value2 }); + }; + this.handleTextInputChange3 = value3 => { + this.setState({ value3 }); + }; + this.options = [ + { value: 'please choose', label: 'Please Choose', disabled: false }, + { value: 'mr', label: 'Mr', disabled: false }, + { value: 'miss', label: 'Miss', disabled: false }, + { value: 'mrs', label: 'Mrs', disabled: false }, + { value: 'ms', label: 'Ms', disabled: false }, + { value: 'dr', label: 'Dr', disabled: false }, + { value: 'other', label: 'Other', disabled: false } + ]; + } + + render() { + const { value1, value2, value3 } = this.state; + + return ( +
    + + + + + + + + + {this.options.map((option, index) => ( + + ))} + + + +
    CSS Variable
    - - {title} - - - -