diff --git a/package.json b/package.json index 7bbf0cb..600c991 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "start": "yarn storybook", "docs": "build-storybook -c .storybook -o public", "storybook": "start-storybook -p 6006", - "build-storybook": "build-storybook" + "build-storybook": "build-storybook", + "prettify": "prettier --config prettier.config.js --write 'src/**/*.{js,jsx,json,css,scss}'" }, "repository": { "type": "git", @@ -35,7 +36,8 @@ "@babel/core": "^7.9.0", "@babel/preset-env": "^7.9.0", "@babel/runtime-corejs2": "^7.9.0", - "@storybook/addon-actions": "^5.3.17", + "@storybook/addon-actions": "^5.3.18", + "@storybook/addon-centered": "^5.3.18", "@storybook/addon-knobs": "5.3.17", "@storybook/addon-links": "^5.3.17", "@storybook/addon-options": "5.3.17", @@ -44,9 +46,18 @@ "@storybook/react": "^5.3.17", "babel-loader": "^8.1.0", "helix-ui": "^0.19.0", + "husky": "^4.2.5", + "prettier": "^2.0.4", "prop-types": "^15.7.2", "react": "^16.6.3", "react-dom": "^16.6.3" }, - "dependencies": {} + "dependencies": { + "classnames": "^2.2.6" + }, + "husky": { + "hooks": { + "pre-commit": "npm run prettify" + } + } } diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..e78ea94 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,9 @@ +module.exports = { + arrowParens: 'always', + bracketSpacing: true, + printWidth: 100, + tabWidth: 2, + trailingComma: 'es5', + semi: true, + singleQuote: true, +}; \ No newline at end of file diff --git a/src/Button/index.js b/src/Button/index.js index 034bafe..957ad4c 100644 --- a/src/Button/index.js +++ b/src/Button/index.js @@ -2,65 +2,52 @@ import React from 'react'; import PropTypes from 'prop-types'; import Icon from '../Icon'; -function cssFor (modifier) { - return { - 'large': 'hxLg', - 'primary': 'hxPrimary', - 'small': 'hxSm', - 'tertiary': 'hxTertiary', - }[modifier]; +function cssFor(modifier) { + return { + large: 'hxLg', + primary: 'hxPrimary', + small: 'hxSm', + tertiary: 'hxTertiary', + }[modifier]; } -function classNames (props) { - return [ - 'hxBtn', - cssFor(props.variant), - cssFor(props.size), - props.className, - ].join(' ').trim(); +function classNames(props) { + return ['hxBtn', cssFor(props.variant), cssFor(props.size), props.className].join(' ').trim(); } class Button extends React.Component { - render () { - // destructure props for JSX composition - const { - busy, - children, // explicity placed - className, // removed to prevent duplicate prop - headIcon, - size, - tailIcon, - type, - variant, - ...props - } = this.props; + render() { + // destructure props for JSX composition + const { + busy, + children, // explicity placed + className, // removed to prevent duplicate prop + headIcon, + size, + tailIcon, + type, + variant, + ...props + } = this.props; - return ( - - ); - } + return ( + + ); + } } Button.propTypes = { - busy: PropTypes.bool, - disabled: PropTypes.bool, - headIcon: PropTypes.string, - size: PropTypes.string, - tailIcon: PropTypes.string, - type: PropTypes.string, - variant: PropTypes.string, + busy: PropTypes.bool, + disabled: PropTypes.bool, + headIcon: PropTypes.string, + size: PropTypes.string, + tailIcon: PropTypes.string, + type: PropTypes.string, + variant: PropTypes.string, }; export default Button; diff --git a/src/Button/stories.js b/src/Button/stories.js index bb949e6..4eed5fa 100644 --- a/src/Button/stories.js +++ b/src/Button/stories.js @@ -1,64 +1,57 @@ import Button from './'; import { Icons } from '../Icon'; import React from 'react'; +import centered from '@storybook/addon-centered/react'; import { storiesOf } from '@storybook/react'; import { boolean, select, text } from '@storybook/addon-knobs/react'; const SIZES = { - 'small': 'Small', - '': 'Medium', - 'large': 'Large', + small: 'Small', + '': 'Medium', + large: 'Large', }; const VARIANTS = { - 'primary': 'Primary', - '': 'Secondary', - 'tertiary': 'Tertiary', + primary: 'Primary', + '': 'Secondary', + tertiary: 'Tertiary', }; storiesOf('Button', module) -.add('Sizes', () => { + .addDecorator(centered) + .add('Sizes', () => { const size = select('size', SIZES, ''); - return ( - - ); -}) -.add('Variants', () => { + return ; + }) + .add('Variants', () => { const variant = select('variant', VARIANTS, ''); - return ( - - ); -}) -.add('Icon Only', () => { + return ; + }) + .add('Icon Only', () => { const headIcon = select('headIcon', Icons, 'download').trim(); - return ( + ); -}) -.add('Busy', () => { + }) + .add('Busy', () => { const innerText = text('(innerText)', 'Loading'); const busy = boolean('busy', true); - return (); -}) -.add('Disabled', () => { + return ; + }) + .add('Disabled', () => { const innerText = text('(innerText)', 'Loading'); const disabled = boolean('disabled', true); - return () -}) -.add('All Knobs', () => { + return ; + }) + .add('All Knobs', () => { /* ========== KNOBS ========== */ let innerText = text('(innerText)', ''); let busy = boolean('busy', false); @@ -70,26 +63,29 @@ storiesOf('Button', module) let variant = select('variant', VARIANTS, ''); if (innerText.trim() === '') { - innerText = [ - (busy ? 'Busy' : ''), - (disabled ? 'Disabled' : ''), - SIZES[size], - VARIANTS[variant], - 'Button' - ].join(' ').trim(); + innerText = [ + busy ? 'Busy' : '', + disabled ? 'Disabled' : '', + SIZES[size], + VARIANTS[variant], + 'Button', + ] + .join(' ') + .trim(); } /* ========== OUTPUT ========== */ return ( - + ); -}) -; \ No newline at end of file + }); diff --git a/src/Icon/index.js b/src/Icon/index.js index 39c0101..14370e0 100644 --- a/src/Icon/index.js +++ b/src/Icon/index.js @@ -5,24 +5,16 @@ import PropTypes from 'prop-types'; export const Icons = Object.keys(HelixUI.Utils.ICONS); class Icon extends React.Component { - render () { - const { - type, - ...props - } = this.props; + render() { + const { type, ...props } = this.props; - return ( - - ); - } + return ; + } } // additional configs here Icon.propTypes = { - type: PropTypes.string, + type: PropTypes.string, }; export default Icon; diff --git a/src/Icon/stories.js b/src/Icon/stories.js index 7b3af71..5618d2c 100644 --- a/src/Icon/stories.js +++ b/src/Icon/stories.js @@ -1,10 +1,12 @@ import React from 'react'; import Icon, { Icons } from './'; +import centered from '@storybook/addon-centered/react'; import { select } from '@storybook/addon-knobs/react'; import { storiesOf } from '@storybook/react'; storiesOf('Icon', module) -.add('All Knobs', () => { + .addDecorator(centered) + .add('All Knobs', () => { const type = select('type', Icons, 'bell'); - return (); -}); + return ; + }); diff --git a/src/Select/index.js b/src/Select/index.js new file mode 100644 index 0000000..25b007f --- /dev/null +++ b/src/Select/index.js @@ -0,0 +1,43 @@ +import classnames from 'classnames'; +import PropTypes from 'prop-types'; +import React from 'react'; + +const Select = ({ children, disabled, id, label, onChange, optional, required, ...rest }) => { + return ( + + + + {label && ( + + )} + + ); +}; + +Select.propTypes = { + children: PropTypes.node.isRequired, + disabled: PropTypes.bool.isRequired, + id: PropTypes.string.isRequired, + label: PropTypes.string, + onChange: PropTypes.func.isRequired, + optional: PropTypes.bool, + required: PropTypes.bool, +}; + +Select.defaultProps = { + disabled: false, + optional: false, + required: false, +}; + +export default Select; diff --git a/src/Select/stories.js b/src/Select/stories.js new file mode 100644 index 0000000..10caca2 --- /dev/null +++ b/src/Select/stories.js @@ -0,0 +1,50 @@ +import centered from '@storybook/addon-centered/react'; +import { action } from '@storybook/addon-actions'; +import { boolean, text } from '@storybook/addon-knobs'; +import { storiesOf } from '@storybook/react'; +import React from 'react'; + +import Select from '../Select'; + +storiesOf('Select', module) + .addDecorator(centered) + .add('All Knobs', () => { + let disabled = boolean('disabled', false); + let label = text('label', ''); + let optional = boolean('optional', false); + let required = boolean('required', false); + + return ( + + ); + }); + +const Demo = (props) => { + return ( +
+ +
+ ); +}; + +const Options = () => { + return ( + + + + + + + ); +}; diff --git a/src/Tooltip/index.js b/src/Tooltip/index.js new file mode 100644 index 0000000..b8181b5 --- /dev/null +++ b/src/Tooltip/index.js @@ -0,0 +1,24 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import positions from './positions.js'; + +const Tooltip = ({ children, id, position }) => { + return ( + + {children} + + ); +}; + +Tooltip.propTypes = { + children: PropTypes.node.isRequired, + id: PropTypes.string.isRequired, + position: PropTypes.oneOf(positions), +}; + +Tooltip.defaultProps = { + position: 'top-left', +}; + +export default Tooltip; diff --git a/src/Tooltip/positions.js b/src/Tooltip/positions.js new file mode 100644 index 0000000..3ff927e --- /dev/null +++ b/src/Tooltip/positions.js @@ -0,0 +1,16 @@ +const positions = [ + 'top-left', + 'top-center', + 'top-right', + 'right-top', + 'right-middle', + 'right-bottom', + 'bottom-right', + 'bottom-center', + 'bottom-left', + 'left-bottom', + 'left-middle', + 'left-top', +]; + +export default positions; diff --git a/src/Tooltip/stories.js b/src/Tooltip/stories.js new file mode 100644 index 0000000..e05f5ff --- /dev/null +++ b/src/Tooltip/stories.js @@ -0,0 +1,43 @@ +import centered from '@storybook/addon-centered/react'; +import { storiesOf } from '@storybook/react'; +import React, { useState } from 'react'; + +import Select from '../Select'; +import Tooltip from '../Tooltip'; + +const id = 'tooltipDemo'; + +storiesOf('Tooltip', module) + .addDecorator(centered) + .add('All Knobs', () => { + const [position, setPosition] = useState('top-left'); + + const handleChange = ({ target: { value } }) => { + setPosition(value); + }; + + return ( +
+ + + Some Message + +
+ +
+
+ ); + }); diff --git a/yarn.lock b/yarn.lock index b4df36e..0122082 100644 --- a/yarn.lock +++ b/yarn.lock @@ -897,16 +897,17 @@ prop-types "^15.6.1" react-lifecycles-compat "^3.0.4" -"@storybook/addon-actions@^5.3.17": - version "5.3.17" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.17.tgz#ec7ae8fa25ef211c2a3302b6ac1d271a6247f767" - dependencies: - "@storybook/addons" "5.3.17" - "@storybook/api" "5.3.17" - "@storybook/client-api" "5.3.17" - "@storybook/components" "5.3.17" - "@storybook/core-events" "5.3.17" - "@storybook/theming" "5.3.17" +"@storybook/addon-actions@^5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.18.tgz#e3e3b1475cebc9bdd2d563822fba9ac662b2601a" + integrity sha512-jdBVCcfyWin274Lkwg5cL+1fJ651NCuIWxuJVsmHQtIl2xTjf2MyoMoKQZNdt4xtE+W9w+rS4bYt04elrizThg== + dependencies: + "@storybook/addons" "5.3.18" + "@storybook/api" "5.3.18" + "@storybook/client-api" "5.3.18" + "@storybook/components" "5.3.18" + "@storybook/core-events" "5.3.18" + "@storybook/theming" "5.3.18" core-js "^3.0.1" fast-deep-equal "^2.0.1" global "^4.3.2" @@ -916,6 +917,16 @@ react-inspector "^4.0.0" uuid "^3.3.2" +"@storybook/addon-centered@^5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/addon-centered/-/addon-centered-5.3.18.tgz#167df43ff58766d5bb4acf4943de41ebc9581e3f" + integrity sha512-Siav38uJQ7dfZGF+k0TZxijR1qAQ1nln33qpjzpEy2X5rltkn8ZY4cDm8pYyyA0UE3tdAhexEXdQO6L7M9zjtA== + dependencies: + "@storybook/addons" "5.3.18" + core-js "^3.0.1" + global "^4.3.2" + util-deprecate "^1.0.2" + "@storybook/addon-knobs@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.3.17.tgz#5c255a1369bfec898c2a6ea7de904b3eeb7a31d1" @@ -990,6 +1001,19 @@ global "^4.3.2" util-deprecate "^1.0.2" +"@storybook/addons@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.18.tgz#5cbba6407ef7a802041c5ee831473bc3bed61f64" + integrity sha512-ZQjDgTUDFRLvAiBg2d8FgPgghfQ+9uFyXQbtiGlTBLinrPCeQd7J86qiUES0fcGoohCCw0wWKtvB0WF2z1XNDg== + dependencies: + "@storybook/api" "5.3.18" + "@storybook/channels" "5.3.18" + "@storybook/client-logger" "5.3.18" + "@storybook/core-events" "5.3.18" + core-js "^3.0.1" + global "^4.3.2" + util-deprecate "^1.0.2" + "@storybook/api@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.17.tgz#1c0dad3309afef6b0a5585cb59c65824fb4d2721" @@ -1015,6 +1039,32 @@ telejson "^3.2.0" util-deprecate "^1.0.2" +"@storybook/api@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.18.tgz#95582ab90d947065e0e34ed603650a3630dcbd16" + integrity sha512-QXaccNCARHzPWOuxYndiebGWBZmwiUvRgB9ji0XTJBS3y8K0ZPb5QyuqiKPaEWUj8dBA8rzdDtkW3Yt95Namaw== + dependencies: + "@reach/router" "^1.2.1" + "@storybook/channels" "5.3.18" + "@storybook/client-logger" "5.3.18" + "@storybook/core-events" "5.3.18" + "@storybook/csf" "0.0.1" + "@storybook/router" "5.3.18" + "@storybook/theming" "5.3.18" + "@types/reach__router" "^1.2.3" + core-js "^3.0.1" + fast-deep-equal "^2.0.1" + global "^4.3.2" + lodash "^4.17.15" + memoizerific "^1.11.3" + prop-types "^15.6.2" + react "^16.8.3" + semver "^6.0.0" + shallow-equal "^1.1.0" + store2 "^2.7.1" + telejson "^3.2.0" + util-deprecate "^1.0.2" + "@storybook/channel-postmessage@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.17.tgz#807b6316cd0e52d9f27363d5092ad1cd896b694c" @@ -1025,12 +1075,30 @@ global "^4.3.2" telejson "^3.2.0" +"@storybook/channel-postmessage@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.18.tgz#93d46740b5cc9b36ddd073f0715b54c4959953bf" + integrity sha512-awxBW/aVfNtY9QvYZgsPaMXgUpC2+W3vEyQcl/w4ce0YVH+7yWx3wt3Ku49lQwxZwDrxP3QoC0U+mkPc9hBJwA== + dependencies: + "@storybook/channels" "5.3.18" + "@storybook/client-logger" "5.3.18" + core-js "^3.0.1" + global "^4.3.2" + telejson "^3.2.0" + "@storybook/channels@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.17.tgz#74eccb10c2395499da6a290bcd0272d6d6c7c5b2" dependencies: core-js "^3.0.1" +"@storybook/channels@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.18.tgz#490c9eaa8292b0571c0f665052b12addf7c35f21" + integrity sha512-scP/6td/BJSEOgfN+qaYGDf3E793xye7tIw6W+sYqwg+xdMFO39wVXgVZNpQL6sLEwpJZTaPywCjC6p6ksErqQ== + dependencies: + core-js "^3.0.1" + "@storybook/client-api@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.17.tgz#fc1d247caf267ebcc6ddf957fca7e02ae752d99e" @@ -1053,12 +1121,42 @@ ts-dedent "^1.1.0" util-deprecate "^1.0.2" +"@storybook/client-api@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.18.tgz#e71041796f95888de0e4524734418e6b120b060a" + integrity sha512-QiXTDUpjdyW19BlocLw07DrkOnEzVaWGJcRze2nSs29IKKuq1Ncv2LOAZt6ySSq0PmIKsjBou3bmS1/aXmDMdw== + dependencies: + "@storybook/addons" "5.3.18" + "@storybook/channel-postmessage" "5.3.18" + "@storybook/channels" "5.3.18" + "@storybook/client-logger" "5.3.18" + "@storybook/core-events" "5.3.18" + "@storybook/csf" "0.0.1" + "@types/webpack-env" "^1.15.0" + core-js "^3.0.1" + eventemitter3 "^4.0.0" + global "^4.3.2" + is-plain-object "^3.0.0" + lodash "^4.17.15" + memoizerific "^1.11.3" + qs "^6.6.0" + stable "^0.1.8" + ts-dedent "^1.1.0" + util-deprecate "^1.0.2" + "@storybook/client-logger@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.17.tgz#bf9c7ef52da75a5c1f2c5d74724442224deea6e4" dependencies: core-js "^3.0.1" +"@storybook/client-logger@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.18.tgz#27c9d09d788965db0164be6e168bc3f03adbf88f" + integrity sha512-RZjxw4uqZX3Yk27IirbB/pQG+wRsQSSRlKqYa8KQ5bSanm4IrcV9VA1OQbuySW9njE+CexAnakQJ/fENdmurNg== + dependencies: + core-js "^3.0.1" + "@storybook/components@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.17.tgz#287430fc9c5f59b1d3590b50b3c7688355b22639" @@ -1085,12 +1183,46 @@ simplebar-react "^1.0.0-alpha.6" ts-dedent "^1.1.0" +"@storybook/components@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.18.tgz#528f6ab1660981e948993a04b407a6fad7751589" + integrity sha512-LIN4aVCCDY7klOwtuqQhfYz4tHaMADhXEzZpij+3r8N68Inck6IJ1oo9A9umXQPsTioQi8e6FLobH1im90j/2A== + dependencies: + "@storybook/client-logger" "5.3.18" + "@storybook/theming" "5.3.18" + "@types/react-syntax-highlighter" "11.0.4" + "@types/react-textarea-autosize" "^4.3.3" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.15" + markdown-to-jsx "^6.9.1" + memoizerific "^1.11.3" + polished "^3.3.1" + popper.js "^1.14.7" + prop-types "^15.7.2" + react "^16.8.3" + react-dom "^16.8.3" + react-focus-lock "^2.1.0" + react-helmet-async "^1.0.2" + react-popper-tooltip "^2.8.3" + react-syntax-highlighter "^11.0.2" + react-textarea-autosize "^7.1.0" + simplebar-react "^1.0.0-alpha.6" + ts-dedent "^1.1.0" + "@storybook/core-events@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.17.tgz#698ce0a36c29fe8fa04608f56ccca53aa1d31638" dependencies: core-js "^3.0.1" +"@storybook/core-events@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.18.tgz#e5d335f8a2c7dd46502b8f505006f1e111b46d49" + integrity sha512-uQ6NYJ5WODXK8DJ7m8y3yUAtWB3n+6XtYztjY+tdkCsLYvTYDXNS+epV+f5Hu9+gB+/Dm+b5Su4jDD+LZB2QWA== + dependencies: + core-js "^3.0.1" + "@storybook/core@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.17.tgz#abd09dc416f87c7954ef3615bc3f4898c93e2b45" @@ -1226,6 +1358,21 @@ qs "^6.6.0" util-deprecate "^1.0.2" +"@storybook/router@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.3.18.tgz#8ab22f1f2f7f957e78baf992030707a62289076e" + integrity sha512-6B2U2C75KTSVaCuYYgcubeJGcCSnwsXuEf50hEd5mGqWgHZfojCtGvB7Ko4X+0h8rEC+eNA4p7YBOhlUv9WNrQ== + dependencies: + "@reach/router" "^1.2.1" + "@storybook/csf" "0.0.1" + "@types/reach__router" "^1.2.3" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.15" + memoizerific "^1.11.3" + qs "^6.6.0" + util-deprecate "^1.0.2" + "@storybook/theming@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.17.tgz#cf6278c4857229c7167faf04d5b2206bc5ee04e1" @@ -1243,6 +1390,24 @@ resolve-from "^5.0.0" ts-dedent "^1.1.0" +"@storybook/theming@5.3.18": + version "5.3.18" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.18.tgz#35e78de79d9cf8f1248af0dd1c7fa60555761312" + integrity sha512-lfFTeLoYwLMKg96N3gn0umghMdAHgJBGuk2OM8Ll84yWtdl9RGnzfiI1Fl7Cr5k95dCF7drLJlJCao1VxUkFSA== + dependencies: + "@emotion/core" "^10.0.20" + "@emotion/styled" "^10.0.17" + "@storybook/client-logger" "5.3.18" + core-js "^3.0.1" + deep-object-diff "^1.1.0" + emotion-theming "^10.0.19" + global "^4.3.2" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + resolve-from "^5.0.0" + ts-dedent "^1.1.0" + "@storybook/ui@5.3.17": version "5.3.17" resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.17.tgz#2d47617896a2d928fb79dc8a0e709cee9b57cc50" @@ -2440,6 +2605,14 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + character-entities-legacy@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" @@ -2507,6 +2680,11 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -2523,9 +2701,10 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.5: +classnames@^2.2.5, classnames@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== clean-css@^4.2.3: version "4.2.3" @@ -2643,6 +2822,11 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" +compare-versions@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== + component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -3591,6 +3775,13 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-versions@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + flush-write-stream@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" @@ -4049,6 +4240,22 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +husky@^4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.5.tgz#2b4f7622673a71579f901d9885ed448394b5fa36" + integrity sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ== + dependencies: + chalk "^4.0.0" + ci-info "^2.0.0" + compare-versions "^3.6.0" + cosmiconfig "^6.0.0" + find-versions "^3.2.0" + opencollective-postinstall "^2.0.2" + pkg-dir "^4.2.0" + please-upgrade-node "^3.2.0" + slash "^3.0.0" + which-pm-runs "^1.0.0" + iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5357,6 +5564,11 @@ open@^7.0.0: is-docker "^2.0.0" is-wsl "^2.1.1" +opencollective-postinstall@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" + integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -5581,7 +5793,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" dependencies: @@ -5599,6 +5811,13 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + pnp-webpack-plugin@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" @@ -5694,6 +5913,11 @@ prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" +prettier@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.4.tgz#2d1bae173e355996ee355ec9830a7a1ee05457ef" + integrity sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w== + pretty-error@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" @@ -6422,6 +6646,16 @@ select@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +semver-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" + integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" @@ -6592,6 +6826,11 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -7390,6 +7629,11 @@ websocket-extensions@>=0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"