From 98b4a713a009a671d1c438f26e93f78fff008412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Se=CC=81rgio=20Ramos?= Date: Thu, 19 Oct 2017 14:36:18 +0100 Subject: [PATCH] feat(ui-toolkit): tooltip and popover --- packages/cloudapi-gql/README.md | 26 +- packages/my-joy-beta/README.md | 4 +- packages/ui-toolkit/README.md | 6 +- packages/ui-toolkit/package.json | 6 +- packages/ui-toolkit/src/baseline/readme.md | 30 +- packages/ui-toolkit/src/boxes/index.js | 20 +- packages/ui-toolkit/src/breadcrumb/index.js | 2 - packages/ui-toolkit/src/button/index.js | 2 +- packages/ui-toolkit/src/card/usage.md | 18 +- packages/ui-toolkit/src/download.md | 4 +- packages/ui-toolkit/src/form/radio.js | 4 +- packages/ui-toolkit/src/form/select.js | 2 +- packages/ui-toolkit/src/icons/icons.js | 16 +- packages/ui-toolkit/src/popover/Readme.md | 19 + packages/ui-toolkit/src/popover/divider.js | 8 + packages/ui-toolkit/src/popover/index.js | 52 ++ packages/ui-toolkit/src/popover/item.js | 18 + packages/ui-toolkit/src/section-list/usage.md | 5 +- packages/ui-toolkit/src/styleguide/wrapper.js | 56 +- packages/ui-toolkit/src/theme/colors.js | 529 +++++++++--------- packages/ui-toolkit/src/theme/index.js | 3 +- packages/ui-toolkit/src/tooltip/Readme.md | 75 +++ packages/ui-toolkit/src/tooltip/container.js | 95 ++++ packages/ui-toolkit/src/tooltip/index.js | 68 +++ packages/ui-toolkit/src/tooltip/style.js | 147 +++++ packages/ui-toolkit/src/tooltip/target.js | 47 ++ packages/ui-toolkit/styleguide.config.js | 4 +- prototypes/create-instance/README.md | 4 +- .../src/components/empty/index.js | 5 +- yarn.lock | 310 ++++++---- 30 files changed, 1072 insertions(+), 513 deletions(-) create mode 100644 packages/ui-toolkit/src/popover/Readme.md create mode 100644 packages/ui-toolkit/src/popover/divider.js create mode 100644 packages/ui-toolkit/src/popover/index.js create mode 100644 packages/ui-toolkit/src/popover/item.js create mode 100644 packages/ui-toolkit/src/tooltip/Readme.md create mode 100644 packages/ui-toolkit/src/tooltip/container.js create mode 100644 packages/ui-toolkit/src/tooltip/index.js create mode 100644 packages/ui-toolkit/src/tooltip/style.js create mode 100644 packages/ui-toolkit/src/tooltip/target.js diff --git a/packages/cloudapi-gql/README.md b/packages/cloudapi-gql/README.md index a94fa9ae..85c89772 100644 --- a/packages/cloudapi-gql/README.md +++ b/packages/cloudapi-gql/README.md @@ -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 diff --git a/packages/my-joy-beta/README.md b/packages/my-joy-beta/README.md index 114bf321..e5458d21 100644 --- a/packages/my-joy-beta/README.md +++ b/packages/my-joy-beta/README.md @@ -5,8 +5,8 @@ ## Table of Contents -- [Usage](#usage) -- [License](#license) +* [Usage](#usage) +* [License](#license) ## Usage diff --git a/packages/ui-toolkit/README.md b/packages/ui-toolkit/README.md index 1c8f2536..370ad785 100644 --- a/packages/ui-toolkit/README.md +++ b/packages/ui-toolkit/README.md @@ -8,9 +8,9 @@ ## Table of Contents -- [Install](#install) -- [Usage](#usage) -- [License](#license) +* [Install](#install) +* [Usage](#usage) +* [License](#license) ## Install diff --git a/packages/ui-toolkit/package.json b/packages/ui-toolkit/package.json index 16083293..fb74e98f 100644 --- a/packages/ui-toolkit/package.json +++ b/packages/ui-toolkit/package.json @@ -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" diff --git a/packages/ui-toolkit/src/baseline/readme.md b/packages/ui-toolkit/src/baseline/readme.md index 5a4d0dc5..032537b8 100644 --- a/packages/ui-toolkit/src/baseline/readme.md +++ b/packages/ui-toolkit/src/baseline/readme.md @@ -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: diff --git a/packages/ui-toolkit/src/boxes/index.js b/packages/ui-toolkit/src/boxes/index.js index 7ae2a9ab..4530d597 100644 --- a/packages/ui-toolkit/src/boxes/index.js +++ b/packages/ui-toolkit/src/boxes/index.js @@ -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};` }; diff --git a/packages/ui-toolkit/src/breadcrumb/index.js b/packages/ui-toolkit/src/breadcrumb/index.js index 1d8db889..a65801d2 100644 --- a/packages/ui-toolkit/src/breadcrumb/index.js +++ b/packages/ui-toolkit/src/breadcrumb/index.js @@ -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'; diff --git a/packages/ui-toolkit/src/button/index.js b/packages/ui-toolkit/src/button/index.js index 7c5c22f3..09684aff 100644 --- a/packages/ui-toolkit/src/button/index.js +++ b/packages/ui-toolkit/src/button/index.js @@ -259,7 +259,7 @@ Button.defaultProps = { tertiary: false, small: false, loading: false, - selected: false, + selected: false }; export default Baseline(Button); diff --git a/packages/ui-toolkit/src/card/usage.md b/packages/ui-toolkit/src/card/usage.md index 72dc9329..1c2abeac 100644 --- a/packages/ui-toolkit/src/card/usage.md +++ b/packages/ui-toolkit/src/card/usage.md @@ -26,7 +26,9 @@ const { InstancesIconLight } = require('../icons'); - 4 of 4 instances + + 4 of 4 instances + @@ -63,7 +65,9 @@ const { InstancesIconLight, HealthyIcon } = require('../icons'); - 4 of 4 instances + + 4 of 4 instances + @@ -110,7 +114,9 @@ const { InstancesIconLight, HealthyIcon } = require('../icons'); - 4 of 4 instances + + 4 of 4 instances + @@ -186,7 +192,9 @@ const { InstancesIconLight, HealthyIcon } = require('../icons'); - 4 of 4 instances + + 4 of 4 instances + @@ -194,7 +202,7 @@ const { InstancesIconLight, HealthyIcon } = require('../icons'); - +


