From 40cbcc88848563bdef342d36af5c460cde7458f6 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 12:58:45 +0100 Subject: [PATCH 01/32] delete old components --- src/Container/Container.js | 79 -------------------- src/Container/Container.stories.jsx | 31 -------- src/Container/container.scss | 12 --- src/Container/index.js | 1 - src/Header/Header.js | 28 ------- src/Header/Header.stories.jsx | 10 --- src/Header/header.scss | 5 -- src/Header/index.js | 1 - src/Node/Node.js | 112 ---------------------------- src/Node/Node.stories.jsx | 29 ------- src/Node/index.js | 1 - src/Node/node.scss | 4 - src/Tree/Tree.js | 67 ----------------- src/Tree/Tree.stories.jsx | 85 --------------------- src/Tree/index.js | 1 - src/Tree/tree.scss | 4 - src/assets/add.svg | 1 - src/assets/remove.svg | 1 - src/decorators.js | 11 --- src/index.js | 7 -- src/proptypes.js | 7 -- 21 files changed, 497 deletions(-) delete mode 100644 src/Container/Container.js delete mode 100644 src/Container/Container.stories.jsx delete mode 100644 src/Container/container.scss delete mode 100644 src/Container/index.js delete mode 100644 src/Header/Header.js delete mode 100644 src/Header/Header.stories.jsx delete mode 100644 src/Header/header.scss delete mode 100644 src/Header/index.js delete mode 100644 src/Node/Node.js delete mode 100644 src/Node/Node.stories.jsx delete mode 100644 src/Node/index.js delete mode 100644 src/Node/node.scss delete mode 100644 src/Tree/Tree.js delete mode 100644 src/Tree/Tree.stories.jsx delete mode 100644 src/Tree/index.js delete mode 100644 src/Tree/tree.scss delete mode 100644 src/assets/add.svg delete mode 100644 src/assets/remove.svg delete mode 100644 src/decorators.js delete mode 100644 src/index.js diff --git a/src/Container/Container.js b/src/Container/Container.js deleted file mode 100644 index dd66fa4..0000000 --- a/src/Container/Container.js +++ /dev/null @@ -1,79 +0,0 @@ -import './container.scss'; - -import { PropTypes } from 'prop-types'; -import React from 'react'; - -import { Header } from '../Header'; -import { decoratorsPropType, nodePropType } from '../proptypes'; -import { Toggle } from '../Toggle'; - -const Container = ({ - className, - style, - expanded, - node, - onClick, - iconSize, - headerMarginLeft, - depth, - isSelected, - decorators, -}) => { - const hasChildren = !!node.children && !!node.children.length; - const { Toggle: ToggleDecorator = Toggle, Header: HeaderDecorator = Header } = decorators; - - return ( -
onClick(node)} - > -
- {hasChildren && ( - - )} - -
- ); -}; - -Container.propTypes = { - className: PropTypes.string, - style: PropTypes.object, - expanded: PropTypes.bool, - node: nodePropType, - onClick: PropTypes.func, - depth: PropTypes.number, - iconSize: PropTypes.number, - headerMarginLeft: PropTypes.number, - isSelected: PropTypes.bool, - decorators: decoratorsPropType.isRequired, -}; - -Container.defaultProps = { - className: '', - style: undefined, - expanded: false, - node: { id: '', name: '' }, - onClick: undefined, - depth: 0, - iconSize: 24, - headerMarginLeft: 10, - isSelected: false, - decorators: { - Toggle, - Header, - }, -}; - -export { Container }; diff --git a/src/Container/Container.stories.jsx b/src/Container/Container.stories.jsx deleted file mode 100644 index 061b47a..0000000 --- a/src/Container/Container.stories.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import { storiesOf } from '@storybook/react'; -import React from 'react'; - -import { Container } from './Container'; - -class StatefulContainer extends React.Component { - state = { - expanded: false, - }; - - toggle = () => this.setState(({ expanded }) => ({ expanded: !expanded })); - - render() { - const { expanded } = this.state; - - return ( - - ); - } -} - -storiesOf('Container', module) - .add('default', () => ) - .add('with node prop', () => ( - - )) - .add('stateful example', () => ); diff --git a/src/Container/container.scss b/src/Container/container.scss deleted file mode 100644 index c0da559..0000000 --- a/src/Container/container.scss +++ /dev/null @@ -1,12 +0,0 @@ -.rtv-container { - display: flex; - flex-direction: row; - - cursor: pointer; - - height: 26px; -} - -.rtv-container.selected { - background-color: #e6e6e5; -} diff --git a/src/Container/index.js b/src/Container/index.js deleted file mode 100644 index 8a1103f..0000000 --- a/src/Container/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './Container'; diff --git a/src/Header/Header.js b/src/Header/Header.js deleted file mode 100644 index b8d71fa..0000000 --- a/src/Header/Header.js +++ /dev/null @@ -1,28 +0,0 @@ -import './header.scss'; - -import PropTypes from 'prop-types'; -import React from 'react'; - -import { nodePropType } from '../proptypes'; - -const Header = ({ className, style, node }) => { - return ( -
- {node.name} -
- ); -}; - -Header.propTypes = { - className: PropTypes.string, - style: PropTypes.object, - node: nodePropType, -}; - -Header.defaultProps = { - className: '', - style: undefined, - node: { id: '', name: '' }, -}; - -export { Header }; diff --git a/src/Header/Header.stories.jsx b/src/Header/Header.stories.jsx deleted file mode 100644 index 2d22425..0000000 --- a/src/Header/Header.stories.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import { storiesOf } from '@storybook/react'; -import React from 'react'; - -import { Header } from './Header'; - -storiesOf('Header', module) - .add('default', () =>
) - .add('with node prop', () => ( -
- )); diff --git a/src/Header/header.scss b/src/Header/header.scss deleted file mode 100644 index f23a3a3..0000000 --- a/src/Header/header.scss +++ /dev/null @@ -1,5 +0,0 @@ -.rtv-header { - display: flex; - flex-direction: column; - justify-content: center; -} diff --git a/src/Header/index.js b/src/Header/index.js deleted file mode 100644 index 266dec8..0000000 --- a/src/Header/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './Header'; diff --git a/src/Node/Node.js b/src/Node/Node.js deleted file mode 100644 index 6d55af8..0000000 --- a/src/Node/Node.js +++ /dev/null @@ -1,112 +0,0 @@ -import './node.scss'; - -import { PropTypes } from 'prop-types'; -import React from 'react'; -import { VelocityTransitionGroup } from 'velocity-react'; - -import { Container } from '../Container'; -import { Header } from '../Header'; -import { decoratorsPropType, nodePropType } from '../proptypes'; -import { Toggle } from '../Toggle'; - -const getAnimation = node => ({ - enter: { - animation: 'slideDown', - duration: 300, - }, - leave: { - animation: 'slideUp', - duration: 300, - }, -}); - -const Node = ({ - className, - style, - expandedNodeIds, - node, - onClick, - depth, - iconSize, - headerMarginLeft, - selectedNodeId, - decorators, -}) => { - const isExpanded = expandedNodeIds.includes(node.id); - const hasChildren = !!node.children; - const showChildren = hasChildren && isExpanded; - const { Node: NodeDecorator = Node, Container: ContainerDecorator = Container } = decorators; - - return ( -
- - - {showChildren && ( -
- {node.children.map(child => { - const childProps = { - className, - style, - expandedNodeIds, - node: child, - onClick, - depth: depth + 1, - iconSize, - headerMarginLeft, - selectedNodeId, - decorators, - }; - - return NodeDecorator ? ( - - ) : ( - - ); - })} -
- )} -
-
- ); -}; - -Node.propTypes = { - className: PropTypes.string, - style: PropTypes.object, - node: nodePropType, - onClick: PropTypes.func, - expandedNodeIds: PropTypes.arrayOf(PropTypes.string), - depth: PropTypes.number, - iconSize: PropTypes.number, - headerMarginLeft: PropTypes.number, - selectedNodeId: PropTypes.string, - decorators: decoratorsPropType.isRequired, -}; - -Node.defaultProps = { - className: '', - style: undefined, - node: { id: '', name: '', children: [] }, - onClick: undefined, - expandedNodeIds: [], - depth: 0, - iconSize: 24, - headerMarginLeft: 10, - selectedNodeId: undefined, - decorators: { - Container, - Toggle, - Header, - }, -}; - -export { Node }; diff --git a/src/Node/Node.stories.jsx b/src/Node/Node.stories.jsx deleted file mode 100644 index 9c08361..0000000 --- a/src/Node/Node.stories.jsx +++ /dev/null @@ -1,29 +0,0 @@ -import { storiesOf } from '@storybook/react'; -import React from 'react'; - -import { dummyNode } from '../stories/node'; -import { Node } from './Node'; - -class StatefulNode extends React.Component { - state = { - expandedNodeIds: [], - }; - - toggle = node => - this.setState(({ expandedNodeIds }) => ({ - expandedNodeIds: expandedNodeIds.includes(node.id) - ? expandedNodeIds.filter(id => id !== node.id) - : [...expandedNodeIds, node.id], - })); - - render() { - const { expandedNodeIds } = this.state; - - return ; - } -} - -storiesOf('Node', module) - .add('default', () => ) - .add('with node prop', () => ) - .add('stateful example', () => ); diff --git a/src/Node/index.js b/src/Node/index.js deleted file mode 100644 index 673cbdf..0000000 --- a/src/Node/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './Node'; diff --git a/src/Node/node.scss b/src/Node/node.scss deleted file mode 100644 index fa1145d..0000000 --- a/src/Node/node.scss +++ /dev/null @@ -1,4 +0,0 @@ -.rtv-node { - display: flex; - flex-direction: column; -} diff --git a/src/Tree/Tree.js b/src/Tree/Tree.js deleted file mode 100644 index 25e8a3a..0000000 --- a/src/Tree/Tree.js +++ /dev/null @@ -1,67 +0,0 @@ -import './tree.scss'; - -import PropTypes from 'prop-types'; -import React from 'react'; - -import { defaultDecorators } from '../decorators'; -import { Node } from '../Node'; -import { decoratorsPropType, nodePropType } from '../proptypes'; - -class Tree extends React.Component { - state = { - expandedNodeIds: this.props.defaultExpandRoot - ? [...this.props.roots.map(root => root.id)] - : [], - selectedNodeId: undefined, - }; - - onClick = node => - this.setState(({ expandedNodeIds }) => ({ - expandedNodeIds: expandedNodeIds.includes(node.id) - ? expandedNodeIds.filter(id => id !== node.id) - : [...expandedNodeIds, node.id], - selectedNodeId: node.id, - })); - - render() { - const { className, style, roots, iconSize, headerMarginLeft, decorators } = this.props; - const { Node: NodeDecorator = Node } = decorators; - const { expandedNodeIds, selectedNodeId } = this.state; - - return ( -
- {roots.map(root => ( - - ))} -
- ); - } -} - -Tree.propTypes = { - className: PropTypes.string, - style: PropTypes.object, - node: PropTypes.arrayOf(nodePropType), - defaultExpandRoot: PropTypes.bool, - decorators: decoratorsPropType, -}; - -Tree.defaultProps = { - className: '', - style: undefined, - roots: [], - defaultExpandRoot: false, - decorators: defaultDecorators, -}; - -export { Tree }; diff --git a/src/Tree/Tree.stories.jsx b/src/Tree/Tree.stories.jsx deleted file mode 100644 index 01f132c..0000000 --- a/src/Tree/Tree.stories.jsx +++ /dev/null @@ -1,85 +0,0 @@ -import { storiesOf } from '@storybook/react'; -import React from 'react'; - -import { Container } from '../Container'; -import { dummyNode } from '../stories/node'; -import { Tree } from './Tree'; - -const BorderContainer = props => ( - -); - -const headerId = 'table_header'; -const cellStyle = { - display: 'flex', - flexDirection: 'column', - justifyContent: 'center', - alignItems: 'center', - borderRight: '1px solid', - flex: '1', - padding: '0px 10px', -}; - -const TableContainer = props => { - return ( -
- - -
- ); -}; - -const CustomHeader = ({ node, expanded }) => ( -
-
{node.id === headerId ? 'Node id' : node.id}
-
- {node.id === headerId - ? 'Number of children' - : `${(node.children || []).length} children`} -
-
- {node.id === headerId ? 'Expanded ? ' : expanded ? 'yes' : 'no'} -
-
-); - -storiesOf('Tree', module) - .add('default', () => ) - .add('with roots prop', () => ) - .add('expand root default', () => ) - .add('with borders', () => ( - - )) - .add('like a table', () => ( - - )); diff --git a/src/Tree/index.js b/src/Tree/index.js deleted file mode 100644 index 7cc3d4b..0000000 --- a/src/Tree/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './Tree'; diff --git a/src/Tree/tree.scss b/src/Tree/tree.scss deleted file mode 100644 index ba0c17a..0000000 --- a/src/Tree/tree.scss +++ /dev/null @@ -1,4 +0,0 @@ -.rtv-tree { - display: flex; - flex-direction: column; -} diff --git a/src/assets/add.svg b/src/assets/add.svg deleted file mode 100644 index 9349096..0000000 --- a/src/assets/add.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/remove.svg b/src/assets/remove.svg deleted file mode 100644 index 1419b96..0000000 --- a/src/assets/remove.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/decorators.js b/src/decorators.js deleted file mode 100644 index e5e0083..0000000 --- a/src/decorators.js +++ /dev/null @@ -1,11 +0,0 @@ -import { Container } from './Container'; -import { Header } from './Header'; -import { Node } from './Node'; -import { Toggle } from './Toggle'; - -export const defaultDecorators = { - Node, - Container, - Toggle, - Header, -}; diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 2854dd1..0000000 --- a/src/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import { Container } from './Container'; -import { Header } from './Header'; -import { Node } from './Node'; -import { Tree } from './Tree'; -import { Toggle } from './Toggle'; - -export { Tree as default, Tree, Node, Container, Toggle, Header }; diff --git a/src/proptypes.js b/src/proptypes.js index a0bf33f..7c4abb0 100644 --- a/src/proptypes.js +++ b/src/proptypes.js @@ -5,10 +5,3 @@ export const nodePropType = PropTypes.shape({ name: PropTypes.string.isRequired, children: PropTypes.arrayOf(PropTypes.object), // cant do recursive prop type }); - -export const decoratorsPropType = PropTypes.shape({ - Node: PropTypes.func, - Container: PropTypes.func, - Toggle: PropTypes.func, - Header: PropTypes.func, -}); From 60254ec9ff251b7eadfd585762f2986ad52d7de9 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 13:05:16 +0100 Subject: [PATCH 02/32] create base Toggle --- .eslintrc.json | 3 ++- src/Toggle/Toggle.js | 37 ++++++++++++++++--------------------- src/animations.js | 8 ++++++++ 3 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 src/animations.js diff --git a/.eslintrc.json b/.eslintrc.json index 624fb6e..07a48e0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -24,6 +24,7 @@ "linebreak-style": ["error", "unix"], "quotes": ["error", "single"], "semi": ["error", "always"], - "import/prefer-default-export": 0 + "import/prefer-default-export": 0, + "react/jsx-filename-extension": 0 } } diff --git a/src/Toggle/Toggle.js b/src/Toggle/Toggle.js index 9f17788..9b37763 100644 --- a/src/Toggle/Toggle.js +++ b/src/Toggle/Toggle.js @@ -2,32 +2,30 @@ import PropTypes from 'prop-types'; import React from 'react'; import { VelocityComponent } from 'velocity-react'; +import { animations } from '../animations'; import { Add } from '../icons/Add'; import { Remove } from '../icons/Remove'; -const Toggle = ({ className, style, expanded, getAnimation, getDuration, iconSize }) => { - return ( -
- - {expanded ? : } - -
- ); -}; +const Toggle = ({ className, style, expanded, getAnimation, iconSize }) => ( +
+ + {expanded ? : } + +
+); Toggle.propTypes = { className: PropTypes.string, style: PropTypes.object, expanded: PropTypes.bool, getAnimation: PropTypes.func, - getDuration: PropTypes.func, iconSize: PropTypes.number, }; @@ -35,10 +33,7 @@ Toggle.defaultProps = { className: '', style: undefined, expanded: false, - getAnimation: expanded => ({ - rotateZ: expanded ? 180 : -180, - }), - getDuration: expanded => 200, + getAnimation: animations.toggle, iconSize: 24, }; diff --git a/src/animations.js b/src/animations.js new file mode 100644 index 0000000..957493a --- /dev/null +++ b/src/animations.js @@ -0,0 +1,8 @@ +export const animations = { + toggle: expanded => ({ + animation: { + rotateZ: expanded ? 180 : -180, + }, + duration: 200, + }), +}; From 134788a6be77d6cecfa208b4ee5ad76558203525 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 13:50:48 +0100 Subject: [PATCH 03/32] feat: create Row --- src/Row/Row.js | 89 +++++++++++++++++++++++++++++++++++++++++ src/Row/Row.stories.jsx | 59 +++++++++++++++++++++++++++ src/Row/row.scss | 13 ++++++ src/animations.js | 10 +++++ src/proptypes.js | 8 +++- 5 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 src/Row/Row.js create mode 100644 src/Row/Row.stories.jsx create mode 100644 src/Row/row.scss diff --git a/src/Row/Row.js b/src/Row/Row.js new file mode 100644 index 0000000..a2ed536 --- /dev/null +++ b/src/Row/Row.js @@ -0,0 +1,89 @@ +import './row.scss'; + +import PropTypes from 'prop-types'; +import React from 'react'; +import { VelocityTransitionGroup } from 'velocity-react'; + +import { animations } from '../animations'; +import { defaultNode, nodePropType } from '../proptypes'; + +const Row = ({ node, depth, ...rest }) => { + const { + classes: { root: classNameRoot = '', content: classNameContent = '' }, + styles: { root: styleRoot = undefined, content: styleContent = undefined }, + renderContent, + expandedRowIds, + getAnimation, + onClick, + } = rest; + + const isExpanded = Boolean(expandedRowIds[node.id]); + const hasChildren = Boolean(node.children) && Boolean(node.children.length); + const showChildren = hasChildren && isExpanded; + + return ( +
+ {Boolean(renderContent) && ( +
onClick(node)} + > +
+ {renderContent({ node, depth, ...rest, isExpanded, hasChildren })} +
+ )} + + {showChildren && ( +
+ {node.children.map(child => ( + + ))} +
+ )} +
+
+ ); +}; + +Row.propTypes = { + classes: PropTypes.shape({ + root: PropTypes.string, + content: PropTypes.string, + }), + styles: PropTypes.shape({ + root: PropTypes.object, + content: PropTypes.object, + }), + /** object map where the kays are the ids of the expanded rows. The values just need to be truthy/falsy */ + expandedRowIds: PropTypes.object, + /** @returns {Object} props that will be given to VelocityTransitionGroup */ + getAnimation: PropTypes.func, + iconSize: PropTypes.number, + node: nodePropType, + renderContent: PropTypes.func, + depth: PropTypes.number, +}; + +Row.defaultProps = { + classes: { + root: '', + content: '', + }, + styles: { + root: undefined, + content: undefined, + }, + expandedRowIds: {}, + getAnimation: animations.node, + iconSize: 24, + node: defaultNode, + renderContent: undefined, + depth: 0, +}; + +export { Row }; diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx new file mode 100644 index 0000000..33f7545 --- /dev/null +++ b/src/Row/Row.stories.jsx @@ -0,0 +1,59 @@ +import { storiesOf } from '@storybook/react'; +import React from 'react'; + +import { dummyNode } from '../stories/node'; +import { Toggle } from '../Toggle'; +import { Row } from './Row'; + +class StatefulRow extends React.Component { + state = { + expandedRowIds: {}, + }; + + toggle = node => + this.setState(({ expandedRowIds }) => ({ + expandedRowIds: { + ...expandedRowIds, + [node.id]: !Boolean(expandedRowIds[node.id]), + }, + })); + + render() { + const { expandedRowIds } = this.state; + + return ( + ( + + {hasChildren && } + + {hasChildren && ( +
+ )} +
+ {node.id} +
+ + )} + /> + ); + } +} + +storiesOf('Row', module) + .add('default: !expanded', () => ) + .add('with node', () => ) + .add('stateful example', () => ); diff --git a/src/Row/row.scss b/src/Row/row.scss new file mode 100644 index 0000000..0b8ba5a --- /dev/null +++ b/src/Row/row.scss @@ -0,0 +1,13 @@ +.rtv-row-container { + display: flex; + flex-direction: column; + + .rtv-row-content { + display: flex; + flex-direction: row; + + height: 26px; + + cursor: pointer; + } +} diff --git a/src/animations.js b/src/animations.js index 957493a..2e71cb7 100644 --- a/src/animations.js +++ b/src/animations.js @@ -5,4 +5,14 @@ export const animations = { }, duration: 200, }), + node: (expanded, node) => ({ + enter: { + animation: 'slideDown', + duration: 300, + }, + leave: { + animation: 'slideUp', + duration: 300, + }, + }), }; diff --git a/src/proptypes.js b/src/proptypes.js index 7c4abb0..2001eb5 100644 --- a/src/proptypes.js +++ b/src/proptypes.js @@ -2,6 +2,12 @@ import { PropTypes } from 'prop-types'; export const nodePropType = PropTypes.shape({ id: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, + name: PropTypes.string, children: PropTypes.arrayOf(PropTypes.object), // cant do recursive prop type }); + +export const defaultNode = { + id: '', + name: undefined, + children: [], +}; From 6be8653b5141e70219bc7eedd0436ac116bbebf0 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 14:07:25 +0100 Subject: [PATCH 04/32] stories: create WithExpandedRowIdsState --- src/Row/Row.js | 2 +- src/Row/Row.stories.jsx | 76 ++++++++++---------------- src/stories/WithExpandedRowIdsState.js | 23 ++++++++ 3 files changed, 53 insertions(+), 48 deletions(-) create mode 100644 src/stories/WithExpandedRowIdsState.js diff --git a/src/Row/Row.js b/src/Row/Row.js index a2ed536..ab9ba00 100644 --- a/src/Row/Row.js +++ b/src/Row/Row.js @@ -31,7 +31,7 @@ const Row = ({ node, depth, ...rest }) => { >
{renderContent({ node, depth, ...rest, isExpanded, hasChildren })} diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index 33f7545..18f48d0 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -4,56 +4,38 @@ import React from 'react'; import { dummyNode } from '../stories/node'; import { Toggle } from '../Toggle'; import { Row } from './Row'; +import { WithExpandedRowIdsState } from '../stories/WithExpandedRowIdsState'; -class StatefulRow extends React.Component { - state = { - expandedRowIds: {}, - }; - - toggle = node => - this.setState(({ expandedRowIds }) => ({ - expandedRowIds: { - ...expandedRowIds, - [node.id]: !Boolean(expandedRowIds[node.id]), - }, - })); - - render() { - const { expandedRowIds } = this.state; - - return ( - ( - - {hasChildren && } +storiesOf('Row', module) + .add('default: !expanded', () => ) + .add('with node', () => ) + .add('with renderContent', () => ( +
{node.id}
} /> + )) + .add('stateful example', () => ( + + {(expandedRowIds, toggle) => ( + ( + + {hasChildren && } - {hasChildren && (
- )} -
- {node.id} -
- - )} - /> - ); - } -} - -storiesOf('Row', module) - .add('default: !expanded', () => ) - .add('with node', () => ) - .add('stateful example', () => ); + > + {node.id} +
+
+ )} + /> + )} +
+ )); diff --git a/src/stories/WithExpandedRowIdsState.js b/src/stories/WithExpandedRowIdsState.js new file mode 100644 index 0000000..1e5be26 --- /dev/null +++ b/src/stories/WithExpandedRowIdsState.js @@ -0,0 +1,23 @@ +import React from 'react'; + +class WithExpandedRowIdsState extends React.Component { + state = { + expandedRowIds: {}, + }; + + toggle = node => + this.setState(({ expandedRowIds }) => ({ + expandedRowIds: { + ...expandedRowIds, + [node.id]: !Boolean(expandedRowIds[node.id]), + }, + })); + + render() { + const { expandedRowIds } = this.state; + + return this.props.children(expandedRowIds, this.toggle); + } +} + +export { WithExpandedRowIdsState }; From b1559535f47bc47d8964ac30f6d1e20945a29122 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 14:39:14 +0100 Subject: [PATCH 05/32] fix(Row): wrong style props --- src/Row/Row.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Row/Row.js b/src/Row/Row.js index ab9ba00..f66b2fc 100644 --- a/src/Row/Row.js +++ b/src/Row/Row.js @@ -22,11 +22,11 @@ const Row = ({ node, depth, ...rest }) => { const showChildren = hasChildren && isExpanded; return ( -
+
{Boolean(renderContent) && (
onClick(node)} >
Date: Sun, 25 Nov 2018 14:43:53 +0100 Subject: [PATCH 06/32] refactor(Row): add noIndent prop --- src/Row/Row.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Row/Row.js b/src/Row/Row.js index f66b2fc..96e9dde 100644 --- a/src/Row/Row.js +++ b/src/Row/Row.js @@ -15,11 +15,13 @@ const Row = ({ node, depth, ...rest }) => { expandedRowIds, getAnimation, onClick, + noIndent, } = rest; const isExpanded = Boolean(expandedRowIds[node.id]); const hasChildren = Boolean(node.children) && Boolean(node.children.length); const showChildren = hasChildren && isExpanded; + const indentLeft = depth * 24; return (
@@ -29,12 +31,14 @@ const Row = ({ node, depth, ...rest }) => { style={styleContent} onClick={() => onClick(node)} > -
- {renderContent({ node, depth, ...rest, isExpanded, hasChildren })} + {!noIndent && ( +
+ )} + {renderContent({ node, depth, ...rest, isExpanded, hasChildren, indentLeft })}
)} @@ -67,6 +71,7 @@ Row.propTypes = { node: nodePropType, renderContent: PropTypes.func, depth: PropTypes.number, + noIndent: PropTypes.bool, }; Row.defaultProps = { @@ -84,6 +89,7 @@ Row.defaultProps = { node: defaultNode, renderContent: undefined, depth: 0, + noIndent: false, }; export { Row }; From bda26668c97c375f82c6aea0df488db03dbf7c39 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 14:44:05 +0100 Subject: [PATCH 07/32] stories(Row): add table example --- src/Row/Row.stories.jsx | 47 +++++++++++++++++++++++++++++++++++++++++ src/Row/rowStories.scss | 17 +++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 src/Row/rowStories.scss diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index 18f48d0..0d8fdea 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -1,3 +1,5 @@ +import './rowStories.scss'; + import { storiesOf } from '@storybook/react'; import React from 'react'; @@ -6,7 +8,14 @@ import { Toggle } from '../Toggle'; import { Row } from './Row'; import { WithExpandedRowIdsState } from '../stories/WithExpandedRowIdsState'; +const Cell = ({ style, children }) => ( +
+ {children} +
+); + storiesOf('Row', module) + .addDecorator(storyFn =>
{storyFn()}
) .add('default: !expanded', () => ) .add('with node', () => ) .add('with renderContent', () => ( @@ -38,4 +47,42 @@ storiesOf('Row', module) /> )} + )) + .add('table example', () => ( + + {(expandedRowIds, toggle) => ( + ( + + + {hasChildren && ( + + )} + +
+ {node.id} +
+
+ {node.name} +
+ )} + /> + )} +
)); diff --git a/src/Row/rowStories.scss b/src/Row/rowStories.scss new file mode 100644 index 0000000..eef5e71 --- /dev/null +++ b/src/Row/rowStories.scss @@ -0,0 +1,17 @@ +.story { + .rtv-row-content.story-row-table-content { + border-bottom: 1px solid; + + height: auto; + + .story-row-table-content-cell { + display: flex; + align-items: center; + position: relative; + box-sizing: border-box; + min-height: 40px; + + width: 200px; + } + } +} From 2073ea7af58146b5e3aa88344c5b2fb62882176f Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 14:56:28 +0100 Subject: [PATCH 08/32] stories(Row): add header --- src/Row/Row.stories.jsx | 72 ++++++++++++++++++++++------------------- src/Row/rowStories.scss | 29 +++++++++++++---- 2 files changed, 61 insertions(+), 40 deletions(-) diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index 0d8fdea..dc9139e 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -49,40 +49,46 @@ storiesOf('Row', module) )) .add('table example', () => ( - - {(expandedRowIds, toggle) => ( - ( - - - {hasChildren && ( - - )} - -
+
+ Id + Name +
+ + {(expandedRowIds, toggle) => ( + ( + + - {node.id} -
-
- {node.name} -
- )} - /> - )} -
+ {hasChildren && ( + + )} + +
+ {node.id} +
+ + {node.name} + + )} + /> + )} + +
)); diff --git a/src/Row/rowStories.scss b/src/Row/rowStories.scss index eef5e71..8daea5d 100644 --- a/src/Row/rowStories.scss +++ b/src/Row/rowStories.scss @@ -1,17 +1,32 @@ +%cell { + display: flex; + align-items: center; + position: relative; + box-sizing: border-box; + min-height: 40px; + + width: 200px; +} + .story { + .story-table-header { + border-bottom: 1px solid; + display: flex; + flex-direction: row; + + .story-row-table-content-cell { + @extend %cell; + justify-content: center; + } + } + .rtv-row-content.story-row-table-content { border-bottom: 1px solid; height: auto; .story-row-table-content-cell { - display: flex; - align-items: center; - position: relative; - box-sizing: border-box; - min-height: 40px; - - width: 200px; + @extend %cell; } } } From ecd2992cbd539bd579933af9c8304e5576bc871f Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:05:00 +0100 Subject: [PATCH 09/32] feat: create Cell & Header --- src/Cell/Cell.js | 24 ++++++++++++++++++++++++ src/Cell/cell.scss | 9 +++++++++ src/Cell/index.js | 1 + src/Header/Header.js | 24 ++++++++++++++++++++++++ src/Header/header.scss | 8 ++++++++ src/Header/index.js | 1 + src/Row/Row.stories.jsx | 18 +++++++----------- src/Row/row.scss | 2 -- src/Row/rowStories.scss | 25 +++---------------------- 9 files changed, 77 insertions(+), 35 deletions(-) create mode 100644 src/Cell/Cell.js create mode 100644 src/Cell/cell.scss create mode 100644 src/Cell/index.js create mode 100644 src/Header/Header.js create mode 100644 src/Header/header.scss create mode 100644 src/Header/index.js diff --git a/src/Cell/Cell.js b/src/Cell/Cell.js new file mode 100644 index 0000000..cbcc299 --- /dev/null +++ b/src/Cell/Cell.js @@ -0,0 +1,24 @@ +import './cell.scss'; + +import PropTypes from 'prop-types'; +import React from 'react'; + +const Cell = ({ className, style, children }) => ( +
+ {children} +
+); + +Cell.propTypes = { + className: PropTypes.string, + style: PropTypes.object, + children: PropTypes.node, +}; + +Cell.defaultProps = { + className: '', + style: undefined, + children: null, +}; + +export { Cell }; diff --git a/src/Cell/cell.scss b/src/Cell/cell.scss new file mode 100644 index 0000000..de42a47 --- /dev/null +++ b/src/Cell/cell.scss @@ -0,0 +1,9 @@ +.rtv-cell { + display: flex; + align-items: center; + position: relative; + box-sizing: border-box; + min-height: 40px; + + width: 200px; +} diff --git a/src/Cell/index.js b/src/Cell/index.js new file mode 100644 index 0000000..2440976 --- /dev/null +++ b/src/Cell/index.js @@ -0,0 +1 @@ +export * from './Cell'; diff --git a/src/Header/Header.js b/src/Header/Header.js new file mode 100644 index 0000000..47d67fd --- /dev/null +++ b/src/Header/Header.js @@ -0,0 +1,24 @@ +import './header.scss'; + +import PropTypes from 'prop-types'; +import React from 'react'; + +const Header = ({ className, style, children }) => ( +
+ {children} +
+); + +Header.propTypes = { + className: PropTypes.string, + style: PropTypes.object, + children: PropTypes.node, +}; + +Header.defaultProps = { + className: '', + style: undefined, + children: null, +}; + +export { Header }; diff --git a/src/Header/header.scss b/src/Header/header.scss new file mode 100644 index 0000000..c6eff06 --- /dev/null +++ b/src/Header/header.scss @@ -0,0 +1,8 @@ +.rtv-header { + display: flex; + flex-direction: row; +} + +.rtv-header.table { + border-bottom: 1px solid; +} diff --git a/src/Header/index.js b/src/Header/index.js new file mode 100644 index 0000000..266dec8 --- /dev/null +++ b/src/Header/index.js @@ -0,0 +1 @@ +export * from './Header'; diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index dc9139e..4dedc5c 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -3,16 +3,12 @@ import './rowStories.scss'; import { storiesOf } from '@storybook/react'; import React from 'react'; +import { Cell } from '../Cell'; +import { Header } from '../Header'; import { dummyNode } from '../stories/node'; +import { WithExpandedRowIdsState } from '../stories/WithExpandedRowIdsState'; import { Toggle } from '../Toggle'; import { Row } from './Row'; -import { WithExpandedRowIdsState } from '../stories/WithExpandedRowIdsState'; - -const Cell = ({ style, children }) => ( -
- {children} -
-); storiesOf('Row', module) .addDecorator(storyFn =>
{storyFn()}
) @@ -50,10 +46,10 @@ storiesOf('Row', module) )) .add('table example', () => (
-
- Id - Name -
+
+ Id + Name +
{(expandedRowIds, toggle) => ( Date: Sun, 25 Nov 2018 15:09:05 +0100 Subject: [PATCH 10/32] stories(ROw): use Cell --- src/Row/Row.stories.jsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index 4dedc5c..29399b3 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -24,10 +24,14 @@ storiesOf('Row', module) onClick={toggle} node={dummyNode} expandedRowIds={expandedRowIds} + styles={{ + content: { + height: '30px', + }, + }} renderContent={({ node, hasChildren }) => ( - + {hasChildren && } -
{node.id}
-
+ )} /> )} From 7ab357d538207e4fc155769864559dc5aae54ba9 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:11:08 +0100 Subject: [PATCH 11/32] stories(Row): remove useless styles --- src/Row/Row.stories.jsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index 29399b3..f6ca4b1 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -34,9 +34,6 @@ storiesOf('Row', module) {hasChildren && }
@@ -75,9 +72,6 @@ storiesOf('Row', module)
From f5a02854bd8d73481b8ca18b559325be21d95e82 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:15:55 +0100 Subject: [PATCH 12/32] feat: create Table --- src/Header/header.scss | 4 -- src/Row/index.js | 1 + src/Tree/Tree.js | 24 +++++++++++ src/Tree/Tree.stories.jsx | 89 +++++++++++++++++++++++++++++++++++++++ src/Tree/index.js | 1 + src/Tree/tree.scss | 4 ++ src/Tree/treeStories.scss | 13 ++++++ 7 files changed, 132 insertions(+), 4 deletions(-) create mode 100644 src/Row/index.js create mode 100644 src/Tree/Tree.js create mode 100644 src/Tree/Tree.stories.jsx create mode 100644 src/Tree/index.js create mode 100644 src/Tree/tree.scss create mode 100644 src/Tree/treeStories.scss diff --git a/src/Header/header.scss b/src/Header/header.scss index c6eff06..8624940 100644 --- a/src/Header/header.scss +++ b/src/Header/header.scss @@ -2,7 +2,3 @@ display: flex; flex-direction: row; } - -.rtv-header.table { - border-bottom: 1px solid; -} diff --git a/src/Row/index.js b/src/Row/index.js new file mode 100644 index 0000000..7a86ee8 --- /dev/null +++ b/src/Row/index.js @@ -0,0 +1 @@ +export * from './Row'; diff --git a/src/Tree/Tree.js b/src/Tree/Tree.js new file mode 100644 index 0000000..d212d3f --- /dev/null +++ b/src/Tree/Tree.js @@ -0,0 +1,24 @@ +import './tree.scss'; + +import PropTypes from 'prop-types'; +import React from 'react'; + +const Tree = ({ className, style, children }) => ( +
+ {children} +
+); + +Tree.propTypes = { + className: PropTypes.string, + style: PropTypes.object, + children: PropTypes.node, +}; + +Tree.defaultProps = { + className: '', + style: undefined, + children: null, +}; + +export { Tree }; diff --git a/src/Tree/Tree.stories.jsx b/src/Tree/Tree.stories.jsx new file mode 100644 index 0000000..7669fed --- /dev/null +++ b/src/Tree/Tree.stories.jsx @@ -0,0 +1,89 @@ +import './treeStories.scss'; + +import { storiesOf } from '@storybook/react'; +import React from 'react'; + +import { Cell } from '../Cell'; +import { Header } from '../Header'; +import { dummyNode } from '../stories/node'; +import { WithExpandedRowIdsState } from '../stories/WithExpandedRowIdsState'; +import { Toggle } from '../Toggle'; +import { Row } from '../Row'; +import { Tree } from './Tree'; + +storiesOf('Tree', module) + .addDecorator(storyFn =>
{storyFn()}
) + .add('default', () => ) + .add('stateful example', () => ( + + + {(expandedRowIds, toggle) => ( + ( + + {hasChildren && ( + + )} +
+ {node.id} +
+
+ )} + /> + )} +
+
+ )) + .add('table example', () => ( + +
+ Id + Name +
+ + {(expandedRowIds, toggle) => ( + ( + + + {hasChildren && ( + + )} + +
+ {node.id} +
+
+ {node.name} +
+ )} + /> + )} +
+
+ )); diff --git a/src/Tree/index.js b/src/Tree/index.js new file mode 100644 index 0000000..7cc3d4b --- /dev/null +++ b/src/Tree/index.js @@ -0,0 +1 @@ +export * from './Tree'; diff --git a/src/Tree/tree.scss b/src/Tree/tree.scss new file mode 100644 index 0000000..ba0c17a --- /dev/null +++ b/src/Tree/tree.scss @@ -0,0 +1,4 @@ +.rtv-tree { + display: flex; + flex-direction: column; +} diff --git a/src/Tree/treeStories.scss b/src/Tree/treeStories.scss new file mode 100644 index 0000000..b92e8f6 --- /dev/null +++ b/src/Tree/treeStories.scss @@ -0,0 +1,13 @@ +.story { + .story-header { + border-bottom: 1px solid; + + .story-header-cell { + justify-content: center; + } + } + + .story-row-table-content { + border-bottom: 1px solid; + } +} From 47dea4c883465e2ad0167fd0090508005b034ebf Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:19:28 +0100 Subject: [PATCH 13/32] stories(Tree): create example with multiple roots --- src/Tree/Tree.stories.jsx | 80 ++++++++++++++++++++++++++++----------- 1 file changed, 58 insertions(+), 22 deletions(-) diff --git a/src/Tree/Tree.stories.jsx b/src/Tree/Tree.stories.jsx index 7669fed..518d016 100644 --- a/src/Tree/Tree.stories.jsx +++ b/src/Tree/Tree.stories.jsx @@ -11,6 +11,27 @@ import { Toggle } from '../Toggle'; import { Row } from '../Row'; import { Tree } from './Tree'; +const TableRowContent = ({ node, hasChildren, indentLeft, expandedRowIds }) => ( + + + {hasChildren && } + +
+ {node.id} +
+
+ {node.name} +
+); + storiesOf('Tree', module) .addDecorator(storyFn =>
{storyFn()}
) .add('default', () => ) @@ -60,28 +81,43 @@ storiesOf('Tree', module) expandedRowIds={expandedRowIds} classes={{ content: 'story-row-table-content' }} noIndent - renderContent={({ node, hasChildren, indentLeft }) => ( - - - {hasChildren && ( - - )} - -
- {node.id} -
-
- {node.name} -
- )} + renderContent={TableRowContent} + /> + )} + +
+ )) + .add('multiple table example', () => ( + +
+ Id + Name +
+ + {(expandedRowIds, toggle) => ( + + )} + +
+ Id + Name +
+ + {(expandedRowIds, toggle) => ( + )} From 24a0fffce695844d76f6193cad5ebb291c717525 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:25:28 +0100 Subject: [PATCH 14/32] core: export components --- src/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/index.js diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..bd85497 --- /dev/null +++ b/src/index.js @@ -0,0 +1,12 @@ +import { Tree } from './Tree'; + +export * from './Cell'; +export * from './Header'; +export * from './icons/Add'; +export * from './icons/Remove'; +export * from './Toggle'; +export * from './Tree'; +export * from './animations'; +export * from './proptypes'; + +export default Tree; From 93ea7cc175f416d05924f79c1e101a4ad8736ec0 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:30:05 +0100 Subject: [PATCH 15/32] stories: add withInfo decorator --- .storybook/config.js | 5 +++- package.json | 1 + yarn.lock | 65 +++++++++++++++++++++++++++++++++++++++----- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/.storybook/config.js b/.storybook/config.js index b102588..7e9c195 100644 --- a/.storybook/config.js +++ b/.storybook/config.js @@ -1,4 +1,7 @@ -import { configure } from '@storybook/react'; +import { withInfo } from '@storybook/addon-info'; +import { configure, addDecorator } from '@storybook/react'; + +addDecorator(withInfo); // automatically import all files ending in *.stories.js const req = require.context('../src', true, /.stories.(js|jsx)$/); diff --git a/package.json b/package.json index 9b4635c..3f31bdd 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "devDependencies": { "@babel/core": "^7.1.6", "@storybook/addon-actions": "^4.0.8", + "@storybook/addon-info": "^4.0.8", "@storybook/addon-links": "^4.0.8", "@storybook/addons": "^4.0.8", "@storybook/react": "^4.0.8", diff --git a/yarn.lock b/yarn.lock index 870403f..95e2f56 100644 --- a/yarn.lock +++ b/yarn.lock @@ -846,6 +846,24 @@ react-inspector "^2.3.0" uuid "^3.3.2" +"@storybook/addon-info@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@storybook/addon-info/-/addon-info-4.0.8.tgz#463105d7bb47c2074505330fe72c07537ab20d2a" + integrity sha512-8JBaxXougDLk916syq+03xoii8S6nsaKkDQ8Tw++L9nPhpKatHXuSJod1FzEE4rznbuQv5GmVv4PABUzEa+4pQ== + dependencies: + "@emotion/styled" "^0.10.6" + "@storybook/addons" "4.0.8" + "@storybook/client-logger" "4.0.8" + "@storybook/components" "4.0.8" + core-js "2.5.7" + global "^4.3.2" + marksy "^6.1.0" + nested-object-assign "^1.0.1" + prop-types "^15.6.2" + react-addons-create-fragment "^15.5.3" + react-lifecycles-compat "^3.0.4" + util-deprecate "^1.0.2" + "@storybook/addon-links@^4.0.8": version "4.0.8" resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-4.0.8.tgz#a1fc616417c7427754714bce4e1cf5e80431597e" @@ -2921,6 +2939,11 @@ babel-runtime@6.26.0, babel-runtime@6.x.x, babel-runtime@^6.0.0, babel-runtime@^ core-js "^2.4.0" regenerator-runtime "^0.11.0" +babel-standalone@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-standalone/-/babel-standalone-6.26.0.tgz#15fb3d35f2c456695815ebf1ed96fe7f015b6886" + integrity sha1-Ffs9NfLEVmlYFevx7Zb+fwFbaIY= + babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.3.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" @@ -3901,16 +3924,16 @@ copy-webpack-plugin@4.5.2: p-limit "^1.0.0" serialize-javascript "^1.4.0" +core-js@2.5.7, core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= -core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -5259,7 +5282,7 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" -fbjs@^0.8.9: +fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -6049,7 +6072,7 @@ he@1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= -he@1.2.x: +he@1.2.x, he@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -7503,6 +7526,20 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +marked@^0.3.12: + version "0.3.19" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" + integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== + +marksy@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/marksy/-/marksy-6.1.0.tgz#36482148a1115cc78570855f7ebd744bb453d5cc" + integrity sha512-xVAuJQxwdAljvFVqlY7CIRewn5YHGvCqeJkY1bbcTBfZV4dNDSZpHWTREb1MNu/oXYzKgg5pmTfE1DIW6M1zrA== + dependencies: + babel-standalone "^6.26.0" + he "^1.1.1" + marked "^0.3.12" + math-random@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" @@ -7891,6 +7928,11 @@ neo-async@^2.5.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== +nested-object-assign@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/nested-object-assign/-/nested-object-assign-1.0.3.tgz#5aca69390d9affe5a612152b5f0843ae399ac597" + integrity sha512-kgq1CuvLyUcbcIuTiCA93cQ2IJFSlRwXcN+hLcb2qLJwC2qrePHGZZa7IipyWqaWF6tQjdax2pQnVxdq19Zzwg== + netmask@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" @@ -9248,6 +9290,15 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-addons-create-fragment@^15.5.3: + version "15.6.2" + resolved "https://registry.yarnpkg.com/react-addons-create-fragment/-/react-addons-create-fragment-15.6.2.tgz#a394de7c2c7becd6b5475ba1b97ac472ce7c74f8" + integrity sha1-o5TefCx77Na1R1uhuXrEcs58dPg= + dependencies: + fbjs "^0.8.4" + loose-envify "^1.3.1" + object-assign "^4.1.0" + react-deep-force-update@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" From 2f82c236eb7e898e80805614385c55b916147b5a Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:35:05 +0100 Subject: [PATCH 16/32] docs: document Row props --- src/Row/Row.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Row/Row.js b/src/Row/Row.js index 96e9dde..9dd62ea 100644 --- a/src/Row/Row.js +++ b/src/Row/Row.js @@ -55,10 +55,12 @@ const Row = ({ node, depth, ...rest }) => { }; Row.propTypes = { + /** CSS classes for the 'root' div and the 'content' div that wraps `renderContent` */ classes: PropTypes.shape({ root: PropTypes.string, content: PropTypes.string, }), + /** Inline styles for convenience */ styles: PropTypes.shape({ root: PropTypes.object, content: PropTypes.object, @@ -67,10 +69,21 @@ Row.propTypes = { expandedRowIds: PropTypes.object, /** @returns {Object} props that will be given to VelocityTransitionGroup */ getAnimation: PropTypes.func, + /** Size of the Toggle icon */ iconSize: PropTypes.number, node: nodePropType, + /** + * Renders the content of this row (except child nodes) + * Receives all the props of the component plus `isExpanded`, `hasChildren` and `indentLeft` + */ renderContent: PropTypes.func, + /** The current depth of this row, used to calculate indentLeft given to `renderContent` */ depth: PropTypes.number, + /** + * Do not apply paddingLeft according to depth. + * You may want to apply paddingLeft in renderContent depending on how you + * need to implement margins and padding + * */ noIndent: PropTypes.bool, }; From 695c396b5e0b0b03aca44b4248ff51b1411feccd Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:39:28 +0100 Subject: [PATCH 17/32] feat(Row): add renderChildren override function --- src/Row/Row.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/Row/Row.js b/src/Row/Row.js index 9dd62ea..022ba6a 100644 --- a/src/Row/Row.js +++ b/src/Row/Row.js @@ -16,6 +16,7 @@ const Row = ({ node, depth, ...rest }) => { getAnimation, onClick, noIndent, + renderChildren: customRenderChildren, } = rest; const isExpanded = Boolean(expandedRowIds[node.id]); @@ -41,15 +42,19 @@ const Row = ({ node, depth, ...rest }) => { {renderContent({ node, depth, ...rest, isExpanded, hasChildren, indentLeft })}
)} - - {showChildren && ( -
- {node.children.map(child => ( - - ))} -
- )} -
+ {customRenderChildren && + customRenderChildren({ node, depth, ...rest, isExpanded, hasChildren, indentLeft })} + {!customRenderChildren && ( + + {showChildren && ( +
+ {node.children.map(child => ( + + ))} +
+ )} +
+ )}
); }; @@ -77,6 +82,12 @@ Row.propTypes = { * Receives all the props of the component plus `isExpanded`, `hasChildren` and `indentLeft` */ renderContent: PropTypes.func, + /** + * Renders the div (VelocityTransitionGroup) containing the child nodes + * Receives the same props as `renderContent` + * Use this to replace the recursive mapping, or the transitions + */ + renderChildren: PropTypes.func, /** The current depth of this row, used to calculate indentLeft given to `renderContent` */ depth: PropTypes.number, /** @@ -101,6 +112,7 @@ Row.defaultProps = { iconSize: 24, node: defaultNode, renderContent: undefined, + renderChildren: undefined, depth: 0, noIndent: false, }; From d825e2dd23fe8c1c4b11551b228c4d4958a49771 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:41:11 +0100 Subject: [PATCH 18/32] stories(Tree): cleanup render prop --- src/Tree/Tree.stories.jsx | 50 +++++++++++---------------------------- 1 file changed, 14 insertions(+), 36 deletions(-) diff --git a/src/Tree/Tree.stories.jsx b/src/Tree/Tree.stories.jsx index 518d016..2eac274 100644 --- a/src/Tree/Tree.stories.jsx +++ b/src/Tree/Tree.stories.jsx @@ -32,6 +32,17 @@ const TableRowContent = ({ node, hasChildren, indentLeft, expandedRowIds }) => ( ); +const TableRow = (expandedRowIds, toggle) => ( + +); + storiesOf('Tree', module) .addDecorator(storyFn =>
{storyFn()}
) .add('default', () => ) @@ -73,18 +84,7 @@ storiesOf('Tree', module) Id Name
- - {(expandedRowIds, toggle) => ( - - )} - + {TableRow} )) .add('multiple table example', () => ( @@ -93,33 +93,11 @@ storiesOf('Tree', module) Id Name
- - {(expandedRowIds, toggle) => ( - - )} - + {TableRow}
Id Name
- - {(expandedRowIds, toggle) => ( - - )} - + {TableRow} )); From 98352837fbabce2ad198c76b41d30422aafe9862 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:45:55 +0100 Subject: [PATCH 19/32] refactor(WithExpandedRowIdsState): change render prop so it show in storybook --- src/Row/Row.stories.jsx | 12 ++++++------ src/Tree/Tree.stories.jsx | 12 ++++++------ src/stories/WithExpandedRowIdsState.js | 13 ++++++++++++- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index f6ca4b1..bbeaf84 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -18,8 +18,8 @@ storiesOf('Row', module)
{node.id}
} /> )) .add('stateful example', () => ( - - {(expandedRowIds, toggle) => ( + ( )} - + /> )) .add('table example', () => (
@@ -51,8 +51,8 @@ storiesOf('Row', module) Id Name - - {(expandedRowIds, toggle) => ( + ( )} - + />
)); diff --git a/src/Tree/Tree.stories.jsx b/src/Tree/Tree.stories.jsx index 2eac274..305fdfd 100644 --- a/src/Tree/Tree.stories.jsx +++ b/src/Tree/Tree.stories.jsx @@ -48,8 +48,8 @@ storiesOf('Tree', module) .add('default', () => ) .add('stateful example', () => ( - - {(expandedRowIds, toggle) => ( + ( )} - + /> )) .add('table example', () => ( @@ -84,7 +84,7 @@ storiesOf('Tree', module) Id Name - {TableRow} + )) .add('multiple table example', () => ( @@ -93,11 +93,11 @@ storiesOf('Tree', module) Id Name - {TableRow} +
Id Name
- {TableRow} + )); diff --git a/src/stories/WithExpandedRowIdsState.js b/src/stories/WithExpandedRowIdsState.js index 1e5be26..a0f182f 100644 --- a/src/stories/WithExpandedRowIdsState.js +++ b/src/stories/WithExpandedRowIdsState.js @@ -1,3 +1,4 @@ +import PropTypes from 'prop-types'; import React from 'react'; class WithExpandedRowIdsState extends React.Component { @@ -16,8 +17,18 @@ class WithExpandedRowIdsState extends React.Component { render() { const { expandedRowIds } = this.state; - return this.props.children(expandedRowIds, this.toggle); + return this.props.renderChildren(expandedRowIds, this.toggle); } } +WithExpandedRowIdsState.propTypes = { + /** + * This function will be called with params `expandedRowIds`, `toggle` + * - expandedRowIds: object map of node ids. The ids are truthy if they are expanded + * - toggle: function that receives the clicked node as parameter and will handle togging + * the expansion of that node + */ + renderChildren: PropTypes.func, +}; + export { WithExpandedRowIdsState }; From 464042224c9068e965ea68f575153b4399c6cc0c Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:54:16 +0100 Subject: [PATCH 20/32] stories: add storysource addon --- .storybook/addons.js | 1 + .storybook/webpack.config.js | 5 + package.json | 5 +- yarn.lock | 192 ++++++++++++++++++++++++++++++++++- 4 files changed, 200 insertions(+), 3 deletions(-) diff --git a/.storybook/addons.js b/.storybook/addons.js index 6aed412..7fa6052 100644 --- a/.storybook/addons.js +++ b/.storybook/addons.js @@ -1,2 +1,3 @@ import '@storybook/addon-actions/register'; import '@storybook/addon-links/register'; +import '@storybook/addon-storysource/register'; diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js index d032105..e5480fa 100644 --- a/.storybook/webpack.config.js +++ b/.storybook/webpack.config.js @@ -5,6 +5,11 @@ module.exports = { test: /\.scss$/, loaders: ['style-loader', 'css-loader', 'sass-loader'], }, + { + test: /\.stories\.jsx?$/, + loaders: [require.resolve('@storybook/addon-storysource/loader')], + enforce: 'pre', + }, ], }, }; diff --git a/package.json b/package.json index 3f31bdd..be84ff4 100644 --- a/package.json +++ b/package.json @@ -53,5 +53,8 @@ "repository": "", "keywords": [ "react-component" - ] + ], + "dependencies": { + "@storybook/addon-storysource": "^4.0.8" + } } diff --git a/yarn.lock b/yarn.lock index 95e2f56..60dab11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -875,6 +875,20 @@ global "^4.3.2" prop-types "^15.6.2" +"@storybook/addon-storysource@^4.0.8": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-4.0.8.tgz#983f3e5c561d75b67443afc9df521183377ff908" + integrity sha512-c0ZeXQP64HDX4lgnCk3zX/Zt04K2X3fgsp82wY2k2+CTNwiSFneCxowOU+dvN+5XmGD99QZAW/mqruhZQew3xA== + dependencies: + "@babel/runtime" "^7.1.2" + "@storybook/addons" "4.0.8" + "@storybook/components" "4.0.8" + estraverse "^4.2.0" + loader-utils "^1.1.0" + prettier "^1.14.3" + prop-types "^15.6.2" + react-syntax-highlighter "^10.0.0" + "@storybook/addons@4.0.8", "@storybook/addons@^4.0.8": version "4.0.8" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-4.0.8.tgz#841848c57406296f7b513708c15dc865f6b37fc7" @@ -3527,6 +3541,21 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +character-entities-legacy@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" + integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== + +character-entities@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" + integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== + +character-reference-invalid@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" + integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3652,6 +3681,15 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +clipboard@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" + integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -3734,6 +3772,13 @@ combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.5.tgz#b13793131d9ea2d2431cf5b507ddec258f0ce0db" + integrity sha512-Cg90/fcK93n0ecgYTAz1jaA3zvnQ0ExlmKY1rdbyHqAx6BHxwoJc+J7HDu0iuQ7ixEs1qaa+WyQ6oeuBpYP1iA== + dependencies: + trim "0.0.1" + commander@2.15.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" @@ -4298,6 +4343,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -5268,6 +5318,13 @@ fastparse@^1.1.1: resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== +fault@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa" + integrity sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw== + dependencies: + format "^0.2.2" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -5528,6 +5585,11 @@ form-data@~2.3.0, form-data@~2.3.1, form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +format@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -5891,6 +5953,13 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= + dependencies: + delegate "^3.1.2" + graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" @@ -6057,6 +6126,21 @@ hasha@^2.2.0: is-stream "^1.0.1" pinkie-promise "^2.0.0" +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" + integrity sha512-Xyh0v+nHmQvrOqop2Jqd8gOdyQtE8sIP9IQf7mlVDqp924W4w/8Liuguk2L2qei9hARnQSG2m+wAOCxM7npJVw== + +hastscript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.0.0.tgz#fee10382c1bc4ba3f1be311521d368c047d2c43a" + integrity sha512-xJtuJ8D42Xtq5yJrnDg/KAIxl2cXBXKoiIJwmWX9XMf8113qHTGl/Bf7jEsxmENJ4w6q4Tfl8s/Y6mEZo8x8qw== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.2.0" + property-information "^5.0.1" + space-separated-tokens "^1.0.0" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -6077,6 +6161,11 @@ he@1.2.x, he@^1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +highlight.js@~9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + integrity sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4= + hipchat-notifier@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" @@ -6530,6 +6619,19 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-alphabetical@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" + integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== + +is-alphanumerical@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" + integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -6590,6 +6692,11 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= +is-decimal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" + integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -6714,6 +6821,11 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" + integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== + is-my-ip-valid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" @@ -7456,6 +7568,14 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= +lowlight@~1.9.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.2.tgz#0b9127e3cec2c3021b7795dd81005c709a42fdd1" + integrity sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q== + dependencies: + fault "^1.0.2" + highlight.js "~9.12.0" + lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" @@ -8666,6 +8786,18 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" +parse-entities@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" + integrity sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -9008,7 +9140,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^1.15.2: +prettier@^1.14.3, prettier@^1.15.2: version "1.15.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.2.tgz#d31abe22afa4351efa14c7f8b94b58bb7452205e" integrity sha512-YgPLFFA0CdKL4Eg2IHtUSjzj/BWgszDHiNQAe0VAIBse34148whfdzLagRL+QiKS+YfK5ftB6X4v/MBw8yCoug== @@ -9021,6 +9153,13 @@ pretty-error@^2.0.2, pretty-error@^2.1.1: renderkid "^2.0.1" utila "~0.4" +prismjs@^1.8.4, prismjs@~1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" + integrity sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA== + optionalDependencies: + clipboard "^2.0.0" + private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -9099,6 +9238,13 @@ prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.5.9, loose-envify "^1.3.1" object-assign "^4.1.1" +property-information@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.0.1.tgz#c3b09f4f5750b1634c0b24205adbf78f18bdf94f" + integrity sha512-nAtBDVeSwFM3Ot/YxT7s4NqZmqXI7lLzf46BThvotEtYf2uk2yH0ACYuWQkJ7gxKs49PPtKVY0UlDGkyN9aJlw== + dependencies: + xtend "^4.0.1" + proxy-addr@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" @@ -9420,6 +9566,17 @@ react-style-proptype@^3.0.0: dependencies: prop-types "^15.5.4" +react-syntax-highlighter@^10.0.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-10.1.1.tgz#1bf7ad4f2f16d2978b04594407b670671b4d3316" + integrity sha512-2EzDjKuU51BuL9CZ5qfGJ9+6m9BKGm+IJODyeR7ANC3g3wQY1LPxEzo6vDPsdV1EzDbYUAAai3AYtSBaKVusuw== + dependencies: + babel-runtime "^6.18.0" + highlight.js "~9.12.0" + lowlight "~1.9.1" + prismjs "^1.8.4" + refractor "^2.4.1" + react-textarea-autosize@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.0.4.tgz#4e4be649b544a88713e7b5043f76950f35d3d503" @@ -9627,6 +9784,15 @@ redux@^4.0.1: loose-envify "^1.4.0" symbol-observable "^1.2.0" +refractor@^2.4.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.6.2.tgz#8e0877ab8864165275aafeea5d9c8eebe871552f" + integrity sha512-AMNEGkhaXfhoa0/0mW0bHdfizDJnuHDK29/D5oQaKICf6DALQ+kDEHW/36oDHCdfva4XrZ+cdMhRvPsTI4OIjA== + dependencies: + hastscript "^5.0.0" + parse-entities "^1.1.2" + prismjs "~1.15.0" + regenerate-unicode-properties@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" @@ -10111,6 +10277,11 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + selfsigned@^1.9.1: version "1.10.4" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" @@ -10507,6 +10678,13 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" +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" + integrity sha512-G3jprCEw+xFEs0ORweLmblJ3XLymGGr6hxZYTYZjIlvDti9vOBUjRQa1Rzjt012aRrocKstHwdNi+F7HguPsEA== + dependencies: + trim "0.0.1" + spdx-correct@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e" @@ -10974,6 +11152,11 @@ timespan@2.3.x: resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" integrity sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk= +tiny-emitter@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + integrity sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow== + tmatch@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-2.0.1.tgz#0c56246f33f30da1b8d3d72895abaf16660f38cf" @@ -11061,6 +11244,11 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + "true-case-path@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" @@ -11765,7 +11953,7 @@ xregexp@2.0.0: resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= -xtend@^4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= From 3c92a04ef435b847c378aaf0b5642e57cc45d16a Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 15:58:00 +0100 Subject: [PATCH 21/32] stories: use addon actions for 'toggle' --- .storybook/addons.js | 1 + src/Row/Row.stories.jsx | 11 +++++++++-- src/Tree/Tree.stories.jsx | 13 ++++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.storybook/addons.js b/.storybook/addons.js index 7fa6052..759c177 100644 --- a/.storybook/addons.js +++ b/.storybook/addons.js @@ -1,3 +1,4 @@ import '@storybook/addon-actions/register'; import '@storybook/addon-links/register'; import '@storybook/addon-storysource/register'; +import '@storybook/addon-actions/register'; diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index bbeaf84..7d72365 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -1,5 +1,6 @@ import './rowStories.scss'; +import { action } from '@storybook/addon-actions'; import { storiesOf } from '@storybook/react'; import React from 'react'; @@ -21,7 +22,10 @@ storiesOf('Row', module) ( { + action('toggle')(node); + toggle(node); + }} node={dummyNode} expandedRowIds={expandedRowIds} styles={{ @@ -54,7 +58,10 @@ storiesOf('Row', module) ( { + action('toggle')(node); + toggle(node); + }} node={dummyNode} expandedRowIds={expandedRowIds} classes={{ content: 'story-row-table-content' }} diff --git a/src/Tree/Tree.stories.jsx b/src/Tree/Tree.stories.jsx index 305fdfd..59160d2 100644 --- a/src/Tree/Tree.stories.jsx +++ b/src/Tree/Tree.stories.jsx @@ -1,14 +1,15 @@ import './treeStories.scss'; +import { action } from '@storybook/addon-actions'; import { storiesOf } from '@storybook/react'; import React from 'react'; import { Cell } from '../Cell'; import { Header } from '../Header'; +import { Row } from '../Row'; import { dummyNode } from '../stories/node'; import { WithExpandedRowIdsState } from '../stories/WithExpandedRowIdsState'; import { Toggle } from '../Toggle'; -import { Row } from '../Row'; import { Tree } from './Tree'; const TableRowContent = ({ node, hasChildren, indentLeft, expandedRowIds }) => ( @@ -34,7 +35,10 @@ const TableRowContent = ({ node, hasChildren, indentLeft, expandedRowIds }) => ( const TableRow = (expandedRowIds, toggle) => ( { + action('toggle')(node); + toggle(node); + }} node={dummyNode} expandedRowIds={expandedRowIds} classes={{ content: 'story-row-table-content' }} @@ -51,7 +55,10 @@ storiesOf('Tree', module) ( { + action('toggle')(node); + toggle(node); + }} node={dummyNode} expandedRowIds={expandedRowIds} styles={{ From ff7b3f7bcb59c4e3efb1f3c7b025e1c5fda488dd Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 16:06:44 +0100 Subject: [PATCH 22/32] stories: add ga --- .storybook/preview-head.html | 11 + jest.config.js | 180 +++++++ package.json | 116 ++--- yarn.lock | 981 +++++++++++++++++++++++++++++++++-- 4 files changed, 1194 insertions(+), 94 deletions(-) create mode 100644 .storybook/preview-head.html create mode 100644 jest.config.js diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html new file mode 100644 index 0000000..ae8fa1b --- /dev/null +++ b/.storybook/preview-head.html @@ -0,0 +1,11 @@ + + + diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..131104b --- /dev/null +++ b/jest.config.js @@ -0,0 +1,180 @@ +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html + +module.exports = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after the first failure + // bail: false, + + // Respect "browser" field in package.json when resolving modules + // browser: false, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/tmp/jest_rs", + + // Automatically clear mock calls and instances between every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: null, + + // The directory where Jest should output its coverage files + coverageDirectory: "coverage", + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "/node_modules/" + // ], + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: null, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files usin a array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: null, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: null, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "json", + // "jsx", + // "node" + // ], + + // A map from regular expressions to module names that allow to stub out resources with a single module + // moduleNameMapper: {}, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "always", + + // A preset that is used as a base for Jest's configuration + // preset: null, + + // Run tests from one or more projects + // projects: null, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state between every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: null, + + // Automatically restore mock state between every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: null, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // "" + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // The path to a module that runs some code to configure or set up the testing framework before each test + // setupTestFrameworkScriptFile: null, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + // testEnvironment: "jest-environment-jsdom", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.js?(x)", + // "**/?(*.)+(spec|test).js?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern Jest uses to detect test files + // testRegex: "", + + // This option allows the use of a custom results processor + // testResultsProcessor: null, + + // This option allows use of a custom test runner + // testRunner: "jasmine2", + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: "http://localhost", + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: "real", + + // A map from regular expressions to paths to transformers + // transform: null, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: null, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; diff --git a/package.json b/package.json index be84ff4..0c70db6 100644 --- a/package.json +++ b/package.json @@ -1,60 +1,60 @@ { - "name": "react-tree-view", - "version": "1.0.0", - "description": "react-tree-view React component", - "main": "lib/index.js", - "module": "es/index.js", - "files": [ - "css", - "es", - "lib", - "umd" - ], - "scripts": { - "build": "nwb build-react-component", - "clean": "nwb clean-module && nwb clean-demo", - "prepublishOnly": "npm run build", - "start": "nwb serve-react-demo", - "test": "nwb test-react", - "test:coverage": "nwb test-react --coverage", - "test:watch": "nwb test-react --server", - "eslint-check": "eslint --print-config .eslintrc.json | eslint-config-prettier-check", - "storybook": "start-storybook -p 6006", - "build-storybook": "build-storybook" - }, - "peerDependencies": { - "react": "16.x", - "velocity-react": "^1.4.x" - }, - "devDependencies": { - "@babel/core": "^7.1.6", - "@storybook/addon-actions": "^4.0.8", - "@storybook/addon-info": "^4.0.8", - "@storybook/addon-links": "^4.0.8", - "@storybook/addons": "^4.0.8", - "@storybook/react": "^4.0.8", - "babel-loader": "^8.0.4", - "eslint": "^5.3.0", - "eslint-config-airbnb": "17.1.0", - "eslint-config-prettier": "^3.3.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-jsx-a11y": "^6.1.1", - "eslint-plugin-prettier": "^3.0.0", - "eslint-plugin-react": "^7.11.0", - "nwb": "0.23.x", - "nwb-sass": "^0.9.0", - "prettier": "^1.15.2", - "react": "^16.6.3", - "react-dom": "^16.6.3" - }, - "author": "", - "homepage": "", - "license": "MIT", - "repository": "", - "keywords": [ - "react-component" - ], - "dependencies": { - "@storybook/addon-storysource": "^4.0.8" - } + "name": "react-tree-view", + "version": "1.0.0", + "description": "react-tree-view React component", + "main": "lib/index.js", + "module": "es/index.js", + "files": [ + "css", + "es", + "lib", + "umd" + ], + "scripts": { + "build": "nwb build-react-component", + "clean": "nwb clean-module && nwb clean-demo", + "prepublishOnly": "npm run build", + "start": "nwb serve-react-demo", + "test": "jest", + "eslint-check": "eslint --print-config .eslintrc.json | eslint-config-prettier-check", + "storybook": "start-storybook -p 6006", + "build-storybook": "build-storybook" + }, + "peerDependencies": { + "react": "16.x", + "velocity-react": "^1.4.x" + }, + "devDependencies": { + "@babel/core": "^7.1.6", + "@storybook/addon-actions": "^4.0.8", + "@storybook/addon-info": "^4.0.8", + "@storybook/addon-links": "^4.0.8", + "@storybook/addons": "^4.0.8", + "@storybook/react": "^4.0.8", + "babel-loader": "^8.0.4", + "eslint": "^5.3.0", + "eslint-config-airbnb": "17.1.0", + "eslint-config-prettier": "^3.3.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-jsx-a11y": "^6.1.1", + "eslint-plugin-prettier": "^3.0.0", + "eslint-plugin-react": "^7.11.0", + "jest": "^23.6.0", + "jest-webpack": "^0.5.1", + "nwb": "0.23.x", + "nwb-sass": "^0.9.0", + "prettier": "^1.15.2", + "react": "^16.6.3", + "react-dom": "^16.6.3" + }, + "author": "", + "homepage": "", + "license": "MIT", + "repository": "", + "keywords": [ + "react-component" + ], + "dependencies": { + "@storybook/addon-storysource": "^4.0.8" + } } diff --git a/yarn.lock b/yarn.lock index 60dab11..d624f83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0": +"@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== @@ -1423,6 +1423,11 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" integrity sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g== +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -1448,17 +1453,30 @@ acorn-dynamic-import@^3.0.0: dependencies: acorn "^5.0.0" +acorn-globals@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" + integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.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" integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== -acorn@^5.0.0, acorn@^5.6.2: +acorn-walk@^6.0.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" + integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== + +acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.2: +acorn@^6.0.1, acorn@^6.0.2: version "6.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" integrity sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg== @@ -1589,7 +1607,7 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1617,6 +1635,13 @@ app-root-dir@^1.0.2: resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + integrity sha1-126/jKlNJ24keja61EpLdKthGZE= + dependencies: + default-require-extensions "^1.0.0" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1667,6 +1692,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" @@ -1813,6 +1843,11 @@ ast-types@0.11.6, ast-types@0.x.x: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.6.tgz#4e2266c2658829aef3b40cc33ad599c4e9eb89ef" integrity sha512-nHiuV14upVGl7MWwFUYbzJ6YlfwWS084CU9EA8HajfYQjMSli5TQi3UTRygGF58LFWVkXxS1rbgRhROEqlQkXg== +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -1934,7 +1969,7 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@6.26.3, babel-core@^6.26.0: +babel-core@6.26.3, babel-core@^6.0.0, babel-core@^6.26.0: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== @@ -2149,6 +2184,14 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-jest@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" + integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== + dependencies: + babel-plugin-istanbul "^4.1.6" + babel-preset-jest "^23.2.0" + babel-loader@7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" @@ -2194,7 +2237,7 @@ babel-plugin-inferno@5.0.1: dependencies: babel-plugin-syntax-jsx "^6.18.0" -babel-plugin-istanbul@4.1.6: +babel-plugin-istanbul@4.1.6, babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== @@ -2204,6 +2247,11 @@ babel-plugin-istanbul@4.1.6: istanbul-lib-instrument "^1.10.1" test-exclude "^4.2.1" +babel-plugin-jest-hoist@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" + integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc= + babel-plugin-lodash@3.2.11: version "3.2.11" resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.2.11.tgz#21c8fdec9fe1835efaa737873e3902bdd66d5701" @@ -2852,6 +2900,14 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" +babel-preset-jest@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" + integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY= + dependencies: + babel-plugin-jest-hoist "^23.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + babel-preset-minify@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.0.tgz#e25bb8d3590087af02b650967159a77c19bfb96b" @@ -2969,7 +3025,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-te babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -2984,7 +3040,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= @@ -3205,6 +3261,18 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -3295,6 +3363,13 @@ browserslist@^4.0.1, browserslist@^4.1.0, browserslist@^4.3.3: electron-to-chromium "^1.3.82" node-releases "^1.0.1" +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= + dependencies: + node-int64 "^0.4.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" @@ -3506,6 +3581,13 @@ caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000865, caniuse-lite@^1.0.300008 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000910.tgz#755d5181d4b006e5a2b59b1ffa05d0a0470039f5" integrity sha512-u/nxtHGAzCGZzIxt3dA/tpSPOcirBZFWKwz1EPz4aaupnBI2XR0Rbr74g0zc6Hzy41OEM4uMoZ38k56TpYAWjQ== +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= + dependencies: + rsvp "^3.3.3" + case-sensitive-paths-webpack-plugin@2.1.2, case-sensitive-paths-webpack-plugin@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz#c899b52175763689224571dad778742e133f0192" @@ -3609,6 +3691,11 @@ chrome-trace-event@^1.0.0: dependencies: tslib "^1.9.0" +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + 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" @@ -3906,7 +3993,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== @@ -4169,6 +4256,18 @@ cssesc@^0.1.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog== + +cssstyle@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" + integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== + dependencies: + cssom "0.3.x" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -4210,6 +4309,15 @@ data-uri-to-buffer@1: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + date-format@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" @@ -4281,6 +4389,13 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= + dependencies: + strip-bom "^2.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -4383,6 +4498,11 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + detect-node@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" @@ -4417,7 +4537,7 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= -diff@3.5.0: +diff@3.5.0, diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== @@ -4526,6 +4646,13 @@ domelementtype@~1.1.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + domhandler@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" @@ -4827,7 +4954,7 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" -escodegen@1.x.x: +escodegen@1.x.x, escodegen@^1.9.1: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== @@ -5088,6 +5215,13 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exec-sh@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== + dependencies: + merge "^1.2.0" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -5106,6 +5240,11 @@ exenv@^1.2.0: resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + expand-braces@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" @@ -5170,6 +5309,18 @@ expect@1.20.2: object-keys "^1.0.9" tmatch "^2.0.1" +expect@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" + integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w== + dependencies: + ansi-styles "^3.2.0" + jest-diff "^23.6.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + express@^4.16.2, express@^4.16.3: version "4.16.4" resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" @@ -5339,6 +5490,13 @@ faye-websocket@~0.11.0: dependencies: websocket-driver ">=0.5.1" +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + dependencies: + bser "^2.0.0" + fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" @@ -5414,6 +5572,14 @@ filename-regex@^2.0.0: resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + filesize@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -5678,7 +5844,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0, fsevents@^1.2.2: +fsevents@^1.0.0, fsevents@^1.2.2, fsevents@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== @@ -5970,6 +6136,11 @@ growl@1.10.5: resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + gzip-size@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" @@ -5983,7 +6154,7 @@ handle-thing@^1.2.5: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" integrity sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ= -handlebars@^4.0.1: +handlebars@^4.0.1, handlebars@^4.0.3: version "4.0.12" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== @@ -6223,6 +6394,13 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" @@ -6384,7 +6562,7 @@ iconv-lite@0.4.23: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6583,7 +6761,7 @@ interpret@^1.0.0, interpret@^1.1.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= -invariant@^2.2.2: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -6673,6 +6851,13 @@ is-callable@^1.0.4, is-callable@^1.1.3, is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -6795,6 +6980,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go= + is-generator-function@^1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" @@ -7023,12 +7213,36 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^1.2.1: +istanbul-api@^1.3.1: + version "1.3.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" + integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.1" + istanbul-lib-hook "^1.2.2" + istanbul-lib-instrument "^1.10.2" + istanbul-lib-report "^1.1.5" + istanbul-lib-source-maps "^1.2.6" + istanbul-reports "^1.5.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== -istanbul-lib-instrument@^1.10.1: +istanbul-lib-hook@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" + integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== @@ -7041,6 +7255,34 @@ istanbul-lib-instrument@^1.10.1: istanbul-lib-coverage "^1.2.1" semver "^5.3.0" +istanbul-lib-report@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== + dependencies: + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" + integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== + dependencies: + handlebars "^4.0.3" + istanbul@^0.4.0: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" @@ -7061,6 +7303,336 @@ istanbul@^0.4.0: which "^1.1.1" wordwrap "^1.0.0" +jest-changed-files@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" + integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA== + dependencies: + throat "^4.0.0" + +jest-cli@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" + integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.3.1" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-source-maps "^1.2.4" + jest-changed-files "^23.4.2" + jest-config "^23.6.0" + jest-environment-jsdom "^23.4.0" + jest-get-type "^22.1.0" + jest-haste-map "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve-dependencies "^23.6.0" + jest-runner "^23.6.0" + jest-runtime "^23.6.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + jest-watcher "^23.4.0" + jest-worker "^23.2.0" + micromatch "^2.3.11" + node-notifier "^5.2.1" + prompts "^0.1.9" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^11.0.0" + +jest-config@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" + integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ== + dependencies: + babel-core "^6.0.0" + babel-jest "^23.6.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^23.4.0" + jest-environment-node "^23.4.0" + jest-get-type "^22.1.0" + jest-jasmine2 "^23.6.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + micromatch "^2.3.11" + pretty-format "^23.6.0" + +jest-diff@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" + integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^23.6.0" + +jest-docblock@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" + integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c= + dependencies: + detect-newline "^2.1.0" + +jest-each@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" + integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg== + dependencies: + chalk "^2.0.1" + pretty-format "^23.6.0" + +jest-environment-jsdom@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" + integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM= + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + jsdom "^11.5.1" + +jest-environment-node@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" + integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA= + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + +jest-get-type@^22.1.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== + +jest-haste-map@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" + integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg== + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + invariant "^2.2.4" + jest-docblock "^23.2.0" + jest-serializer "^23.0.1" + jest-worker "^23.2.0" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" + integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ== + dependencies: + babel-traverse "^6.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^23.6.0" + is-generator-fn "^1.0.0" + jest-diff "^23.6.0" + jest-each "^23.6.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + pretty-format "^23.6.0" + +jest-leak-detector@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" + integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg== + dependencies: + pretty-format "^23.6.0" + +jest-matcher-utils@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" + integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^23.6.0" + +jest-message-util@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" + integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8= + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" + integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ= + +jest-regex-util@^23.3.0: + version "23.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" + integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U= + +jest-resolve-dependencies@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" + integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA== + dependencies: + jest-regex-util "^23.3.0" + jest-snapshot "^23.6.0" + +jest-resolve@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" + integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA== + dependencies: + browser-resolve "^1.11.3" + chalk "^2.0.1" + realpath-native "^1.0.0" + +jest-runner@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" + integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA== + dependencies: + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^23.6.0" + jest-docblock "^23.2.0" + jest-haste-map "^23.6.0" + jest-jasmine2 "^23.6.0" + jest-leak-detector "^23.6.0" + jest-message-util "^23.4.0" + jest-runtime "^23.6.0" + jest-util "^23.4.0" + jest-worker "^23.2.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" + integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw== + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.1.6" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.11" + jest-config "^23.6.0" + jest-haste-map "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.6.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^11.0.0" + +jest-serializer@^23.0.1: + version "23.0.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" + integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= + +jest-snapshot@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" + integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg== + dependencies: + babel-types "^6.0.0" + chalk "^2.0.1" + jest-diff "^23.6.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-resolve "^23.6.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^23.6.0" + semver "^5.5.0" + +jest-util@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" + integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE= + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^23.4.0" + mkdirp "^0.5.1" + slash "^1.0.0" + source-map "^0.6.0" + +jest-validate@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" + integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.6.0" + +jest-watcher@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" + integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw= + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + string-length "^2.0.0" + +jest-webpack@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/jest-webpack/-/jest-webpack-0.5.1.tgz#6f5ab73bcac51b7d18750afcb620bd1e41c47b90" + integrity sha512-7+TDjoaWwMuz3il0EYH+AlMNYYZtKKnMRqytxqIevHVCaaRZPp0yn2ECcMKdjfNTa5eDczD2b6k139BYbnzBoA== + dependencies: + find-up "^2.1.0" + mkdirp "^0.5.1" + node-object-hash "^1.2.0" + pify "^3.0.0" + regenerator-runtime "^0.10.5" + webpack-sources "^1.0.1" + yargs "^10.0.3" + +jest-worker@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" + integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= + dependencies: + merge-stream "^1.0.1" + +jest@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" + integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw== + dependencies: + import-local "^1.0.0" + jest-cli "^23.6.0" + js-base64@^2.1.8: version "2.4.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" @@ -7081,7 +7653,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.9.0: +js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== @@ -7094,6 +7666,38 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -7338,6 +7942,11 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +kleur@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" + integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== + lazy-universal-dotenv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-2.0.0.tgz#e015ad9f77be9ef811956d53ea9519b1c0ab0214" @@ -7356,6 +7965,16 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -7479,12 +8098,17 @@ lodash.some@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ= -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@~4.17.10: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -7624,6 +8248,13 @@ make-error@^1.3.5: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -7730,11 +8361,23 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + merge2@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== +merge@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -7865,7 +8508,7 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -8118,6 +8761,11 @@ node-gyp@^3.3.1: tar "^2.0.0" which "1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + node-libs-browser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" @@ -8147,6 +8795,21 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-notifier@^5.2.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz#c77a4a7b84038733d5fb351aafd8a268bfe19a01" + integrity sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q== + dependencies: + growly "^1.3.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +node-object-hash@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.4.1.tgz#de968492e20c493b8bbc25ad2ee828265fd60934" + integrity sha512-JQVqSM5/mOaUoUhCYR0t1vgm8RFo7qpJtPvnoFCLeqQh1xrfmr3BCD3nGBnACzpIEF7F7EVgqGD3O4lao/BY/A== + node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" @@ -8440,6 +9103,11 @@ nwb@0.23.x: webpack-merge "4.1.4" whatwg-fetch "2.0.4" +nwsapi@^2.0.7: + version "2.0.9" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" + integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== + oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -8828,6 +9496,11 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -9020,6 +9693,11 @@ pluralize@^7.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + portfinder@^1.0.9: version "1.0.19" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.19.tgz#07e87914a55242dcda5b833d42f018d6875b595f" @@ -9153,6 +9831,14 @@ pretty-error@^2.0.2, pretty-error@^2.1.1: renderkid "^2.0.1" utila "~0.4" +pretty-format@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + prismjs@^1.8.4, prismjs@~1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" @@ -9230,6 +9916,14 @@ promisify-call@^2.0.2: dependencies: with-callback "^1.0.2" +prompts@^0.1.9: + version "0.1.14" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" + integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w== + dependencies: + kleur "^2.0.1" + sisteransi "^0.1.1" + prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" @@ -9718,6 +10412,13 @@ readdirp@^2.0.0: micromatch "^3.1.10" readable-stream "^2.0.2" +realpath-native@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" + integrity sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g== + dependencies: + util.promisify "^1.0.0" + recast@^0.16.0: version "0.16.1" resolved "https://registry.yarnpkg.com/recast/-/recast-0.16.1.tgz#865f1800ef76e42e5d0375763b80f4d6a05f2069" @@ -9972,6 +10673,22 @@ request-progress@^2.0.1: dependencies: throttleit "^1.0.0" +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY= + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU= + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + request@2.75.x: version "2.75.0" resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" @@ -10119,7 +10836,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.x: +resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= @@ -10159,6 +10876,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -10212,6 +10934,22 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sane@^2.0.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" + integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" @@ -10450,11 +11188,21 @@ shelljs@^0.8.2: interpret "^1.0.0" rechoir "^0.6.2" +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +sisteransi@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" + integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== + slack-node@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" @@ -10641,7 +11389,7 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@~0.5.6: +source-map-support@^0.5.6, source-map-support@~0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== @@ -10661,7 +11409,7 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -10784,6 +11532,11 @@ ssri@^6.0.0: dependencies: figgy-pudding "^3.5.1" +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + stackframe@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" @@ -10819,6 +11572,11 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -10861,6 +11619,14 @@ streamroller@0.7.0: mkdirp "^0.5.1" readable-stream "^2.3.0" +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -10938,6 +11704,11 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +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" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -10945,11 +11716,6 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -10995,7 +11761,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.0: +supports-color@^3.1.0, supports-color@^3.1.2: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= @@ -11022,6 +11788,11 @@ symbol-observable@^1.2.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= + symbol.prototype.description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.0.tgz#6e355660eb1e44ca8ad53a68fdb72ef131ca4b12" @@ -11112,6 +11883,11 @@ text-table@0.2.0, text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" @@ -11169,6 +11945,11 @@ tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" @@ -11219,6 +12000,14 @@ toposort@^1.0.0: resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= +tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" @@ -11226,13 +12015,12 @@ tough-cookie@~2.3.0, tough-cookie@~2.3.3: dependencies: punycode "^1.4.1" -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: - psl "^1.1.24" - punycode "^1.4.1" + punycode "^2.1.0" trim-newlines@^1.0.0: version "1.0.0" @@ -11619,6 +12407,20 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + dependencies: + browser-process-hrtime "^0.1.2" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" @@ -11626,6 +12428,14 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + watchpack@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" @@ -11649,6 +12459,11 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + webpack-dev-middleware@3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz#8b32aa43da9ae79368c1bf1183f2b6cf5e1f39ed" @@ -11846,6 +12661,13 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + whatwg-fetch@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" @@ -11856,6 +12678,29 @@ whatwg-fetch@>=0.10.0: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + when@^3.7.7: version "3.7.8" resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" @@ -11871,7 +12716,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.1.1, which@^1.2.1, which@^1.2.10, which@^1.2.14, which@^1.2.9: +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -11927,6 +12772,15 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" @@ -11934,6 +12788,13 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + ws@~3.3.1: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" @@ -11943,6 +12804,11 @@ ws@~3.3.1: safe-buffer "~5.1.0" ultron "~1.1.0" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" @@ -11980,6 +12846,13 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== + dependencies: + camelcase "^4.1.0" + yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" @@ -12005,6 +12878,42 @@ yargs@11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + +yargs@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" From 7b528af7e58e53777efd01efc9e5ad28415978b5 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 16:28:17 +0100 Subject: [PATCH 23/32] core: change version --- package.json | 116 +++++++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 0c70db6..f20a17e 100644 --- a/package.json +++ b/package.json @@ -1,60 +1,60 @@ { - "name": "react-tree-view", - "version": "1.0.0", - "description": "react-tree-view React component", - "main": "lib/index.js", - "module": "es/index.js", - "files": [ - "css", - "es", - "lib", - "umd" - ], - "scripts": { - "build": "nwb build-react-component", - "clean": "nwb clean-module && nwb clean-demo", - "prepublishOnly": "npm run build", - "start": "nwb serve-react-demo", - "test": "jest", - "eslint-check": "eslint --print-config .eslintrc.json | eslint-config-prettier-check", - "storybook": "start-storybook -p 6006", - "build-storybook": "build-storybook" - }, - "peerDependencies": { - "react": "16.x", - "velocity-react": "^1.4.x" - }, - "devDependencies": { - "@babel/core": "^7.1.6", - "@storybook/addon-actions": "^4.0.8", - "@storybook/addon-info": "^4.0.8", - "@storybook/addon-links": "^4.0.8", - "@storybook/addons": "^4.0.8", - "@storybook/react": "^4.0.8", - "babel-loader": "^8.0.4", - "eslint": "^5.3.0", - "eslint-config-airbnb": "17.1.0", - "eslint-config-prettier": "^3.3.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-jsx-a11y": "^6.1.1", - "eslint-plugin-prettier": "^3.0.0", - "eslint-plugin-react": "^7.11.0", - "jest": "^23.6.0", - "jest-webpack": "^0.5.1", - "nwb": "0.23.x", - "nwb-sass": "^0.9.0", - "prettier": "^1.15.2", - "react": "^16.6.3", - "react-dom": "^16.6.3" - }, - "author": "", - "homepage": "", - "license": "MIT", - "repository": "", - "keywords": [ - "react-component" - ], - "dependencies": { - "@storybook/addon-storysource": "^4.0.8" - } + "name": "react-tree-view", + "version": "0.1.0", + "description": "react-tree-view React component", + "main": "lib/index.js", + "module": "es/index.js", + "files": [ + "css", + "es", + "lib", + "umd" + ], + "scripts": { + "build": "nwb build-react-component", + "clean": "nwb clean-module && nwb clean-demo", + "prepublishOnly": "npm run build", + "start": "nwb serve-react-demo", + "test": "jest", + "eslint-check": "eslint --print-config .eslintrc.json | eslint-config-prettier-check", + "storybook": "start-storybook -p 6006", + "build-storybook": "build-storybook" + }, + "peerDependencies": { + "react": "16.x", + "velocity-react": "^1.4.x" + }, + "devDependencies": { + "@babel/core": "^7.1.6", + "@storybook/addon-actions": "^4.0.8", + "@storybook/addon-info": "^4.0.8", + "@storybook/addon-links": "^4.0.8", + "@storybook/addons": "^4.0.8", + "@storybook/react": "^4.0.8", + "babel-loader": "^8.0.4", + "eslint": "^5.3.0", + "eslint-config-airbnb": "17.1.0", + "eslint-config-prettier": "^3.3.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-jsx-a11y": "^6.1.1", + "eslint-plugin-prettier": "^3.0.0", + "eslint-plugin-react": "^7.11.0", + "jest": "^23.6.0", + "jest-webpack": "^0.5.1", + "nwb": "0.23.x", + "nwb-sass": "^0.9.0", + "prettier": "^1.15.2", + "react": "^16.6.3", + "react-dom": "^16.6.3" + }, + "author": "", + "homepage": "", + "license": "MIT", + "repository": "", + "keywords": [ + "react-component" + ], + "dependencies": { + "@storybook/addon-storysource": "^4.0.8" + } } From 18913247f56e1d24f21bb254f323272722328bfd Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 16:30:52 +0100 Subject: [PATCH 24/32] core: install @storybook/addon-storysource as dev dependency --- package.json | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index f20a17e..d41a94d 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,13 @@ "lib", "umd" ], + "author": "Christopher Caroni", + "homepage": "https://react-tree-view.ccaroni.com", + "license": "MIT", + "repository": "https://github.com/Christopher-Caroni/react-tree-view", + "keywords": [ + "react-component" + ], "scripts": { "build": "nwb build-react-component", "clean": "nwb clean-module && nwb clean-demo", @@ -29,6 +36,7 @@ "@storybook/addon-actions": "^4.0.8", "@storybook/addon-info": "^4.0.8", "@storybook/addon-links": "^4.0.8", + "@storybook/addon-storysource": "^4.0.8", "@storybook/addons": "^4.0.8", "@storybook/react": "^4.0.8", "babel-loader": "^8.0.4", @@ -46,15 +54,5 @@ "prettier": "^1.15.2", "react": "^16.6.3", "react-dom": "^16.6.3" - }, - "author": "", - "homepage": "", - "license": "MIT", - "repository": "", - "keywords": [ - "react-component" - ], - "dependencies": { - "@storybook/addon-storysource": "^4.0.8" } } From ba9cf56b62901641ca9541926e3c528f2759ec13 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 16:45:19 +0100 Subject: [PATCH 25/32] refactor(Row): add default render for content --- src/Row/Row.js | 37 ++++++++++++++++++++----------------- src/Row/components.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 src/Row/components.js diff --git a/src/Row/Row.js b/src/Row/Row.js index 022ba6a..4da4e26 100644 --- a/src/Row/Row.js +++ b/src/Row/Row.js @@ -6,12 +6,13 @@ import { VelocityTransitionGroup } from 'velocity-react'; import { animations } from '../animations'; import { defaultNode, nodePropType } from '../proptypes'; +import { DefaultContent, Indent } from './components'; const Row = ({ node, depth, ...rest }) => { const { classes: { root: classNameRoot = '', content: classNameContent = '' }, styles: { root: styleRoot = undefined, content: styleContent = undefined }, - renderContent, + renderContent: CustomRenderContent, expandedRowIds, getAnimation, onClick, @@ -24,24 +25,26 @@ const Row = ({ node, depth, ...rest }) => { const showChildren = hasChildren && isExpanded; const indentLeft = depth * 24; + const contentProps = { + node, + depth, + ...rest, + isExpanded, + hasChildren, + indentLeft, + }; + return (
- {Boolean(renderContent) && ( -
onClick(node)} - > - {!noIndent && ( -
- )} - {renderContent({ node, depth, ...rest, isExpanded, hasChildren, indentLeft })} -
- )} +
onClick(node)} + > + {!noIndent && } + {!CustomRenderContent && } + {CustomRenderContent && } +
{customRenderChildren && customRenderChildren({ node, depth, ...rest, isExpanded, hasChildren, indentLeft })} {!customRenderChildren && ( diff --git a/src/Row/components.js b/src/Row/components.js new file mode 100644 index 0000000..289a3eb --- /dev/null +++ b/src/Row/components.js @@ -0,0 +1,32 @@ +import React from 'react'; + +import { Cell } from '../Cell'; +import { Toggle } from '../Toggle'; + +export const DefaultContent = ({ node, hasChildren, expandedRowIds, indentLeft }) => ( + + + {hasChildren && } + +
+ {node.id} +
+
+
+); + +export const Indent = ({ indentLeft }) => ( +
+); From c22926f23ccd445e35d641bb1e514c0b46176993 Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 16:51:52 +0100 Subject: [PATCH 26/32] stories(Row): make custom render example more explicit --- src/Row/Row.stories.jsx | 65 ++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index 7d72365..9bb1187 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -14,11 +14,34 @@ import { Row } from './Row'; storiesOf('Row', module) .addDecorator(storyFn =>
{storyFn()}
) .add('default: !expanded', () => ) - .add('with node', () => ) - .add('with renderContent', () => ( -
{node.id}
} /> + .add('with node, default render', () => ) + .add('stateful, default render', () => ( + ( + { + action('toggle')(node); + toggle(node); + }} + node={dummyNode} + expandedRowIds={expandedRowIds} + /> + )} + /> + )) + .add('custom render', () => ( + ( +
+ +
{node.id}
+
As you can see, you can customise the content of a node
+
+ )} + /> )) - .add('stateful example', () => ( + .add('stateful, custom render', () => ( ( ( - - {hasChildren && } -
- {node.id} -
-
+ + + {hasChildren && ( + + )} +
+ {node.id} +
+
+ {node.name} +
)} /> )} From 5bb630aff7243653f8af7d1532f6ef9a42610b8e Mon Sep 17 00:00:00 2001 From: Christopher Caroni Date: Sun, 25 Nov 2018 16:55:05 +0100 Subject: [PATCH 27/32] stories: fix duplicate click handler --- src/Row/Row.stories.jsx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/Row/Row.stories.jsx b/src/Row/Row.stories.jsx index 9bb1187..ed9c877 100644 --- a/src/Row/Row.stories.jsx +++ b/src/Row/Row.stories.jsx @@ -45,10 +45,6 @@ storiesOf('Row', module) ( { - action('toggle')(node); - toggle(node); - }} node={dummyNode} expandedRowIds={expandedRowIds} styles={{ @@ -61,9 +57,9 @@ storiesOf('Row', module) {hasChildren && (