diff --git a/.eslintignore b/.eslintignore index ab3116f9aff..d32261f2654 100644 --- a/.eslintignore +++ b/.eslintignore @@ -12,6 +12,7 @@ coverage **/Generated **/build css +packages/react-docs/static # package managers yarn-error.log diff --git a/packages/react-core/package.json b/packages/react-core/package.json index d8c04001ea6..998a75a1d16 100644 --- a/packages/react-core/package.json +++ b/packages/react-core/package.json @@ -29,12 +29,13 @@ }, "homepage": "https://github.com/patternfly/patternfly-react#readme", "scripts": { - "build": "yarn build:babel && yarn build:types && node ./scripts/copyStyles.js", + "build": "yarn build:babel && yarn build:umd && yarn build:types && node ./scripts/copyStyles.js", "build:babel": "concurrently \"yarn build:babel:esm && yarn build:babel:umd\" \"yarn build:babel:cjs\"", "build:babel:cjs": "babel --source-maps --extensions \".js,.ts,.tsx\" src --out-dir dist/js --presets=@babel/env", "build:babel:esm": "babel --source-maps --extensions \".js,.ts,.tsx\" src --out-dir dist/esm", "build:babel:umd": "babel --source-maps --extensions \".js\" dist/esm --out-dir dist/umd --plugins=transform-es2015-modules-umd", "build:types": "tsc -p tsconfig.gen-dts.json", + "build:umd": "rollup -c && rollup -c --environment IS_PRODUCTION", "clean": "rimraf dist", "develop": "yarn build:babel:esm --skip-initial-build --watch --verbose", "gen:tests": "yo tsx-docgen" @@ -67,6 +68,12 @@ "generator-tsx-docgen": "^0.1.0", "glob": "^7.1.2", "rimraf": "^2.6.2", + "rollup": "^2.2.0", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-commonjs": "^11.0.2", + "@rollup/plugin-replace": "^2.3.1", + "rollup-plugin-scss": "^2.1.0", + "rollup-plugin-terser": "^5.3.0", "typescript": "^3.8.3", "yo": "^3.1.1" }, diff --git a/packages/react-core/rollup.config.js b/packages/react-core/rollup.config.js new file mode 100644 index 00000000000..27882cb0069 --- /dev/null +++ b/packages/react-core/rollup.config.js @@ -0,0 +1,31 @@ +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import scss from 'rollup-plugin-scss'; +import replace from '@rollup/plugin-replace'; +import { terser } from 'rollup-plugin-terser'; + +const isProduction = process.env.IS_PRODUCTION; + +module.exports = { + input: 'dist/esm/index.js', + output: { + file: `dist/umd/react-core${isProduction ? '.min' : ''}.js`, + format: 'umd', + name: 'PatternFlyReact', + globals: { + react: 'React', + 'react-dom': 'ReactDOM', + 'prop-types': 'PropTypes' + } + }, + external: ['react', 'react-dom', 'prop-types'], + plugins: [ + replace({ + 'process.env.NODE_ENV': `'${isProduction ? 'production' : 'development'}'` + }), + resolve(), + commonjs(), + scss(), + isProduction && terser() + ] +}; diff --git a/packages/react-core/src/components/Alert/Alert.tsx b/packages/react-core/src/components/Alert/Alert.tsx index b3dcf425923..d3f574e526c 100644 --- a/packages/react-core/src/components/Alert/Alert.tsx +++ b/packages/react-core/src/components/Alert/Alert.tsx @@ -5,6 +5,7 @@ import accessibleStyles from '@patternfly/react-styles/css/utilities/Accessibili import { AlertIcon } from './AlertIcon'; import { capitalize } from '../../helpers/util'; import { InjectedOuiaProps, withOuiaContext } from '../withOuia'; +import { AlertContext } from './AlertContext'; export enum AlertVariant { success = 'success', @@ -35,13 +36,6 @@ export interface AlertProps extends Omit, 'actio isLiveRegion?: boolean; } -interface AlertContext { - title: React.ReactNode; - variantLabel?: string; -} - -export const AlertContext = React.createContext(null); - const Alert: React.FunctionComponent = ({ variant = AlertVariant.info, isInline = false, diff --git a/packages/react-core/src/components/Alert/AlertActionCloseButton.tsx b/packages/react-core/src/components/Alert/AlertActionCloseButton.tsx index e25a2752351..023edb31001 100644 --- a/packages/react-core/src/components/Alert/AlertActionCloseButton.tsx +++ b/packages/react-core/src/components/Alert/AlertActionCloseButton.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { Button, ButtonVariant, ButtonProps } from '../Button'; import TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon'; -import { AlertContext } from '..'; +import { AlertContext } from './AlertContext'; interface AlertActionCloseButtonProps extends ButtonProps { /** Additional classes added to the AlertActionCloseButton */ diff --git a/packages/react-core/src/components/Alert/AlertContext.ts b/packages/react-core/src/components/Alert/AlertContext.ts new file mode 100644 index 00000000000..cbda82bb4a0 --- /dev/null +++ b/packages/react-core/src/components/Alert/AlertContext.ts @@ -0,0 +1,8 @@ +import * as React from 'react'; + +interface AlertContext { + title: React.ReactNode; + variantLabel?: string; +} + +export const AlertContext = React.createContext(null); diff --git a/packages/react-core/src/components/Alert/index.ts b/packages/react-core/src/components/Alert/index.ts index 0f50aa6a8e3..0c84bd74c44 100644 --- a/packages/react-core/src/components/Alert/index.ts +++ b/packages/react-core/src/components/Alert/index.ts @@ -1,3 +1,4 @@ export * from './Alert'; +export * from './AlertContext'; export * from './AlertActionCloseButton'; export * from './AlertActionLink'; diff --git a/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncher.tsx b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncher.tsx index 5c7df5da3b2..504cea0d13c 100644 --- a/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncher.tsx +++ b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncher.tsx @@ -8,6 +8,7 @@ import { DropdownWithContext } from '../Dropdown/DropdownWithContext'; import { ApplicationLauncherGroup } from './ApplicationLauncherGroup'; import { ApplicationLauncherSeparator } from './ApplicationLauncherSeparator'; import { ApplicationLauncherItem } from './ApplicationLauncherItem'; +import { ApplicationLauncherContext } from './ApplicationLauncherContext'; export interface ApplicationLauncherProps extends React.HTMLProps { /** Additional element css classes */ @@ -57,11 +58,6 @@ export interface ApplicationLauncherProps extends React.HTMLProps {} -}); - export class ApplicationLauncher extends React.Component { static defaultProps: ApplicationLauncherProps = { className: '', diff --git a/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherContent.tsx b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherContent.tsx index e1e96595982..80b477cd169 100644 --- a/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherContent.tsx +++ b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherContent.tsx @@ -5,7 +5,7 @@ import accessibleStyles from '@patternfly/react-styles/css/utilities/Accessibili import { ApplicationLauncherIcon } from './ApplicationLauncherIcon'; import { ApplicationLauncherText } from './ApplicationLauncherText'; import ExternalLinkAltIcon from '@patternfly/react-icons/dist/js/icons/external-link-alt-icon'; -import { ApplicationLauncherItemContext } from './ApplicationLauncherItem'; +import { ApplicationLauncherItemContext } from './ApplicationLauncherItemContext'; export interface ApplicationLauncherContentProps { /** Main content to be rendered */ diff --git a/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherContext.ts b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherContext.ts new file mode 100644 index 00000000000..790ac1d01da --- /dev/null +++ b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherContext.ts @@ -0,0 +1,6 @@ +import * as React from 'react'; + +export const ApplicationLauncherContext = React.createContext({ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onFavorite: (itemId: string, isFavorite: boolean) => {} +}); diff --git a/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherItem.tsx b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherItem.tsx index 21aa24be95a..809f4a24c35 100644 --- a/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherItem.tsx +++ b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherItem.tsx @@ -3,11 +3,10 @@ import { css } from '@patternfly/react-styles'; import styles from '@patternfly/react-styles/css/components/AppLauncher/app-launcher'; import { DropdownItem, DropdownItemProps } from '../Dropdown'; import { ApplicationLauncherContent } from './ApplicationLauncherContent'; -import { ApplicationLauncherContext } from './ApplicationLauncher'; +import { ApplicationLauncherContext } from './ApplicationLauncherContext'; +import { ApplicationLauncherItemContext } from './ApplicationLauncherItemContext'; import StarIcon from '@patternfly/react-icons/dist/js/icons/star-icon'; -export const ApplicationLauncherItemContext = React.createContext({ isExternal: false, icon: null }); - export interface ApplicationLauncherItemProps { /** Icon rendered before the text */ icon?: React.ReactNode; diff --git a/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherItemContext.ts b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherItemContext.ts new file mode 100644 index 00000000000..668125bc63f --- /dev/null +++ b/packages/react-core/src/components/ApplicationLauncher/ApplicationLauncherItemContext.ts @@ -0,0 +1,3 @@ +import * as React from 'react'; + +export const ApplicationLauncherItemContext = React.createContext({ isExternal: false, icon: null }); diff --git a/packages/react-core/src/components/ApplicationLauncher/index.ts b/packages/react-core/src/components/ApplicationLauncher/index.ts index 5d68ac00f5a..9fa98e29991 100644 --- a/packages/react-core/src/components/ApplicationLauncher/index.ts +++ b/packages/react-core/src/components/ApplicationLauncher/index.ts @@ -1,5 +1,7 @@ export * from './ApplicationLauncher'; +export * from './ApplicationLauncherContext'; export * from './ApplicationLauncherItem'; +export * from './ApplicationLauncherItemContext'; export * from './ApplicationLauncherContent'; export * from './ApplicationLauncherIcon'; export * from './ApplicationLauncherText'; diff --git a/packages/react-core/src/demos/CardView/examples/CardView.md b/packages/react-core/src/demos/CardView/examples/CardView.md index 9b53982ae91..616209998cc 100644 --- a/packages/react-core/src/demos/CardView/examples/CardView.md +++ b/packages/react-core/src/demos/CardView/examples/CardView.md @@ -750,7 +750,7 @@ class CardViewBasic extends React.Component { isChecked={selectedItems.includes(product.id)} defaultChecked={this.state.itemsCheckedByDefault} aria-label="card checkbox example" - id="check-1" + id={`check-${product.id}`} /> diff --git a/packages/react-docs/gatsby-config.js b/packages/react-docs/gatsby-config.js index 7a4ce504913..bb100ff651d 100644 --- a/packages/react-docs/gatsby-config.js +++ b/packages/react-docs/gatsby-config.js @@ -11,6 +11,7 @@ module.exports = { resolve: `gatsby-theme-patternfly-org`, options: { context: 'react', // For global items that need sideNav + showGdprBanner: false, // GDPR banner hiddenPages: ['withOuia', 'Training'], // By title sideNav: { react: [ diff --git a/packages/react-docs/static/like-button.js b/packages/react-docs/static/like-button.js new file mode 100644 index 00000000000..2ecc6e3779c --- /dev/null +++ b/packages/react-docs/static/like-button.js @@ -0,0 +1,30 @@ +'use strict'; + +const e = React.createElement; + +class LikeButton extends React.Component { + constructor(props) { + super(props); + this.state = { liked: false }; + } + + render() { + if (this.state.liked) { + return e(PatternFlyReact.Alert, { + title: ' Great success', + children: 'You liked this', + variant: 'success' + }); + } + + return e( + PatternFlyReact.Button, + { onClick: () => this.setState({ liked: true }) }, + 'Like' + ); + } +} + + +const domContainer = document.querySelector('#react-root'); +ReactDOM.render(e(LikeButton), domContainer); \ No newline at end of file diff --git a/packages/react-docs/static/umd.html b/packages/react-docs/static/umd.html new file mode 100644 index 00000000000..d281d13e8b8 --- /dev/null +++ b/packages/react-docs/static/umd.html @@ -0,0 +1,98 @@ + + + + + + + +