diff --git a/packages/ui-toolkit/src/download.md b/packages/ui-toolkit/src/download.md index 8571f718..1e9d8cee 100644 --- a/packages/ui-toolkit/src/download.md +++ b/packages/ui-toolkit/src/download.md @@ -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 diff --git a/packages/ui-toolkit/src/form/radio.js b/packages/ui-toolkit/src/form/radio.js index 2c3271a5..a70e5bcf 100644 --- a/packages/ui-toolkit/src/form/radio.js +++ b/packages/ui-toolkit/src/form/radio.js @@ -44,7 +44,9 @@ const RadioStyled = Baseline( /** * @example ./usage-radio.md */ -const Radio = ({ children, ...rest }) => {children}; +const Radio = ({ children, ...rest }) => ( + {children} +); export const RadioList = Baseline(Ul); export default Radio; diff --git a/packages/ui-toolkit/src/form/select.js b/packages/ui-toolkit/src/form/select.js index b97a29c3..a2efd8a7 100644 --- a/packages/ui-toolkit/src/form/select.js +++ b/packages/ui-toolkit/src/form/select.js @@ -16,7 +16,7 @@ const chevronDisabled = const SelectWrapper = styled.div` position: relative; display: inline-flex; - + ${isNot('fluid')` min-width: ${remcalc(200)}; `}; diff --git a/packages/ui-toolkit/src/icons/icons.js b/packages/ui-toolkit/src/icons/icons.js index c3c62d2e..f00f424d 100644 --- a/packages/ui-toolkit/src/icons/icons.js +++ b/packages/ui-toolkit/src/icons/icons.js @@ -73,25 +73,25 @@ const Icons = () => ( - + - + - + - + @@ -115,13 +115,13 @@ const Icons = () => ( - + - + @@ -187,13 +187,13 @@ const Icons = () => ( - + - + diff --git a/packages/ui-toolkit/src/popover/Readme.md b/packages/ui-toolkit/src/popover/Readme.md new file mode 100644 index 00000000..43447374 --- /dev/null +++ b/packages/ui-toolkit/src/popover/Readme.md @@ -0,0 +1,19 @@ +```jsx +const { default: Popover, Container, Target, Item, Divider } = require('./'); +const { Row, Col } = require('react-styled-flexboxgrid'); + + + + + Hello + + Scale + Restart + Stop + + Delete + + + +; +``` diff --git a/packages/ui-toolkit/src/popover/divider.js b/packages/ui-toolkit/src/popover/divider.js new file mode 100644 index 00000000..71cecc25 --- /dev/null +++ b/packages/ui-toolkit/src/popover/divider.js @@ -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)}; +`; diff --git a/packages/ui-toolkit/src/popover/index.js b/packages/ui-toolkit/src/popover/index.js new file mode 100644 index 00000000..58e98ad1 --- /dev/null +++ b/packages/ui-toolkit/src/popover/index.js @@ -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() && ( + + {children} + + + + + ) + ); + }; +} + +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'; diff --git a/packages/ui-toolkit/src/popover/item.js b/packages/ui-toolkit/src/popover/item.js new file mode 100644 index 00000000..101c16f3 --- /dev/null +++ b/packages/ui-toolkit/src/popover/item.js @@ -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}; + } +`; diff --git a/packages/ui-toolkit/src/section-list/usage.md b/packages/ui-toolkit/src/section-list/usage.md index fe8054fa..0c5da072 100644 --- a/packages/ui-toolkit/src/section-list/usage.md +++ b/packages/ui-toolkit/src/section-list/usage.md @@ -1,10 +1,9 @@ ``` -const SectionListItem = require('./SectionListItem').default; -const Anchor = require('./SectionListItem').Anchor; +const { default: SectionListItem, Anchor } = require('./item'); - + Overview diff --git a/packages/ui-toolkit/src/styleguide/wrapper.js b/packages/ui-toolkit/src/styleguide/wrapper.js index a6f84c5c..ce8966a7 100644 --- a/packages/ui-toolkit/src/styleguide/wrapper.js +++ b/packages/ui-toolkit/src/styleguide/wrapper.js @@ -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 ( - - {this.props.children} - - ); - } -} +export default ({ children }) => ( + + + {children} + + +); diff --git a/packages/ui-toolkit/src/theme/colors.js b/packages/ui-toolkit/src/theme/colors.js index af56e7fd..2e590ad2 100644 --- a/packages/ui-toolkit/src/theme/colors.js +++ b/packages/ui-toolkit/src/theme/colors.js @@ -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 }) => ( ); -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 => ); - - // return {colors}; - - return ( - - - - - - - - - - - - - - Blue fill / blue text - - - - - - - - - - - - - - - Fill for primary buttons, text anchors (including interactive parts - of the breadcrumb) and other UI components, whose priority or - prominence is emphasized with color. - - - - - Blue border - - - - - - - - - - - Borders of primary buttons and other UI components, whose priority - or prominence is emphasized with color. - - - - - White fill - - - - - - - - - - - - - - - Fill for secondary buttons, inputs, dropdown menus, tables, service - and instance cards and other components that need to be - distinguished from the overall layout. - - - - - Grey border - - - - - - - - Borders of white or grey UI components and dividers. - - - - Charcoal fill - - - - - - - - - - - - - - Fill for topology components. - - - - Charcoal border - - - - - - - - - - Border for topology components. - - - - Text - - - - - - - - - - Any text. - - - - Example Text - - - - - - - - Input placeholder text. - - - - Red fill / red text - - - - - - - - Errors - - - - Red border - - - - - - - - Complements red fill. - - - - Green fill / green text - - - - - - - - Confirmations and instructional components. - - - - Green border - - - - - - - - Confirmations and instructional components. - - - - Orange Fill - - - - - - - - To notify users of things that require their attention. - - - - Orange border / orange text - - - - - - - - Complements orange fill. - - -
- DefaultHoverClickDisabledUsage
- ); -}; +export default () => ( + + + + + + + + + + + + + + Blue fill / blue text + + + + + + + + + + + + + + + Fill for primary buttons, text anchors (including interactive parts of + the breadcrumb) and other UI components, whose priority or prominence + is emphasized with color. + + + + + Blue border + + + + + + + + + + + Borders of primary buttons and other UI components, whose priority or + prominence is emphasized with color. + + + + + White fill + + + + + + + + + + + + + + + Fill for secondary buttons, inputs, dropdown menus, tables, service + and instance cards and other components that need to be distinguished + from the overall layout. + + + + + Grey border + + + + + + + + Borders of white or grey UI components and dividers. + + + + Charcoal fill + + + + + + + + + + + + + + Fill for topology components. + + + + Charcoal border + + + + + + + + + + Border for topology components. + + + + Text + + + + + + + + + + Any text. + + + + Example Text + + + + + + + + Input placeholder text. + + + + Red fill / red text + + + + + + + + Errors + + + + Red border + + + + + + + + Complements red fill. + + + + Green fill / green text + + + + + + + + Confirmations and instructional components. + + + + Green border + + + + + + + + Confirmations and instructional components. + + + + Orange Fill + + + + + + + + To notify users of things that require their attention. + + + + Orange border / orange text + + + + + + + + Complements orange fill. + + +
+ DefaultHoverClickDisabledUsage
+); diff --git a/packages/ui-toolkit/src/theme/index.js b/packages/ui-toolkit/src/theme/index.js index 4fe5892f..71681928 100644 --- a/packages/ui-toolkit/src/theme/index.js +++ b/packages/ui-toolkit/src/theme/index.js @@ -123,5 +123,6 @@ export default { inputWarning, topologyBackground, brandBackground, - transition + transition, + transparent: 'transparent' }; diff --git a/packages/ui-toolkit/src/tooltip/Readme.md b/packages/ui-toolkit/src/tooltip/Readme.md new file mode 100644 index 00000000..e7b4e66c --- /dev/null +++ b/packages/ui-toolkit/src/tooltip/Readme.md @@ -0,0 +1,75 @@ +```jsx +const { default: Tooltip, Container, Target } = require('./'); +const { Row, Col } = require('react-styled-flexboxgrid'); + + + + + Hello + + top + + + + + + Hello + + right + + + + + + Hello + + bottom + + + + + + Hello + + left + + + +; +``` + +#### Tooltip > hover + +```jsx +const { default: Tooltip, Container, Target } = require('./'); +const { Row, Col } = require('react-styled-flexboxgrid'); + + + + + Hover here + + top + + + +; +``` + +#### Tooltip > click + +```jsx +const { default: Tooltip, Container, Target } = require('./'); +const { Row, Col } = require('react-styled-flexboxgrid'); + + + + + Click here + + top + + + +; +``` diff --git a/packages/ui-toolkit/src/tooltip/container.js b/packages/ui-toolkit/src/tooltip/container.js new file mode 100644 index 00000000..22e112b2 --- /dev/null +++ b/packages/ui-toolkit/src/tooltip/container.js @@ -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 {children}; + }; +} diff --git a/packages/ui-toolkit/src/tooltip/index.js b/packages/ui-toolkit/src/tooltip/index.js new file mode 100644 index 00000000..b7bba6ac --- /dev/null +++ b/packages/ui-toolkit/src/tooltip/index.js @@ -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() && ( + + {children} + + + + + ) + ); + }; +} + +export { default as Container } from './container'; +export { default as Target } from './target'; diff --git a/packages/ui-toolkit/src/tooltip/style.js b/packages/ui-toolkit/src/tooltip/style.js new file mode 100644 index 00000000..97fdaeef --- /dev/null +++ b/packages/ui-toolkit/src/tooltip/style.js @@ -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)}); + } +`; diff --git a/packages/ui-toolkit/src/tooltip/target.js b/packages/ui-toolkit/src/tooltip/target.js new file mode 100644 index 00000000..cf89a52b --- /dev/null +++ b/packages/ui-toolkit/src/tooltip/target.js @@ -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 ( + + {children} + + ); + }; +} diff --git a/packages/ui-toolkit/styleguide.config.js b/packages/ui-toolkit/styleguide.config.js index 7717de64..4ad7ca59 100644 --- a/packages/ui-toolkit/styleguide.config.js +++ b/packages/ui-toolkit/styleguide.config.js @@ -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' ] } ], diff --git a/prototypes/create-instance/README.md b/prototypes/create-instance/README.md index 7450daf1..f220b9a3 100644 --- a/prototypes/create-instance/README.md +++ b/prototypes/create-instance/README.md @@ -6,8 +6,8 @@ ## Table of Contents -- [Usage](#usage) -- [License](#license) +* [Usage](#usage) +* [License](#license) ## Usage diff --git a/prototypes/create-instance/src/components/empty/index.js b/prototypes/create-instance/src/components/empty/index.js index 80cacd2d..17f80e58 100644 --- a/prototypes/create-instance/src/components/empty/index.js +++ b/prototypes/create-instance/src/components/empty/index.js @@ -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; diff --git a/yarn.lock b/yarn.lock index 47870da9..6feff894 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"