feat(ui-toolkit): tooltip and popover

This commit is contained in:
Sérgio Ramos 2017-10-19 14:36:18 +01:00 committed by Sérgio Ramos
parent 854afa0c0d
commit 98b4a713a0
30 changed files with 1072 additions and 513 deletions

View File

@ -8,10 +8,10 @@ Server that exposes [CloudApi](https://apidocs.joyent.com/cloudapi/) through
## Table of Contents
- [Install](#install)
- [Usage](#usage)
- [Todo](#todo)
- [License](#license)
* [Install](#install)
* [Usage](#usage)
* [Todo](#todo)
* [License](#license)
## Install
@ -25,10 +25,10 @@ yarn add cloudapi-gql
yarn run start
```
- [GraphiQL](http://0.0.0.0:4000/graphiql)
- [Graphidoc](http://0.0.0.0:4000/doc)
- [Voyager](http://0.0.0.0:4000/voyager)
- [Playground](http://0.0.0.0:4000/playground)
* [GraphiQL](http://0.0.0.0:4000/graphiql)
* [Graphidoc](http://0.0.0.0:4000/doc)
* [Voyager](http://0.0.0.0:4000/voyager)
* [Playground](http://0.0.0.0:4000/playground)
![](https://cldup.com/StGgfIbD3N.png) ![](https://cldup.com/fhpul_AJ13.png)
![](https://cldup.com/A-VwSbvWBe.png) ![](https://cldup.com/08P360Skhx.png)
@ -37,16 +37,16 @@ yarn run start
yarn run faker
```
- [GraphQL Faker Interactive Editor](http://0.0.0.0:9002/editor)
- [GraphQL Faker API](http://0.0.0.0:9002/graphql)
* [GraphQL Faker Interactive Editor](http://0.0.0.0:9002/editor)
* [GraphQL Faker API](http://0.0.0.0:9002/graphql)
![](https://cldup.com/VWadVMorQ0.png)
## Todo
- [ ] Finish missing connections, transforms, and mutations
- [ ] remove node-triton dependency
- [ ] support multiple users on the same server
* [ ] Finish missing connections, transforms, and mutations
* [ ] remove node-triton dependency
* [ ] support multiple users on the same server
## License

View File

@ -5,8 +5,8 @@
## Table of Contents
- [Usage](#usage)
- [License](#license)
* [Usage](#usage)
* [License](#license)
## Usage

View File

@ -8,9 +8,9 @@
## Table of Contents
- [Install](#install)
- [Usage](#usage)
- [License](#license)
* [Install](#install)
* [Usage](#usage)
* [License](#license)
## Install

View File

@ -35,11 +35,13 @@
"lodash.isstring": "^4.0.1",
"moment": "^2.19.1",
"normalized-styled-components": "^1.0.17",
"outy": "^0.1.2",
"pascal-case": "^2.0.1",
"prop-types": "^15.6.0",
"react-bundle": "^1.0.4",
"react-input-range": "^1.2.1",
"react-responsive": "^3.0.0",
"react-popper": "^0.7.3",
"react-responsive": "^2.0.0",
"react-styled-flexboxgrid": "^2.1.0",
"redrun": "^5.9.18",
"remcalc": "^1.0.9",
@ -92,8 +94,6 @@
"stylelint": "^8.2.0",
"stylelint-config-joyent-portal": "^2.0.1",
"svg-inline-loader": "^0.8.0",
"tinycolor2": "^1.4.1",
"title-case": "^2.1.1",
"uglifyjs-webpack-plugin": "^1.0.0-beta.3",
"url-loader": "^0.6.2",
"webpack": "^3.8.1"

View File

@ -30,21 +30,21 @@ corresponding prop and calculates the `rem`.
List of supported props:
- `border`
- `margin`
- `marginTop`
- `marginRight`
- `marginBottom`
- `marginLeft`
- `padding`
- `paddingTop`
- `paddingRight`
- `paddingBottom`
- `paddingLeft`
- `borderTopWidth`
- `borderRightWidth`
- `borderBottomWidth`
- `borderLeftWidth`
* `border`
* `margin`
* `marginTop`
* `marginRight`
* `marginBottom`
* `marginLeft`
* `padding`
* `paddingTop`
* `paddingRight`
* `paddingBottom`
* `paddingLeft`
* `borderTopWidth`
* `borderRightWidth`
* `borderBottomWidth`
* `borderLeftWidth`
To use this composer, you just do it as you would with any other HOC:

View File

@ -11,19 +11,9 @@ export const tooltipShadow = `0 ${remcalc(2)} ${remcalc(6)} ${remcalc(
export const modalShadow = `0 0 ${remcalc(6)} ${remcalc(1)} rgba(0, 0, 0, 0.1)`;
export const border = {
checked: css`
${remcalc(1)} solid ${props => props.theme.primary};
`,
unchecked: css`
${remcalc(1)} solid ${props => props.theme.grey};
`,
confirmed: css`
${remcalc(1)} solid ${props => props.theme.grey};
`,
error: css`
${remcalc(1)} solid ${props => props.theme.red};
`,
secondary: css`
${remcalc(1)} solid ${props => props.theme.secondaryActive};
`
checked: css`${remcalc(1)} solid ${props => props.theme.primary};`,
unchecked: css`${remcalc(1)} solid ${props => props.theme.grey};`,
confirmed: css`${remcalc(1)} solid ${props => props.theme.grey};`,
error: css`${remcalc(1)} solid ${props => props.theme.red};`,
secondary: css`${remcalc(1)} solid ${props => props.theme.secondaryActive};`
};

View File

@ -1,7 +1,5 @@
import React from 'react';
import styled from 'styled-components';
import { Row, Col } from 'react-styled-flexboxgrid';
import remcalc from 'remcalc';
import View from '../layout/view-container';

View File

@ -259,7 +259,7 @@ Button.defaultProps = {
tertiary: false,
small: false,
loading: false,
selected: false,
selected: false
};
export default Baseline(Button);

View File

@ -26,7 +26,9 @@ const { InstancesIconLight } = require('../icons');
<CardInfoIconContainer>
<InstancesIconLight />
</CardInfoIconContainer>
<CardInfoLabel left light>4 of 4 instances</CardInfoLabel>
<CardInfoLabel left light>
4 of 4 instances
</CardInfoLabel>
</CardInfo>
</CardDescription>
</CardMeta>
@ -63,7 +65,9 @@ const { InstancesIconLight, HealthyIcon } = require('../icons');
<CardInfoIconContainer>
<InstancesIconLight />
</CardInfoIconContainer>
<CardInfoLabel left light>4 of 4 instances</CardInfoLabel>
<CardInfoLabel left light>
4 of 4 instances
</CardInfoLabel>
</CardInfo>
</CardDescription>
</CardMeta>
@ -110,7 +114,9 @@ const { InstancesIconLight, HealthyIcon } = require('../icons');
<CardInfoIconContainer>
<InstancesIconLight />
</CardInfoIconContainer>
<CardInfoLabel left light>4 of 4 instances</CardInfoLabel>
<CardInfoLabel left light>
4 of 4 instances
</CardInfoLabel>
</CardInfo>
</CardDescription>
</CardMeta>
@ -186,7 +192,9 @@ const { InstancesIconLight, HealthyIcon } = require('../icons');
<CardInfoIconContainer>
<InstancesIconLight />
</CardInfoIconContainer>
<CardInfoLabel left light>4 of 4 instances</CardInfoLabel>
<CardInfoLabel left light>
4 of 4 instances
</CardInfoLabel>
</CardInfo>
</CardDescription>
</CardMeta>
@ -194,7 +202,7 @@ const { InstancesIconLight, HealthyIcon } = require('../icons');
</CardHeader>
<CardView>
<CardDescription>
<StatusLoader inline row msg="Provisioning 3 instances" />
<StatusLoader inline row msg="Provisioning 3 instances" />
<br />
<br />
<br />

View File

@ -1,7 +1,7 @@
The code can be found in:
- [GitHub](https://github.com/yldio/joyent-portal/tree/master/packages/ui-toolkit)
- [npm](https://www.npmjs.com/package/joyent-ui-toolkit)
* [GitHub](https://github.com/yldio/joyent-portal/tree/master/packages/ui-toolkit)
* [npm](https://www.npmjs.com/package/joyent-ui-toolkit)
### Install

View File

@ -44,7 +44,9 @@ const RadioStyled = Baseline(
/**
* @example ./usage-radio.md
*/
const Radio = ({ children, ...rest }) => <RadioStyled {...rest}>{children}</RadioStyled>;
const Radio = ({ children, ...rest }) => (
<RadioStyled {...rest}>{children}</RadioStyled>
);
export const RadioList = Baseline(Ul);
export default Radio;

View File

@ -16,7 +16,7 @@ const chevronDisabled =
const SelectWrapper = styled.div`
position: relative;
display: inline-flex;
${isNot('fluid')`
min-width: ${remcalc(200)};
`};

View File

@ -73,25 +73,25 @@ const Icons = () => (
<Icon>
<ArrowIcon width="6" />
</Icon>
<Label>Arrow > Light</Label>
<Label>Arrow &gt; Light</Label>
</ListItem>
<ListItem>
<Icon dark>
<ArrowIconLight width="6" />
</Icon>
<Label>Arrow > Dark</Label>
<Label>Arrow &gt; Dark</Label>
</ListItem>
<ListItem>
<Icon>
<InstancesIcon width="18" />
</Icon>
<Label>Instances > Dark</Label>
<Label>Instances &gt; Dark</Label>
</ListItem>
<ListItem>
<Icon dark>
<InstancesIconLight width="18" />
</Icon>
<Label>Instances > Light</Label>
<Label>Instances &gt; Light</Label>
</ListItem>
<ListItem>
<Icon>
@ -115,13 +115,13 @@ const Icons = () => (
<Icon>
<IconActions width="4" height="16" />
</Icon>
<Label>Actions > Light</Label>
<Label>Actions &gt; Light</Label>
</ListItem>
<ListItem>
<Icon dark>
<IconActionsLight width="4" height="16" />
</Icon>
<Label>Actions > Dark</Label>
<Label>Actions &gt; Dark</Label>
</ListItem>
<ListItem>
<Icon>
@ -187,13 +187,13 @@ const Icons = () => (
<Icon>
<DataCenterIcon width="9" height="13" />
</Icon>
<Label>Data Centre > Dark</Label>
<Label>Data Centre &gt; Dark</Label>
</ListItem>
<ListItem>
<Icon dark>
<DataCenterIconLight width="9" height="13" />
</Icon>
<Label>Data Centre > Light</Label>
<Label>Data Centre &gt; Light</Label>
</ListItem>
<ListItem>
<Icon dark>

View File

@ -0,0 +1,19 @@
```jsx
const { default: Popover, Container, Target, Item, Divider } = require('./');
const { Row, Col } = require('react-styled-flexboxgrid');
<Row center="xs" between="xs">
<Col xs={2}>
<Container>
<Target>Hello</Target>
<Popover placement="right">
<Item>Scale</Item>
<Item>Restart</Item>
<Item>Stop</Item>
<Divider />
<Item>Delete</Item>
</Popover>
</Container>
</Col>
</Row>;
```

View File

@ -0,0 +1,8 @@
import styled from 'styled-components';
import remcalc from 'remcalc';
export default styled.div`
width: calc(100% + ${remcalc(36)});
border-top: ${remcalc(1)} solid ${props => props.theme.grey};
margin: 0 0 ${remcalc(12)} ${remcalc(-18)};
`;

View File

@ -0,0 +1,52 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import styled from 'styled-components';
import { Popper as BasePopper, Arrow } from 'react-popper';
import rndId from 'rnd-id';
import remcalc from 'remcalc';
import style from '../tooltip/style';
const arrowClassName = rndId();
const Popper = styled(BasePopper)`
min-width: ${remcalc(152)};
box-shadow: 0 ${remcalc(2)} ${remcalc(6)} rgba(0, 0, 0, 0.1);
border: ${remcalc(1)} solid ${props => props.theme.grey};
padding: ${remcalc(15)} ${remcalc(18)};
${style({
background: 'white',
color: 'text',
border: 'grey',
arrow: arrowClassName
})};
`;
export default class Popover extends Component {
static contextTypes = {
ttpContMangr: PropTypes.object.isRequired
};
render = () => {
const { children, placement = 'auto', ...rest } = this.props;
const { isOpen, setRef } = this.context.ttpContMangr;
return (
isOpen() && (
<Popper innerRef={setRef('popper')} placement={placement} {...rest}>
{children}
<Arrow>
<span className={arrowClassName} />
</Arrow>
</Popper>
)
);
};
}
export { default as Divider } from './divider';
export { default as Item } from './item';
export { default as Container } from '../tooltip/container';
export { default as Target } from '../tooltip/target';

View File

@ -0,0 +1,18 @@
import remcalc from 'remcalc';
import { H4 } from '../text/headings';
export default H4.extend`
font-size: ${remcalc(16)};
text-align: left;
font-style: normal;
font-weight: normal;
line-height: normal;
cursor: pointer;
color: ${props => props.theme.secondary};
&:hover {
color: ${props => props.theme.secondaryActive};
}
`;

View File

@ -1,10 +1,9 @@
```
const SectionListItem = require('./SectionListItem').default;
const Anchor = require('./SectionListItem').Anchor;
const { default: SectionListItem, Anchor } = require('./item');
<SectionList>
<SectionListItem>
<Anchor className='active'>
<Anchor active>
Overview
</Anchor>
</SectionListItem>

View File

@ -1,8 +1,10 @@
import React, { Component } from 'react';
import { ThemeProvider, injectGlobal } from 'styled-components';
import theme from '../theme';
import Base from '../base';
import { loadedFontFamily } from '../typography';
import { RootContainer } from '../layout';
import 'codemirror/mode/jsx/jsx';
const StyledBase = Base.extend`
@ -10,50 +12,10 @@ const StyledBase = Base.extend`
background-color: transparent;
`;
export default class Wrapper extends Component {
componentWillMount() {
// eslint-disable-next-line no-unused-expressions
injectGlobal`
[hidden] {
display: none;
}
html {
line-height: 1.15;
text-size-adjust: 100%;
}
body {
font-size: 15px;
margin: 0;
padding: 0;
background: ${theme.background};
${loadedFontFamily};
}
html,
body,
#root {
height: 100%;
}
.CodeMirror,
.ReactCodeMirror {
height: 100% !important;
}
.CodeMirror {
border: solid 1px ${theme.grey};
}
`;
}
render() {
return (
<ThemeProvider theme={theme}>
<StyledBase>{this.props.children}</StyledBase>
</ThemeProvider>
);
}
}
export default ({ children }) => (
<ThemeProvider theme={theme}>
<StyledBase>
<RootContainer>{children}</RootContainer>
</StyledBase>
</ThemeProvider>
);

View File

@ -1,11 +1,8 @@
import React from 'react';
import styled from 'styled-components';
import { Strong } from 'normalized-styled-components';
import remcalc from 'remcalc';
import titleCase from 'title-case';
import tinycolor from 'tinycolor2';
import { P, H2 } from '../text';
import theme, { base } from './';
import theme from './';
const Box = styled.div`
width: ${remcalc(130)};
@ -59,276 +56,254 @@ const Color = ({ name, hex }) => (
</Box>
);
export default () => {
const colors = Object.keys(base)
.filter(name => typeof theme[name] === 'string')
.sort((a, b) => {
const _a = tinycolor(theme[a]).toHsl().h;
const _b = tinycolor(theme[b]).toHsl().h;
return _a >= _b ? -1 : 1;
})
.map(name => <Color key={name} name={name} hex={theme[name]} />);
// return <tr>{colors}</tr>;
return (
<Table>
<thead>
<tr>
<th />
<th>Default</th>
<th>Hover</th>
<th>Click</th>
<th>Disabled</th>
<th>Usage</th>
</tr>
</thead>
<tbody>
<tr>
<Data>
<ColorName>Blue fill / blue text</ColorName>
</Data>
<Data>
<Color key="primary" name="primary" hex={theme.primary} />
</Data>
<Data>
<Color
key="primaryHover"
name="primaryHover"
hex={theme.primaryHover}
/>
</Data>
<Data>
<Color
key="primaryActive"
name="primaryActive"
hex={theme.primaryActive}
/>
</Data>
<Data>
<Color key="disabled" name="disabled" hex={theme.disabled} />
</Data>
<Data>
Fill for primary buttons, text anchors (including interactive parts
of the breadcrumb) and other UI components, whose priority or
prominence is emphasized with color.
</Data>
</tr>
<tr>
<Data>
<ColorName>Blue border</ColorName>
</Data>
<Data>
<Color
key="primaryActive"
name="primaryActive"
hex={theme.primaryActive}
/>
</Data>
<Data />
<Data />
<Data>
<Color key="disabled" name="disabled" hex={theme.disabled} />
</Data>
<Data>
Borders of primary buttons and other UI components, whose priority
or prominence is emphasized with color.
</Data>
</tr>
<tr>
<Data>
<ColorName>White fill</ColorName>
</Data>
<Data>
<Color key="white" name="white" hex={theme.white} />
</Data>
<Data>
<Color key="whiteHover" name="whiteHover" hex={theme.whiteHover} />
</Data>
<Data>
<Color
key="whiteActive"
name="whiteActive"
hex={theme.whiteActive}
/>
</Data>
<Data>
<Color key="disabled" name="disabled" hex={theme.disabled} />
</Data>
<Data>
Fill for secondary buttons, inputs, dropdown menus, tables, service
and instance cards and other components that need to be
distinguished from the overall layout.
</Data>
</tr>
<tr>
<Data>
<ColorName>Grey border</ColorName>
</Data>
<Data>
<Color key="grey" name="grey" hex={theme.grey} />
</Data>
<Data />
<Data />
<Data />
<Data>Borders of white or grey UI components and dividers.</Data>
</tr>
<tr>
<Data>
<ColorName>Charcoal fill</ColorName>
</Data>
<Data>
<Color key="secondary" name="secondary" hex={theme.secondary} />
</Data>
<Data>
<Color
key="secondaryHover"
name="secondaryHover"
hex={theme.secondaryHover}
/>
</Data>
<Data>
<Color
key="secondaryActive"
name="secondaryActive"
hex={theme.secondaryActive}
/>
</Data>
<Data>
<Color key="disabled" name="disabled" hex={theme.disabled} />
</Data>
<Data>Fill for topology components.</Data>
</tr>
<tr>
<Data>
<ColorName>Charcoal border</ColorName>
</Data>
<Data>
<Color
key="secondaryActive"
name="secondaryActive"
hex={theme.secondaryActive}
/>
</Data>
<Data />
<Data />
<Data>
<Color
key="textDisabled"
name="textDisabled"
hex={theme.textDisabled}
/>
</Data>
<Data>Border for topology components.</Data>
</tr>
<tr>
<Data>
<ColorName>Text</ColorName>
</Data>
<Data>
<Color key="text" name="text" hex={theme.text} />
</Data>
<Data />
<Data />
<Data>
<Color
key="textDisabled"
name="textDisabled"
hex={theme.textDisabled}
/>
</Data>
<Data>Any text.</Data>
</tr>
<tr>
<Data>
<ColorName>Example Text</ColorName>
</Data>
<Data>
<Color
key="placeholder"
name="placeholder"
hex={theme.placeholder}
/>
</Data>
<Data />
<Data />
<Data />
<Data>Input placeholder text.</Data>
</tr>
<tr>
<Data>
<ColorName>Red fill / red text</ColorName>
</Data>
<Data>
<Color key="red" name="red" hex={theme.red} />
</Data>
<Data />
<Data />
<Data />
<Data>Errors</Data>
</tr>
<tr>
<Data>
<ColorName>Red border</ColorName>
</Data>
<Data>
<Color key="redDark" name="redDark" hex={theme.redDark} />
</Data>
<Data />
<Data />
<Data />
<Data>Complements red fill.</Data>
</tr>
<tr>
<Data>
<ColorName>Green fill / green text</ColorName>
</Data>
<Data>
<Color key="redDark" name="greenDark" hex={theme.greenDark} />
</Data>
<Data />
<Data />
<Data />
<Data>Confirmations and instructional components.</Data>
</tr>
<tr>
<Data>
<ColorName>Green border</ColorName>
</Data>
<Data>
<Color key="green" name="green" hex={theme.green} />
</Data>
<Data />
<Data />
<Data />
<Data>Confirmations and instructional components.</Data>
</tr>
<tr>
<Data>
<ColorName>Orange Fill</ColorName>
</Data>
<Data>
<Color key="orange" name="orange" hex={theme.orange} />
</Data>
<Data />
<Data />
<Data />
<Data>To notify users of things that require their attention.</Data>
</tr>
<tr>
<Data>
<ColorName>Orange border / orange text</ColorName>
</Data>
<Data>
<Color key="orangeDark" name="orangeDark" hex={theme.orangeDark} />
</Data>
<Data />
<Data />
<Data />
<Data>Complements orange fill.</Data>
</tr>
</tbody>
</Table>
);
};
export default () => (
<Table>
<thead>
<tr>
<th />
<th>Default</th>
<th>Hover</th>
<th>Click</th>
<th>Disabled</th>
<th>Usage</th>
</tr>
</thead>
<tbody>
<tr>
<Data>
<ColorName>Blue fill / blue text</ColorName>
</Data>
<Data>
<Color key="primary" name="primary" hex={theme.primary} />
</Data>
<Data>
<Color
key="primaryHover"
name="primaryHover"
hex={theme.primaryHover}
/>
</Data>
<Data>
<Color
key="primaryActive"
name="primaryActive"
hex={theme.primaryActive}
/>
</Data>
<Data>
<Color key="disabled" name="disabled" hex={theme.disabled} />
</Data>
<Data>
Fill for primary buttons, text anchors (including interactive parts of
the breadcrumb) and other UI components, whose priority or prominence
is emphasized with color.
</Data>
</tr>
<tr>
<Data>
<ColorName>Blue border</ColorName>
</Data>
<Data>
<Color
key="primaryActive"
name="primaryActive"
hex={theme.primaryActive}
/>
</Data>
<Data />
<Data />
<Data>
<Color key="disabled" name="disabled" hex={theme.disabled} />
</Data>
<Data>
Borders of primary buttons and other UI components, whose priority or
prominence is emphasized with color.
</Data>
</tr>
<tr>
<Data>
<ColorName>White fill</ColorName>
</Data>
<Data>
<Color key="white" name="white" hex={theme.white} />
</Data>
<Data>
<Color key="whiteHover" name="whiteHover" hex={theme.whiteHover} />
</Data>
<Data>
<Color key="whiteActive" name="whiteActive" hex={theme.whiteActive} />
</Data>
<Data>
<Color key="disabled" name="disabled" hex={theme.disabled} />
</Data>
<Data>
Fill for secondary buttons, inputs, dropdown menus, tables, service
and instance cards and other components that need to be distinguished
from the overall layout.
</Data>
</tr>
<tr>
<Data>
<ColorName>Grey border</ColorName>
</Data>
<Data>
<Color key="grey" name="grey" hex={theme.grey} />
</Data>
<Data />
<Data />
<Data />
<Data>Borders of white or grey UI components and dividers.</Data>
</tr>
<tr>
<Data>
<ColorName>Charcoal fill</ColorName>
</Data>
<Data>
<Color key="secondary" name="secondary" hex={theme.secondary} />
</Data>
<Data>
<Color
key="secondaryHover"
name="secondaryHover"
hex={theme.secondaryHover}
/>
</Data>
<Data>
<Color
key="secondaryActive"
name="secondaryActive"
hex={theme.secondaryActive}
/>
</Data>
<Data>
<Color key="disabled" name="disabled" hex={theme.disabled} />
</Data>
<Data>Fill for topology components.</Data>
</tr>
<tr>
<Data>
<ColorName>Charcoal border</ColorName>
</Data>
<Data>
<Color
key="secondaryActive"
name="secondaryActive"
hex={theme.secondaryActive}
/>
</Data>
<Data />
<Data />
<Data>
<Color
key="textDisabled"
name="textDisabled"
hex={theme.textDisabled}
/>
</Data>
<Data>Border for topology components.</Data>
</tr>
<tr>
<Data>
<ColorName>Text</ColorName>
</Data>
<Data>
<Color key="text" name="text" hex={theme.text} />
</Data>
<Data />
<Data />
<Data>
<Color
key="textDisabled"
name="textDisabled"
hex={theme.textDisabled}
/>
</Data>
<Data>Any text.</Data>
</tr>
<tr>
<Data>
<ColorName>Example Text</ColorName>
</Data>
<Data>
<Color key="placeholder" name="placeholder" hex={theme.placeholder} />
</Data>
<Data />
<Data />
<Data />
<Data>Input placeholder text.</Data>
</tr>
<tr>
<Data>
<ColorName>Red fill / red text</ColorName>
</Data>
<Data>
<Color key="red" name="red" hex={theme.red} />
</Data>
<Data />
<Data />
<Data />
<Data>Errors</Data>
</tr>
<tr>
<Data>
<ColorName>Red border</ColorName>
</Data>
<Data>
<Color key="redDark" name="redDark" hex={theme.redDark} />
</Data>
<Data />
<Data />
<Data />
<Data>Complements red fill.</Data>
</tr>
<tr>
<Data>
<ColorName>Green fill / green text</ColorName>
</Data>
<Data>
<Color key="redDark" name="greenDark" hex={theme.greenDark} />
</Data>
<Data />
<Data />
<Data />
<Data>Confirmations and instructional components.</Data>
</tr>
<tr>
<Data>
<ColorName>Green border</ColorName>
</Data>
<Data>
<Color key="green" name="green" hex={theme.green} />
</Data>
<Data />
<Data />
<Data />
<Data>Confirmations and instructional components.</Data>
</tr>
<tr>
<Data>
<ColorName>Orange Fill</ColorName>
</Data>
<Data>
<Color key="orange" name="orange" hex={theme.orange} />
</Data>
<Data />
<Data />
<Data />
<Data>To notify users of things that require their attention.</Data>
</tr>
<tr>
<Data>
<ColorName>Orange border / orange text</ColorName>
</Data>
<Data>
<Color key="orangeDark" name="orangeDark" hex={theme.orangeDark} />
</Data>
<Data />
<Data />
<Data />
<Data>Complements orange fill.</Data>
</tr>
</tbody>
</Table>
);

View File

@ -123,5 +123,6 @@ export default {
inputWarning,
topologyBackground,
brandBackground,
transition
transition,
transparent: 'transparent'
};

View File

@ -0,0 +1,75 @@
```jsx
const { default: Tooltip, Container, Target } = require('./');
const { Row, Col } = require('react-styled-flexboxgrid');
<Row center="xs" between="xs">
<Col xs={2}>
<Container>
<Target>Hello</Target>
<Tooltip placement="top">
<code>top</code>
</Tooltip>
</Container>
</Col>
<Col xs={2}>
<Container>
<Target>Hello</Target>
<Tooltip placement="right">
<code>right</code>
</Tooltip>
</Container>
</Col>
<Col xs={2}>
<Container>
<Target>Hello</Target>
<Tooltip placement="bottom">
<code>bottom</code>
</Tooltip>
</Container>
</Col>
<Col xs={2}>
<Container>
<Target>Hello</Target>
<Tooltip placement="left">
<code>left</code>
</Tooltip>
</Container>
</Col>
</Row>;
```
#### Tooltip > hover
```jsx
const { default: Tooltip, Container, Target } = require('./');
const { Row, Col } = require('react-styled-flexboxgrid');
<Row center="xs" between="xs">
<Col xs={2}>
<Container hoverable>
<Target>Hover here</Target>
<Tooltip placement="top">
<code>top</code>
</Tooltip>
</Container>
</Col>
</Row>;
```
#### Tooltip > click
```jsx
const { default: Tooltip, Container, Target } = require('./');
const { Row, Col } = require('react-styled-flexboxgrid');
<Row center="xs" between="xs">
<Col xs={2}>
<Container clickable>
<Target>Click here</Target>
<Tooltip placement="top">
<code>top</code>
</Tooltip>
</Container>
</Col>
</Row>;
```

View File

@ -0,0 +1,95 @@
import { findDOMNode } from 'react-dom';
import React, { Component } from 'react';
import { Manager } from 'react-popper';
import PropTypes from 'prop-types';
import outy from 'outy';
export default class Container extends Component {
static childContextTypes = {
ttpContMangr: PropTypes.object.isRequired
};
getChildContext = () => ({
ttpContMangr: {
setRef: this._ref,
handleTargetClick: this._handleTargetClick,
handleTargetMouseEnter: this._handleTargetMouseEnter,
handleTargetMouseLeave: this._handleTargetMouseLeave,
isOpen: this._isOpen,
hoverable: () => Boolean(this.props.hoverable),
clickable: () => Boolean(this.props.clickable)
}
});
_refs = {};
state = {
isOpen: false
};
_ref = name => c =>
Object.assign(this._refs, {
[name]: findDOMNode(c)
});
componentDidMount = () => {
this._setOusideTap();
};
componentDidUpdate = (lastProps, { isOpen: wasOpen }) => {
const { isOpen } = this.state;
if (wasOpen !== isOpen) {
setTimeout(() => this._setOusideTap());
}
};
componentWillUnmount = () => this._removeOutsideTap();
_setOusideTap = () => {
const elements = Object.values(this._refs);
this._removeOutsideTap();
if (!elements.length) {
return;
}
this.outsideTap = outy(
elements,
['click', 'touchstart'],
this._handleOutsideTap
);
};
_handleOutsideTap = ev =>
this.state.isOpen && this.setState({ isOpen: false });
_handleTargetClick = ev => {
ev.preventDefault();
ev.stopPropagation();
return this.setState({ isOpen: !this.state.isOpen });
};
_handleTargetMouseEnter = () =>
!this.state.isOpen && this.setState({ isOpen: true });
_handleTargetMouseLeave = () =>
this.state.isOpen && this.setState({ isOpen: false });
_removeOutsideTap = () => this.outsideTap && this.outsideTap.remove();
_isOpen = () =>
!this.props.hoverable && !this.props.clickable ? true : this.state.isOpen;
open = () => this.setState({ isOpen: true });
close = () => this.setState({ isOpen: false });
render = () => {
const { children } = this.props;
return <Manager tag={false}>{children}</Manager>;
};
}

View File

@ -0,0 +1,68 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import styled from 'styled-components';
import { Popper as BasePopper, Arrow } from 'react-popper';
import rndId from 'rnd-id';
import remcalc from 'remcalc';
import style from './style';
const arrowClassName = rndId();
const Popper = styled(BasePopper)`
box-shadow: 0 0 ${remcalc(2)} rgba(0, 0, 0, 0.5);
padding: ${remcalc(13)} ${remcalc(18)};
${style({
background: 'secondaryHover',
color: 'white',
border: 'transparent',
arrow: arrowClassName
})};
`;
export default class Tooltip extends Component {
static propTypes = {
// List of accepted placements to use as values of the `placement` option. Variations are interpreted easily if you think of them as the left to right written languages. Horizontally (`top` and `bottom`), `start` is left and `end` is right. Vertically (`left` and `right`), `start` is top and `end` is bottom.
placement: PropTypes.oneOf([
'auto-start',
'auto',
'auto-end',
'top-start',
'top',
'top-end',
'right-start',
'right',
'right-end',
'bottom-end',
'bottom',
'bottom-start',
'left-end',
'left',
'left-start'
])
};
static contextTypes = {
ttpContMangr: PropTypes.object.isRequired
};
render = () => {
const { children, placement = 'auto', ...rest } = this.props;
const { isOpen, setRef } = this.context.ttpContMangr;
return (
isOpen() && (
<Popper innerRef={setRef('popper')} placement={placement} {...rest}>
{children}
<Arrow>
<span className={arrowClassName} />
</Arrow>
</Popper>
)
);
};
}
export { default as Container } from './container';
export { default as Target } from './target';

View File

@ -0,0 +1,147 @@
import { css } from 'styled-components';
import remcalc from 'remcalc';
export default ({ background, color, border, arrow }) => css`
background: ${props => props.theme[background]};
color: ${props => props.theme[color]};
border-radius: ${remcalc(4)};
& .${arrow} {
width: 0;
height: 0;
border-style: solid;
position: absolute;
margin: ${remcalc(6)};
}
/* top */
&[data-placement^='top'] .${arrow} {
border-width: ${remcalc(6)} ${remcalc(6)} 0 ${remcalc(6)};
border-color: ${props => props.theme[background]} transparent transparent
transparent;
bottom: ${remcalc(-6)};
margin-top: 0;
margin-bottom: 0;
&:after {
border-width: ${remcalc(7)} ${remcalc(7)} 0 ${remcalc(7)};
border-color: ${props => props.theme[background]} transparent transparent
transparent;
bottom: ${remcalc(-6)};
margin-top: 0;
margin-bottom: 0;
}
}
/* bottom */
&[data-placement^='bottom'] .${arrow} {
border-width: 0 ${remcalc(6)} ${remcalc(6)} ${remcalc(6)};
border-color: transparent transparent ${props => props.theme[background]}
transparent;
top: ${remcalc(-6)};
margin-top: 0;
margin-bottom: 0;
}
/* top & bottom */
&[data-placement^='top'],
&[data-placement^='bottom'] {
margin-bottom: ${remcalc(6)};
}
&[data-placement='top-start']
.${arrow},
&[data-placement='bottom-start']
.${arrow} {
left: ${remcalc(6)};
}
&[data-placement='top-end']
.${arrow},
&[data-placement='bottom-end']
.${arrow} {
right: ${remcalc(6)};
}
&[data-placement='top'] .${arrow}, &[data-placement='bottom'] .${arrow} {
left: calc(50% - ${remcalc(11)});
}
/* left */
&[data-placement^='left'] {
margin-right: ${remcalc(6)};
}
&[data-placement^='left'] .${arrow} {
border-width: ${remcalc(6)} 0 ${remcalc(6)} ${remcalc(6)};
border-color: transparent transparent transparent
${props => props.theme[background]};
right: ${remcalc(-12)};
margin-top: 0;
margin-bottom: 0;
&:after {
content: '';
display: block;
position: absolute;
border-width: ${remcalc(7)} 0 ${remcalc(7)} ${remcalc(7)};
border-color: transparent transparent transparent
${props => props.theme[border]};
border-style: solid;
left: ${remcalc(-2)};
width: 0;
height: 0;
top: ${remcalc(-7)};
z-index: -1;
}
}
/* right */
&[data-placement^='right'] {
margin-left: ${remcalc(6)};
}
&[data-placement^='right'] .${arrow} {
border-width: ${remcalc(6)} ${remcalc(6)} ${remcalc(6)} 0;
border-color: transparent ${props => props.theme[background]} transparent
transparent;
left: ${remcalc(-12)};
margin-top: 0;
margin-bottom: 0;
&:after {
content: '';
display: block;
position: absolute;
border-width: ${remcalc(7)} ${remcalc(7)} ${remcalc(7)} 0;
border-color: transparent ${props => props.theme[border]} transparent
transparent;
border-style: solid;
left: ${remcalc(-2)};
width: 0;
height: 0;
top: ${remcalc(-7)};
z-index: -1;
}
}
/* left & right */
&[data-placement='left-start']
.${arrow},
&[data-placement='right-start']
.${arrow} {
top: ${remcalc(6)};
}
&[data-placement='left-end']
.${arrow},
&[data-placement='right-end']
.${arrow} {
bottom: ${remcalc(6)};
}
&[data-placement='left'] .${arrow}, &[data-placement='right'] .${arrow} {
top: calc(50% - ${remcalc(6)});
}
`;

View File

@ -0,0 +1,47 @@
import React, { Component } from 'react';
import { Target as BaseTarget } from 'react-popper';
import PropTypes from 'prop-types';
export default class Target extends Component {
static contextTypes = {
ttpContMangr: PropTypes.object.isRequired
};
render = () => {
const { children, ...rest } = this.props;
const {
setRef,
handleTargetClick,
handleTargetMouseEnter,
handleTargetMouseLeave,
hoverable,
clickable
} = this.context.ttpContMangr;
const onMouseEnter =
hoverable() && handleTargetMouseEnter
? handleTargetMouseEnter
: undefined;
const onMouseLeave =
hoverable() && handleTargetMouseLeave
? handleTargetMouseLeave
: undefined;
const onClick =
clickable() && handleTargetClick ? handleTargetClick : undefined;
return (
<BaseTarget
innerRef={setRef('target')}
onClick={onClick}
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
{...rest}
>
{children}
</BaseTarget>
);
};
}

View File

@ -106,7 +106,9 @@ module.exports = {
'src/form/radio.js',
'src/section-list/index.js',
'src/form/select.js',
'src/form/toggle.js'
'src/form/toggle.js',
'src/tooltip/index.js',
'src/popover/index.js'
]
}
],

View File

@ -6,8 +6,8 @@
## Table of Contents
- [Usage](#usage)
- [License](#license)
* [Usage](#usage)
* [License](#license)
## Usage

View File

@ -18,7 +18,10 @@ const Title = styled(CardTitle)`
margin-bottom: ${remcalc(8)};
`;
const SubTitle = styled(Title)`font-weight: normal;`;
const SubTitle = styled(Title)`
/* trick prettier */
font-weight: normal;
`;
const CardStyled = styled(Card)`
flex-direction: column;

310
yarn.lock
View File

@ -246,8 +246,8 @@ ajv@^4.9.1:
json-stable-stringify "^1.0.1"
ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3:
version "5.2.3"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2"
version "5.2.5"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.5.tgz#b637234d3e2675eb5f79fc652242a853a48cb49f"
dependencies:
co "^4.6.0"
fast-deep-equal "^1.0.0"
@ -378,13 +378,6 @@ apollo-link-core@^0.5.0:
graphql-tag "^2.4.2"
zen-observable-ts "^0.4.4"
apollo-link@^0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-0.8.0.tgz#efce6b35ae9ea5f6966a87054ba4893a5b6d960a"
dependencies:
apollo-utilities "^0.2.0-beta.0"
zen-observable "^0.6.0"
apollo-server-core@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-1.1.7.tgz#4d7df340a44e949e98ab6ca405f54e862ef5416e"
@ -409,9 +402,9 @@ apollo-tracing@^0.0.x:
dependencies:
graphql-tools "^2.2.0"
apollo-utilities@^0.2.0-beta.0:
version "0.2.0-rc.0"
resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-0.2.0-rc.0.tgz#5ac93a839c5688e8f655dc7d5789a5d878f4351f"
apollo-utilities@^0.1.1-0:
version "0.1.1-1"
resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-0.1.1-1.tgz#a637c2a5b49e06f20dd9adf7c55ec1ff69a97592"
apollo@^0.2.2:
version "0.2.2"
@ -767,11 +760,11 @@ autoprefixer@^6.3.1:
postcss-value-parser "^3.2.3"
autoprefixer@^7.1.2:
version "7.1.5"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.5.tgz#d65d14b83c7cd1dd7bc801daa00557addf5a06b2"
version "7.1.6"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7"
dependencies:
browserslist "^2.5.0"
caniuse-lite "^1.0.30000744"
browserslist "^2.5.1"
caniuse-lite "^1.0.30000748"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^6.0.13"
@ -2229,7 +2222,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
caniuse-db "^1.0.30000639"
electron-to-chromium "^1.2.7"
browserslist@^2.1.2, browserslist@^2.1.5, browserslist@^2.5.0:
browserslist@^2.1.2, browserslist@^2.1.5, browserslist@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.5.1.tgz#68e4bc536bbcc6086d62843a2ffccea8396821c6"
dependencies:
@ -2318,6 +2311,24 @@ bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
cacache@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.0.tgz#3bba88bf62b0773fd9a691605f60c9d3c595e853"
dependencies:
bluebird "^3.5.0"
chownr "^1.0.1"
glob "^7.1.2"
graceful-fs "^4.1.11"
lru-cache "^4.1.1"
mississippi "^1.3.0"
mkdirp "^0.5.1"
move-concurrently "^1.0.1"
promise-inflight "^1.0.1"
rimraf "^2.6.1"
ssri "^5.0.0"
unique-filename "^1.1.0"
y18n "^3.2.1"
cacache@^9.2.9:
version "9.3.0"
resolved "https://registry.yarnpkg.com/cacache/-/cacache-9.3.0.tgz#9cd58f2dd0b8c8cacf685b7067b416d6d3cf9db1"
@ -2407,12 +2418,12 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000748"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000748.tgz#785d9edfcd645bf795c6ff3ced33c45d580c48a0"
version "1.0.30000749"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000749.tgz#556773aa3aa704f581d748fa63b46ca087aac67d"
caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000744:
version "1.0.30000748"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000748.tgz#44c8d6da52ad65a5d7b9dca4efebd0bdd982ba09"
caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000744, caniuse-lite@^1.0.30000748:
version "1.0.30000749"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000749.tgz#2ff382865aead8cca35dacfbab04f58effa4c01c"
capture-stack-trace@^1.0.0:
version "1.0.0"
@ -2474,8 +2485,8 @@ chalk@2.1.0:
supports-color "^4.0.0"
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.2.0.tgz#477b3bf2f9b8fd5ca9e429747e37f724ee7af240"
version "2.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
dependencies:
ansi-styles "^3.1.0"
escape-string-regexp "^1.0.5"
@ -2871,6 +2882,14 @@ common-sequence@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/common-sequence/-/common-sequence-1.0.2.tgz#30e07f3f8f6f7f9b3dee854f20b2d39eee086de8"
common-shake@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/common-shake/-/common-shake-2.0.2.tgz#2c016fa2aa36c6461afdde5cb7605c77ccbb855f"
dependencies:
acorn "^5.1.1"
debug "^2.6.8"
escope "^3.6.0"
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@ -2883,10 +2902,10 @@ compare-func@^1.3.1:
dot-prop "^3.0.0"
compressible@~2.0.11:
version "2.0.11"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.11.tgz#16718a75de283ed8e604041625a2064586797d8a"
version "2.0.12"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66"
dependencies:
mime-db ">= 1.29.0 < 2"
mime-db ">= 1.30.0 < 2"
compression@^1.5.2, compression@^1.6.2:
version "1.7.1"
@ -2964,8 +2983,8 @@ content-disposition@0.5.2:
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
content-type-parser@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94"
version "1.0.2"
resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7"
content-type@^1.0.2, content-type@~1.0.2, content-type@~1.0.4:
version "1.0.4"
@ -3168,8 +3187,8 @@ copy-to-clipboard@^3:
toggle-selection "^1.0.3"
copy-webpack-plugin@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.1.1.tgz#53ae69e04955ebfa9fda411f54cbb968531d71fd"
version "4.2.0"
resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.2.0.tgz#252bb94597f96399d23d7fad355f8d3a661ac096"
dependencies:
bluebird "^3.5.1"
fs-extra "^4.0.2"
@ -3565,13 +3584,13 @@ dateformat@^1.0.11, dateformat@^1.0.12:
get-stdin "^4.0.1"
meow "^3.3.0"
debug@2, debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.0, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8:
debug@2, debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
ms "2.0.0"
debug@^3.0.0, debug@^3.0.1:
debug@^3.0.0, debug@^3.0.1, debug@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
@ -3903,6 +3922,14 @@ duplexify@^3.1.2, duplexify@^3.4.2:
readable-stream "^2.0.0"
stream-shift "^1.0.0"
duplicate-package-checker-webpack-plugin@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/duplicate-package-checker-webpack-plugin/-/duplicate-package-checker-webpack-plugin-1.2.6.tgz#1366e549facc29cb946bfc27a120238b1c6cd481"
dependencies:
chalk "^1.1.3"
find-root "^1.0.0"
lodash "^4.17.4"
ecc-jsbn@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
@ -3923,8 +3950,8 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.24:
version "1.3.26"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.26.tgz#996427294861a74d9c7c82b9260ea301e8c02d66"
version "1.3.27"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d"
elliptic@^6.0.0:
version "6.4.0"
@ -4131,10 +4158,14 @@ escope@^3.6.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
eslint-config-joyent-portal@3.1.0, eslint-config-joyent-portal@^3.0.0:
eslint-config-joyent-portal@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-joyent-portal/-/eslint-config-joyent-portal-3.1.0.tgz#7a77270d118627e59461db29d35639cf146d1dfc"
eslint-config-joyent-portal@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/eslint-config-joyent-portal/-/eslint-config-joyent-portal-3.2.0.tgz#20de54035938ea6918160393dc4b387e2792d57f"
eslint-config-prettier@^2.3.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.6.0.tgz#f21db0ebb438ad678fb98946097c4bb198befccc"
@ -4869,6 +4900,10 @@ find-root@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.0.0.tgz#962ff211aab25c6520feeeb8d6287f8f6e95807a"
find-root@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
find-up@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@ -5470,8 +5505,8 @@ graphcool-tmp-ui@^0.0.11:
react-modal "^1.6.5"
graphiql@^0.11.2:
version "0.11.5"
resolved "https://registry.yarnpkg.com/graphiql/-/graphiql-0.11.5.tgz#0924c934d035c69eddfbbae30d3e59e46e29afc9"
version "0.11.6"
resolved "https://registry.yarnpkg.com/graphiql/-/graphiql-0.11.6.tgz#5d24d3609c9dd7c8a24306f76d8402899a9dc5e0"
dependencies:
codemirror "^5.26.0"
codemirror-graphql "^0.6.11"
@ -5545,8 +5580,8 @@ graphql-language-service-utils@0.0.17:
graphql-language-service-types "0.0.21"
graphql-playground@^1.0.8:
version "1.0.22"
resolved "https://registry.yarnpkg.com/graphql-playground/-/graphql-playground-1.0.22.tgz#376f997dea0dd4a31f9699482a3f8800940c46b9"
version "1.0.34"
resolved "https://registry.yarnpkg.com/graphql-playground/-/graphql-playground-1.0.34.tgz#ecd6e7d8c79c42885e28043f9ebb930d3e58392f"
dependencies:
calculate-size "^1.1.1"
classnames "^2.2.5"
@ -5595,15 +5630,15 @@ graphql-subscriptions@^0.4.4:
es6-promise "^4.0.5"
iterall "^1.1.1"
graphql-tag@^2.0.0, graphql-tag@^2.4.2:
graphql-tag@^2.0.0, graphql-tag@^2.4.2, graphql-tag@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.5.0.tgz#b43bfd8b5babcd2c205ad680c03e98b238934e0f"
graphql-tools@^2.2.0, graphql-tools@^2.3.0:
version "2.5.1"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-2.5.1.tgz#542c48d4f9a532e09280ae216084813ea7ba4b18"
version "2.6.1"
resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-2.6.1.tgz#9f6d1600951a05b18b83c52986c42eee4fd3cb1b"
dependencies:
apollo-link "^0.8.0"
apollo-utilities "^0.1.1-0"
deprecated-decorator "^0.1.6"
uuid "^3.1.0"
@ -5874,8 +5909,8 @@ html-comment-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
html-encoding-sniffer@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da"
version "1.0.2"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
dependencies:
whatwg-encoding "^1.0.1"
@ -6056,8 +6091,8 @@ ignore-by-default@^1.0.1:
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
ignore@^3.3.3:
version "3.3.5"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6"
version "3.3.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.6.tgz#b6f3196b38ed92f0c86e52f6f79b7fc4c8266c8d"
image-ssim@^0.2.0:
version "0.2.0"
@ -6073,6 +6108,13 @@ import-lazy@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
import-local@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8"
dependencies:
pkg-dir "^2.0.0"
resolve-cwd "^2.0.0"
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@ -6606,17 +6648,17 @@ isstream@~0.1.2:
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
istanbul-api@^1.1.1:
version "1.1.14"
resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.14.tgz#25bc5701f7c680c0ffff913de46e3619a3a6e680"
version "1.2.1"
resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620"
dependencies:
async "^2.1.4"
fileset "^2.0.2"
istanbul-lib-coverage "^1.1.1"
istanbul-lib-hook "^1.0.7"
istanbul-lib-instrument "^1.8.0"
istanbul-lib-report "^1.1.1"
istanbul-lib-source-maps "^1.2.1"
istanbul-reports "^1.1.2"
istanbul-lib-hook "^1.1.0"
istanbul-lib-instrument "^1.9.1"
istanbul-lib-report "^1.1.2"
istanbul-lib-source-maps "^1.2.2"
istanbul-reports "^1.1.3"
js-yaml "^3.7.0"
mkdirp "^0.5.1"
once "^1.4.0"
@ -6625,15 +6667,15 @@ istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
istanbul-lib-hook@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc"
istanbul-lib-hook@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b"
dependencies:
append-transform "^0.4.0"
istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz#66f6c9421cc9ec4704f76f2db084ba9078a2b532"
istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
dependencies:
babel-generator "^6.18.0"
babel-template "^6.16.0"
@ -6643,28 +6685,28 @@ istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-ins
istanbul-lib-coverage "^1.1.1"
semver "^5.3.0"
istanbul-lib-report@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9"
istanbul-lib-report@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425"
dependencies:
istanbul-lib-coverage "^1.1.1"
mkdirp "^0.5.1"
path-parse "^1.0.5"
supports-color "^3.1.2"
istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c"
istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c"
dependencies:
debug "^2.6.3"
debug "^3.1.0"
istanbul-lib-coverage "^1.1.1"
mkdirp "^0.5.1"
rimraf "^2.6.1"
source-map "^0.5.3"
istanbul-reports@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.2.tgz#0fb2e3f6aa9922bd3ce45d05d8ab4d5e8e07bd4f"
istanbul-reports@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10"
dependencies:
handlebars "^4.0.3"
@ -7126,8 +7168,8 @@ jest-snapshot@^21.2.1:
pretty-format "^21.2.1"
jest-styled-components@^4.7.0, jest-styled-components@^4.7.1:
version "4.7.1"
resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-4.7.1.tgz#589cd3caafcfca359055590d889f073003277531"
version "4.9.0"
resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-4.9.0.tgz#459ccb37d0f5720007c8dba358bfff93c8cf4aed"
dependencies:
css "^2.2.1"
@ -7248,19 +7290,21 @@ joyent-manifest-editor@^1.4.0:
react-codemirror "^1.0.0"
joyent-react-scripts@^2.2.1, joyent-react-scripts@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/joyent-react-scripts/-/joyent-react-scripts-2.3.0.tgz#9e48f93d67284b8149dc73b35ccdfc11d27131d9"
version "2.6.0"
resolved "https://registry.yarnpkg.com/joyent-react-scripts/-/joyent-react-scripts-2.6.0.tgz#15d183729f1b762ac6a8da6442de5ccc88e84909"
dependencies:
apr-for-each "^1.0.6"
apr-main "^1.0.7"
babel-minify-webpack-plugin "^0.2.0"
duplicate-package-checker-webpack-plugin "^1.2.6"
execa "^0.8.0"
graphql "^0.11.7"
graphql-tag "^2.4.2"
graphql-tag "^2.5.0"
lodash-webpack-plugin "^0.11.4"
lodash.isstring "^4.0.1"
mz "^2.7.0"
react-scripts "^1.0.14"
webpack-common-shake "^1.5.3"
jpeg-js@0.1.2, jpeg-js@^0.1.2:
version "0.1.2"
@ -7959,10 +8003,10 @@ magic-string@^0.14.0:
vlq "^0.2.1"
make-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978"
version "1.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
dependencies:
pify "^2.3.0"
pify "^3.0.0"
make-error@^1.1.1:
version "1.3.0"
@ -8140,7 +8184,7 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
mime-db@1.x.x, "mime-db@>= 1.29.0 < 2", mime-db@~1.30.0:
mime-db@1.x.x, "mime-db@>= 1.30.0 < 2", mime-db@~1.30.0:
version "1.30.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
@ -8793,6 +8837,10 @@ output-file-sync@^1.1.2:
mkdirp "^0.5.1"
object-assign "^4.1.0"
outy@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/outy/-/outy-0.1.2.tgz#598d395e43f92e52d98aadff23b72a3e7128b572"
p-cancelable@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa"
@ -8975,8 +9023,8 @@ path-to-regexp@^1.0.1, path-to-regexp@^1.7.0:
isarray "0.0.1"
path-to-regexp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.0.0.tgz#b77a8168c2e78bc31f3d312d71b1ace97df23870"
version "2.1.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.1.0.tgz#7e30f9f5b134bd6a28ffc2e3ef1e47075ac5259b"
path-type@3.0.0:
version "3.0.0"
@ -9101,6 +9149,10 @@ podium@^1.3.0:
items "2.x.x"
joi "10.x.x"
popper.js@^1.12.5:
version "1.12.6"
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.6.tgz#91e12a97b07815258b76915d64044e8ac053d426"
portfinder@^1.0.13, portfinder@^1.0.9:
version "1.0.13"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
@ -9984,6 +10036,13 @@ react-modal@2.4.1, react-modal@^1.6.5, react-modal@^2.3.2:
exenv "^1.2.0"
prop-types "^15.5.10"
react-popper@^0.7.3:
version "0.7.4"
resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.7.4.tgz#8649d539837e7c6f47bc9b24c9cf57a404e199a1"
dependencies:
popper.js "^1.12.5"
prop-types "^15.5.10"
react-redux@^5.0.5, react-redux@^5.0.6:
version "5.0.6"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946"
@ -9995,9 +10054,9 @@ react-redux@^5.0.5, react-redux@^5.0.6:
loose-envify "^1.1.0"
prop-types "^15.5.10"
react-responsive@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-3.0.0.tgz#26e895dbdf748d4473c76cf46d29cb9d824e02ec"
react-responsive@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-2.0.0.tgz#4019fd493b6619c12cf0b06911ed543c2d94e504"
dependencies:
hyphenate-style-name "^1.0.0"
matchmediaquery "^0.2.1"
@ -10076,8 +10135,8 @@ react-side-effect@^1.1.0:
shallowequal "^1.0.1"
react-style-proptype@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.0.0.tgz#89e0b646f266c656abb0f0dd8202dbd5036c31e6"
version "3.1.0"
resolved "https://registry.yarnpkg.com/react-style-proptype/-/react-style-proptype-3.1.0.tgz#c8912fc13460f5b0c1ec1114c729d535b52b8073"
dependencies:
prop-types "^15.5.4"
@ -10765,6 +10824,12 @@ reselect@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147"
resolve-cwd@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
dependencies:
resolve-from "^3.0.0"
resolve-dir@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
@ -11588,6 +11653,12 @@ ssri@^4.1.6:
dependencies:
safe-buffer "^5.1.0"
ssri@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.0.0.tgz#13c19390b606c821f2a10d02b351c1729b94d8cf"
dependencies:
safe-buffer "^5.1.0"
staged-git-files@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35"
@ -11607,7 +11678,11 @@ statehood@^5.0.3:
items "2.x.x"
joi "10.x.x"
"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
"statuses@>= 1.3.1 < 2":
version "1.4.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
statuses@~1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
@ -11919,8 +11994,8 @@ stylelint@^8.2.0:
table "^4.0.1"
stylis@^3.2.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.3.2.tgz#95ef285836e98243f8b8f64a9a72706ea6c893ea"
version "3.4.0"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.0.tgz#55c6530ebceeca5976d54fb4adc67578afee828d"
subscriptions-transport-ws@^0.8.1:
version "0.8.3"
@ -12220,10 +12295,6 @@ tiny-emitter@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c"
tinycolor2@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
title-case@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa"
@ -12460,16 +12531,16 @@ ua-parser-js@^0.7.9:
version "0.7.17"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
uglify-es@^3.0.24:
version "3.1.3"
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.1.3.tgz#a21eeb149cb120a1f8302563689e19496550780b"
uglify-es@^3.0.24, uglify-es@^3.1.3:
version "3.1.5"
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.1.5.tgz#63bae0fd4f9feeda417fee7c0ff685a673819683"
dependencies:
commander "~2.11.0"
source-map "~0.5.1"
source-map "~0.6.1"
uglify-js@3.1.x, uglify-js@^3.0.13:
version "3.1.4"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.4.tgz#8e1efa1244b207588e525c9c1835a33458b90aee"
version "3.1.5"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.5.tgz#4c1a6d53b2fe77e4710dd94631853effd3ff5143"
dependencies:
commander "~2.11.0"
source-map "~0.6.1"
@ -12487,7 +12558,7 @@ uglify-to-browserify@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
uglifyjs-webpack-plugin@1.0.0-beta.3, uglifyjs-webpack-plugin@^1.0.0-beta.3:
uglifyjs-webpack-plugin@1.0.0-beta.3:
version "1.0.0-beta.3"
resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.0.0-beta.3.tgz#0715c2ee70bd927685c7cbccda678c6ceab6fc0f"
dependencies:
@ -12507,6 +12578,18 @@ uglifyjs-webpack-plugin@^0.4.6:
uglify-js "^2.8.29"
webpack-sources "^1.0.1"
uglifyjs-webpack-plugin@^1.0.0-beta.3:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.0.1.tgz#d324da7144d321202df0968c09f6f8e057d5cdc2"
dependencies:
cacache "^10.0.0"
find-cache-dir "^1.0.0"
schema-utils "^0.3.0"
source-map "^0.5.6"
uglify-es "^3.1.3"
webpack-sources "^1.0.1"
worker-farm "^1.4.1"
uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
@ -12968,6 +13051,15 @@ webidl-conversions@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
webpack-common-shake@^1.5.3:
version "1.5.3"
resolved "https://registry.yarnpkg.com/webpack-common-shake/-/webpack-common-shake-1.5.3.tgz#d239321a71a2d5128e5fb871616ce340db729bbb"
dependencies:
acorn "^5.1.1"
common-shake "^2.0.2"
webpack "^3.1.0"
webpack-sources "^1.0.1"
webpack-dev-middleware@^1.10.2, webpack-dev-middleware@^1.11.0:
version "1.12.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz#d34efefb2edda7e1d3b5dbe07289513219651709"
@ -13026,8 +13118,8 @@ webpack-dev-server@^1.16.2:
webpack-dev-middleware "^1.10.2"
webpack-dev-server@^2.8.2:
version "2.9.2"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.2.tgz#0fbab915701d25a905a60e1e784df19727da800f"
version "2.9.3"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.3.tgz#f0554e88d129e87796a6f74a016b991743ca6f81"
dependencies:
ansi-html "0.0.7"
array-includes "^3.0.3"
@ -13035,10 +13127,12 @@ webpack-dev-server@^2.8.2:
chokidar "^1.6.0"
compression "^1.5.2"
connect-history-api-fallback "^1.3.0"
debug "^3.1.0"
del "^3.0.0"
express "^4.13.3"
html-entities "^1.2.0"
http-proxy-middleware "~0.17.4"
import-local "^0.1.1"
internal-ip "1.2.0"
ip "^1.1.5"
loglevel "^1.4.1"
@ -13101,7 +13195,7 @@ webpack@3.5.1:
webpack-sources "^1.0.1"
yargs "^8.0.2"
webpack@^3.8.1:
webpack@^3.1.0, webpack@^3.8.1:
version "3.8.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83"
dependencies:
@ -13144,8 +13238,8 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.2.tgz#0e18781de629a18308ce1481650f67ffa2693a5d"
whatwg-encoding@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4"
version "1.0.2"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.2.tgz#bd68ad169c3cf55080562257714bf012e668a165"
dependencies:
iconv-lite "0.4.13"
@ -13480,7 +13574,3 @@ yn@^2.0.0:
zen-observable-ts@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.4.4.tgz#c244c71eaebef79a985ccf9895bc90307a6e9712"
zen-observable@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.6.0.tgz#8a6157ed15348d185d948cfc4a59d90a2c0f70ee"