PatternFly-React UMD Build

+

+ UMD build allow for you to quickly get started using @patternfly/react-core. + If you care about how this is accomplished, it's highly recommended to read  + React's getting started with UMD guide before returning here since. + This guide uses React's guide as a base. +

+

1. Write HTML

+

+ Create a container to inject React components into. +

+      <div id="react-root">Inject in here</div>
+    
+

+

2. Include JS

+

+ PatternFly React depends on React and PropTypes. Add these to the bottom of the <body> tag on your page: +

+      <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
+      <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
+      <script src="https://unpkg.com/prop-types@15.6/prop-types.js" crossorigin></script>
+      <script src="https://unpkg.com/@patternfly/react-core@3/dist/umd/react-core.umd.js"></script>
+      <script src="like-button.js"></script>
+    
+ + @patternfly/react-core exposes a "PatternFlyReact" object for use in your like-button.js. Populate your like-button.js with something like: +
+      'use strict';
+
+      const e = React.createElement;
+
+      class LikeButton extends React.Component {
+        constructor(props) {
+          super(props);
+          this.state = { liked: false };
+        }
+
+        render() {
+          if (this.state.liked) {
+            return e(PatternFlyReact.Alert, {
+              title: ' Great success',
+              children: 'You liked this',
+              variant: 'success'
+            });
+          }
+
+          return e(
+            PatternFlyReact.Button,
+            { onClick: () => this.setState({ liked: true }) },
+            'Like'
+          );
+        }
+      }
+
+
+      const domContainer = document.querySelector('#react-root');
+      ReactDOM.render(e(LikeButton), domContainer);
+    
+

+

3. (Optional) Include styles

+

+ You have to include ALL our PatternFly styles. There's two ways to do this: +

+      <link rel="stylesheet" href="https://unpkg.com/@patternfly/patternfly@2/patternfly.css" crossorigin />
+    
+ OR +
+      <link rel="stylesheet" href="https://unpkg.com/@patternfly/react-core@3/dist/styles/base.css" crossorigin />
+      <link rel="stylesheet" href="https://unpkg.com/@patternfly/react-core@3/dist/react-core.umd.css" crossorigin />
+    
+

+

4. Don't do this in production

+

+ This implementation is very bloated. + ALL of React, ReactDOM, PropTypes (which you don't need in production...), and PatternFly (including CSS and fonts) are included which takes 912KB after being gzipped. + Even when minified, they take 520Kb after being gzipped. + Also, you probably want to be able to use JSX. + To enable using JSX, treeshaking, and other modern JS tools PatternFly recommendeds consumption using Webpack. + It's as simple as cloning our seed repo and running 2 commands! +

+

+ This page serves as an example of how to do this. Checkout the like button below! +

+
Inject like button here
+ + + + + + + diff --git a/yarn.lock b/yarn.lock index 511e14d49c9..db7858d818a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3401,6 +3401,43 @@ react-lifecycles-compat "^3.0.4" warning "^3.0.0" +"@rollup/plugin-commonjs@^11.0.2": + version "11.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz#837cc6950752327cb90177b608f0928a4e60b582" + integrity sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g== + dependencies: + "@rollup/pluginutils" "^3.0.0" + estree-walker "^1.0.1" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + +"@rollup/plugin-node-resolve@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz#8c6e59c4b28baf9d223028d0e450e06a485bb2b7" + integrity sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA== + dependencies: + "@rollup/pluginutils" "^3.0.6" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" + +"@rollup/plugin-replace@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.1.tgz#16fb0563628f9e6c6ef9e05d48d3608916d466f5" + integrity sha512-qDcXj2VOa5+j0iudjb+LiwZHvBRRgWbHPhRmo1qde2KItTjuxDVQO21rp9/jOlzKR5YO0EsgRQoyox7fnL7y/A== + dependencies: + "@rollup/pluginutils" "^3.0.4" + magic-string "^0.25.5" + +"@rollup/pluginutils@^3.0.0", "@rollup/pluginutils@^3.0.4", "@rollup/pluginutils@^3.0.6": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" + integrity sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw== + dependencies: + estree-walker "^1.0.1" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -3687,6 +3724,11 @@ version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -3857,6 +3899,13 @@ "@types/prop-types" "*" csstype "^2.2.0" +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + "@types/sizzle@2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" @@ -6118,7 +6167,7 @@ builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" -builtin-modules@^3.0.0: +builtin-modules@^3.0.0, builtin-modules@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" @@ -9474,6 +9523,16 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + esutils@^2.0.0, esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -10423,7 +10482,7 @@ fsevents@^1.2.3, fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" -fsevents@^2.1.2, fsevents@~2.1.1: +fsevents@^2.1.2, fsevents@~2.1.1, fsevents@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" @@ -12676,6 +12735,11 @@ is-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -12792,6 +12856,13 @@ is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" +is-reference@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" + integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== + dependencies: + "@types/estree" "0.0.39" + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -15031,6 +15102,13 @@ magic-string@^0.25.1: dependencies: sourcemap-codec "^1.4.4" +magic-string@^0.25.2, magic-string@^0.25.5: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + 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" @@ -16039,6 +16117,29 @@ node-releases@^1.1.47: dependencies: semver "^6.3.0" +node-sass@4: + version "4.13.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" + integrity sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash "^4.17.15" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.13.2" + node-gyp "^3.8.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "^2.2.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + node-sass@^4.12.0: version "4.13.0" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066" @@ -19403,6 +19504,39 @@ roarr@^2.15.2: semver-compare "^1.0.0" sprintf-js "^1.1.2" +rollup-plugin-scss@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-scss/-/rollup-plugin-scss-2.1.0.tgz#7aecb1750d8ab48c9eacd8fbd849ecb7d75e4b27" + integrity sha512-Caj1QU16dw8BYZ/q/4tTgeI42pI3xKHJJDy+LmPSStRMjM7F/0Uh/9gER5JicE2FTaWoz/RMi96xiOuDsd3/eg== + dependencies: + node-sass "4" + rollup-pluginutils "2" + +rollup-plugin-terser@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz#9c0dd33d5771df9630cd027d6a2559187f65885e" + integrity sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g== + dependencies: + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^2.1.2" + terser "^4.6.2" + +rollup-pluginutils@2, rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.2.0.tgz#d82cfd6eda6d9561593a7e8a2fc0b72811a89b49" + integrity sha512-iAu/j9/WJ0i+zT0sAMuQnsEbmOKzdQ4Yxu5rbPs9aUCyqveI1Kw3H4Fi9NWfCOpb8luEySD2lDyFWL9CrLE8iw== + optionalDependencies: + fsevents "~2.1.2" + root-check@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/root-check/-/root-check-1.0.0.tgz#c52a794bf0db9fad567536e41898f0c9e0a86697" @@ -21056,6 +21190,15 @@ terser@^4.1.2: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^4.6.2: + version "4.6.7" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" + integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + test-exclude@^4.2.1: version "4.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20"