diff --git a/joyent.code-workspace b/joyent.code-workspace index e45b0e97..678ac1e2 100644 --- a/joyent.code-workspace +++ b/joyent.code-workspace @@ -1,10 +1,13 @@ { "folders": [ { - "path": "prototypes/create-instance-icons" + "path": "packages/ui-toolkit" }, { - "path": "packages/ui-toolkit" + "path": "packages/icons" + }, + { + "path": "packages/my-joy-beta" } ], "settings": {} diff --git a/packages/icons/src/copy.js b/packages/icons/src/copy.js new file mode 100644 index 00000000..c56fad63 --- /dev/null +++ b/packages/icons/src/copy.js @@ -0,0 +1,37 @@ +import React from 'react'; + +import Colors from './colors'; +import Rotate from './rotate'; +import calcFill from './fill'; + +export default ({ + fill = null, + light = false, + disabled = false, + direction = 'down', + style = {}, + ...rest +}) => ( + + {colors => ( + + {({ style: rotateStyle }) => ( + + + + )} + + )} + +); diff --git a/packages/icons/src/index.js b/packages/icons/src/index.js index eaf8e3a9..586da697 100644 --- a/packages/icons/src/index.js +++ b/packages/icons/src/index.js @@ -7,6 +7,7 @@ export { default as Chevron } from './chevron'; export { default as Clipboard } from './clipboard'; export { default as Close } from './close'; export { default as Cns } from './cns'; +export { default as Copy } from './copy'; export { default as DataCenter } from './data-center'; export { default as Delete } from './delete'; export { default as Dot } from './dot'; diff --git a/packages/icons/src/play.js b/packages/icons/src/play.js new file mode 100644 index 00000000..bdd78617 --- /dev/null +++ b/packages/icons/src/play.js @@ -0,0 +1,26 @@ +import React from 'react'; +import Colors from './colors'; + +export default ({ light = false, disabled, ...rest, }) => ( + + {({ white, text }) => ( + + + + )} + +); diff --git a/packages/icons/src/restart.js b/packages/icons/src/restart.js new file mode 100644 index 00000000..fb965aef --- /dev/null +++ b/packages/icons/src/restart.js @@ -0,0 +1,23 @@ +import React from 'react'; + +export default props => ( + + + +); diff --git a/packages/my-joy-beta/package.json b/packages/my-joy-beta/package.json index 581744c7..b16d8e49 100644 --- a/packages/my-joy-beta/package.json +++ b/packages/my-joy-beta/package.json @@ -6,14 +6,11 @@ "repository": "github:yldio/joyent-portal", "main": "build/", "scripts": { - "dev": - "REACT_APP_GQL_PORT=4000 PORT=3069 REACT_APP_GQL_PROTOCOL=http joyent-react-scripts start", + "dev": "REACT_APP_GQL_PORT=4000 PORT=3069 REACT_APP_GQL_PROTOCOL=http joyent-react-scripts start", "start": "PORT=3069 joyent-react-scripts start", "build": "NODE_ENV=production joyent-react-scripts build", - "lint-ci": - "eslint . --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`", - "lint": - "eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`", + "lint-ci": "eslint . --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`", + "lint": "eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`", "test": "NODE_ENV=test joyent-react-scripts test --env=jsdom", "test-ci": "redrun test", "prepublish": "echo 0" @@ -21,6 +18,9 @@ "dependencies": { "@manaflair/redux-batch": "^0.1.0", "apollo": "^0.2.2", + "apr-intercept": "^1.0.4", + "clipboard-copy": "^1.2.0", + "date-fns": "^1.29.0", "declarative-redux-form": "^1.0.3", "joyent-ui-toolkit": "^2.0.1", "lodash.find": "^4.6.0", diff --git a/packages/my-joy-beta/src/app.js b/packages/my-joy-beta/src/app.js index 073b14f6..f85e6e92 100644 --- a/packages/my-joy-beta/src/app.js +++ b/packages/my-joy-beta/src/app.js @@ -6,10 +6,46 @@ import { theme, RootContainer } from 'joyent-ui-toolkit'; import { client, store } from '@state/store'; import Router from '@root/router'; +import remcalc from 'remcalc'; + +const fullTheme = { + ...theme, + flexboxgrid: { + gridSize: 12, // rem + gutterWidth: 1.25, // rem + outerMargin: 1.875, // rem + mediaQuery: 'only screen', + container: { + sm: 46, // rem + md: 56, // rem + lg: 59 // rem + }, + breakpoints: { + xs: 0, // em + sm: 48, // em + md: 64, // em + lg: 75 // em + } + }, + spacing: { + 0.5: remcalc(4), + 0: remcalc(0), + 1: remcalc(6), + 2: remcalc(12), + 3: remcalc(18), + 4: remcalc(24), + 5: remcalc(30), + 6: remcalc(36), + 7: remcalc(42), + 8: remcalc(48), + 9: remcalc(54), + 10: remcalc(60) + } +}; export default () => ( - + diff --git a/packages/my-joy-beta/src/components/instances/__tests__/home.js b/packages/my-joy-beta/src/components/instances/__tests__/home.js new file mode 100644 index 00000000..45cf094a --- /dev/null +++ b/packages/my-joy-beta/src/components/instances/__tests__/home.js @@ -0,0 +1,89 @@ +import React from 'react'; +import renderer from 'react-test-renderer'; +import Store from '@mocks/store'; +import 'jest-styled-components'; + +import Home, { CopyToClipboardTooltip, CopiableField, Meta } from '../home'; + +it('renders without throwing', () => { + const tree = renderer + .create( + + + + ) + .toJSON(); + + expect(tree).toMatchSnapshot(); +}); + +it('renders without throwing', () => { + const tree = renderer + .create( + + {}} + /> + + ) + .toJSON(); + + expect(tree).toMatchSnapshot(); +}); + +it('renders without throwing', () => { + const tree = renderer + .create( + + console.log('sup??')}/> + + ) + .toJSON(); + + expect(tree).toMatchSnapshot(); +}); + +it('renders without throwing', () => { + const tree = renderer + .create( + + {"test"} + + ) + .toJSON(); + + expect(tree).toMatchSnapshot(); +}); diff --git a/packages/my-joy-beta/src/components/instances/home.js b/packages/my-joy-beta/src/components/instances/home.js new file mode 100644 index 00000000..6583c747 --- /dev/null +++ b/packages/my-joy-beta/src/components/instances/home.js @@ -0,0 +1,291 @@ +import React, { Component } from 'react'; +import { Row, Col } from 'react-styled-flexboxgrid'; +import styled, { withTheme} from 'styled-components'; +import { Margin, Padding } from 'styled-components-spacing'; +import remcalc from 'remcalc'; +import is from 'styled-is'; +import titleCase from 'title-case'; +import distanceInWordsToNow from 'date-fns/distance_in_words_to_now'; +import copy from 'clipboard-copy'; + +import { + Card, + CardOutlet, + Divider, + ResetIcon, + Button, + FormLabel, + Input, + H2, + Label, + DotIcon, + DeleteIcon, + StartIcon, + StopIcon, + TooltipContainer, + TooltipTarget, + Tooltip, + ClipboardIcon +} from 'joyent-ui-toolkit'; + +const stateColor = { + PROVISIONING: 'primary', + RUNNING: 'green', + STOPPING: 'grey', + STOPPED: 'grey', + DELETED: 'secondaryActive', + FAILED: 'red' +}; + +const GreyLabel = styled(Label)` + opacity: 0.5; + padding-right: ${remcalc(3)}; +`; + +const Flex = styled.div` + align-items: center; + display: flex; + justify-content: flex-start; + + @media (max-width: ${remcalc(767)}) { + display: block; + } +`; + +const FlexEnd = styled.div` + justify-content: flex-end; + align-items: center; + display: flex; + flex-grow: 1; +`; + +const InputIconWrapper = styled.div` + display: flex; + margin-bottom: ${remcalc(10)}; + align-items: center; + + ${is('noMargin')` + margin-bottom: ${remcalc(0)}; + `}; + + input { + padding-right: ${remcalc(30)}; + } + + div { + position: relative; + left: ${remcalc(-26)}; + } +`; + +const HorizontalDivider = styled.div` + width: ${remcalc(1)}; + background: ${props => props.theme.grey}; + height: ${remcalc(24)}; + display: flex; + align-self: flex-end; + margin: 0 ${remcalc(18)}; + + @media (max-width: ${remcalc(767)}) { + display: none; + } +`; + +const ClipboardIconActionable = styled(ClipboardIcon)` + cursor: pointer; +`; + +export class CopyToClipboardTooltip extends Component { + constructor() { + super(); + + this.state = { + copied: false + }; + } + + handleClick = () => { + const { children: text } = this.props; + + copy(text); + + this.setState( + { + copied: true + }, + () => { + setTimeout(() => { + this.setState({ + copied: false + }); + }, 4000); + } + ); + }; + + render = () => ( + + + + + + {this.state.copied ? 'Copied To Clipboard' : 'Copy To Clipboard'} + + + ); +} + +export const CopiableField = ({ label, text, ...rest }) => ( + + + {label} + + + {text} + + + +); + +export const Meta = ({ created, updated, state, brand, image, ...instance }) => [ + + +

{instance.package.name}

+ +
, + + + + + + + + + {titleCase(state)} + + + + + + Created: + + + + + Updated: + + + + + +]; + +export default withTheme(({ + instance, + starting, + stopping, + rebooting, + deleteing, + onAction, + theme +}) => ( + + + + + + + + + + + + + + + + + + + + + + {instance.image && ( + + )} + + + {instance.ips.map((ip, i) => ( + + ))} + + + + +)); diff --git a/packages/my-joy-beta/src/components/navigation/header.js b/packages/my-joy-beta/src/components/navigation/header.js index f43c4979..9350da16 100644 --- a/packages/my-joy-beta/src/components/navigation/header.js +++ b/packages/my-joy-beta/src/components/navigation/header.js @@ -21,13 +21,13 @@ export default () => (
- + -
  • + Compute -
  • +
    diff --git a/packages/my-joy-beta/src/components/navigation/menu.js b/packages/my-joy-beta/src/components/navigation/menu.js index da9bd90d..f6deda69 100644 --- a/packages/my-joy-beta/src/components/navigation/menu.js +++ b/packages/my-joy-beta/src/components/navigation/menu.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import forceArray from 'force-array'; +import { Margin } from 'styled-components-spacing'; import { SectionList, SectionListItem, ViewContainer } from 'joyent-ui-toolkit'; @@ -20,7 +21,9 @@ const Menu = ({ links = [] }) => { return ( - {getMenuItems(_links)} + + {getMenuItems(_links)} + ); }; diff --git a/packages/my-joy-beta/src/containers/instances/home.js b/packages/my-joy-beta/src/containers/instances/home.js new file mode 100644 index 00000000..bfaa33c3 --- /dev/null +++ b/packages/my-joy-beta/src/containers/instances/home.js @@ -0,0 +1,160 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { compose, graphql } from 'react-apollo'; +import find from 'lodash.find'; +import get from 'lodash.get'; +import { connect } from 'react-redux'; +import { set } from 'react-redux-values'; +import intercept from 'apr-intercept'; + +import { + ViewContainer, + StatusLoader, + Message, + MessageDescription, + MessageTitle +} from 'joyent-ui-toolkit'; + +import GetInstance from '@graphql/get-instance.gql'; +import StartInstance from '@graphql/start-instance.gql'; +import StopInstance from '@graphql/stop-instance.gql'; +import RebootInstance from '@graphql/reboot-instance.gql'; +import DeleteInstance from '@graphql/delete-instance.gql'; +import HomeScreen from '@components/instances/home'; +import parseError from '@state/parse-error'; + +const Home = ({ + instance, + loading, + loadingError, + mutationError, + handleAction, + starting, + stopping, + rebooting, + deleteing, +}) => { + const { name } = instance || {}; + + const _loading = loading && !name && ; + const _summary = !_loading && + instance && ( + + ); + + const _error = loadingError && + !_loading && + !instance && ( + + Ooops! + + An error occurred while loading your instance summary + + + ); + + const _mutationError = mutationError && ( + + Ooops! + {mutationError} + + ); + + return ( + + {_loading} + {_error} + {_mutationError} + {_summary} + + ); +}; + +Home.propTypes = { + loading: PropTypes.bool +}; + +export default compose( + graphql(StopInstance, { name: 'stop' }), + graphql(StartInstance, { name: 'start' }), + graphql(RebootInstance, { name: 'reboot' }), + graphql(DeleteInstance, { name: 'reboot' }), + graphql(GetInstance, { + options: ({ match }) => ({ + pollInterval: 1000, + variables: { + name: get(match, 'params.instance') + } + }), + props: ({ data: { loading, error, variables, ...rest } }) => ({ + instance: find(get(rest, 'machines', []), ['name', variables.name]), + loading, + loadingError: error + }) + }), + connect( + (state, ownProps) => { + const { instance = {} } = ownProps; + const { id } = instance; + + if (!id) { + return ownProps; + } + + return { + ...ownProps, + starting: state.values[`${id}-home-starting`], + stopping: state.values[`${id}-home-stoping`], + rebooting: state.values[`${id}-home-rebooting`], + deleteing: state.values[`${id}-home-deleteing`], + mutationError: state.values[`${id}-home-mutation-error`] + }; + }, + (disptach, ownProps) => ({ + handleAction: async (action) => { + const { instance } = ownProps; + const { id } = instance; + + const gerund = `${action}ing`; + const name = `${id}-home-${gerund}`; + + // sets loading to true + disptach(set({ + name, + value: true + })); + + // calls mutation and waits while loading is still true + const [err] = await intercept(ownProps[action]({ + variables: { id } + })); + + if (!err && (action === 'delete')) { + const { history } = ownProps; + return history.push(`/instances/`); + } + + // after mutation, sets loading back to false + const setLoadingFalse = set({ + name, + value: false + }); + + // if error, sets error value + const mutationError = err && set({ + name: `${id}-home-mutation-error`, + value: parseError(err) + }); + + return disptach([mutationError, setLoadingFalse].filter(Boolean)); + } + }) + ) +)(Home); diff --git a/packages/my-joy-beta/src/containers/instances/index.js b/packages/my-joy-beta/src/containers/instances/index.js index 3886352c..b006113b 100644 --- a/packages/my-joy-beta/src/containers/instances/index.js +++ b/packages/my-joy-beta/src/containers/instances/index.js @@ -1,5 +1,5 @@ export { default as List } from './list'; -export { default as Summary } from './summary'; +export { default as Home } from './home'; export { default as Tags } from './tags'; export { default as Metadata } from './metadata'; export { default as Networks } from './networks'; diff --git a/packages/my-joy-beta/src/containers/instances/summary.js b/packages/my-joy-beta/src/containers/instances/summary.js deleted file mode 100644 index 30bd6267..00000000 --- a/packages/my-joy-beta/src/containers/instances/summary.js +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import ReactJson from 'react-json-view'; -import PropTypes from 'prop-types'; -import { compose, graphql } from 'react-apollo'; -import find from 'lodash.find'; -import get from 'lodash.get'; - -import { - ViewContainer, - Title, - StatusLoader, - Message, - MessageDescription, - MessageTitle -} from 'joyent-ui-toolkit'; - -import GetInstance from '@graphql/get-instance.gql'; - -const Summary = ({ instance, loading, error }) => { - const { name } = instance || {}; - - const _title = Summary; - const _loading = loading && !name && ; - const _summary = !_loading && instance && ; - - const _error = error && - !_loading && - !instance && ( - - Ooops! - - An error occurred while loading your instance summary - - - ); - - return ( - - {_title} - {_loading} - {_error} - {_summary} - - ); -}; - -Summary.propTypes = { - loading: PropTypes.bool -}; - -export default compose( - graphql(GetInstance, { - options: ({ match }) => ({ - pollInterval: 1000, - variables: { - name: get(match, 'params.instance') - } - }), - props: ({ data: { loading, error, variables, ...rest } }) => ({ - instance: find(get(rest, 'machines', []), ['name', variables.name]), - loading, - error - }) - }) -)(Summary); diff --git a/packages/my-joy-beta/src/graphql/delete-instance.gql b/packages/my-joy-beta/src/graphql/delete-instance.gql new file mode 100644 index 00000000..43583bae --- /dev/null +++ b/packages/my-joy-beta/src/graphql/delete-instance.gql @@ -0,0 +1,5 @@ +mutation startInstance($id: ID!) { + deleteMachine(id: $id) { + id + } +} diff --git a/packages/my-joy-beta/src/graphql/get-instance.gql b/packages/my-joy-beta/src/graphql/get-instance.gql index 6a9a2613..eb60c40e 100644 --- a/packages/my-joy-beta/src/graphql/get-instance.gql +++ b/packages/my-joy-beta/src/graphql/get-instance.gql @@ -1,6 +1,21 @@ query instance($name: String) { machines(name: $name) { id - dns_names + state, + name, + created, + updated, + primary_ip, + ips, + docker, + dns_names, + compute_node, + image { + id, + name + }, + package { + name + } } } diff --git a/packages/my-joy-beta/src/graphql/start-instance.gql b/packages/my-joy-beta/src/graphql/start-instance.gql index fe110033..02d50d10 100644 --- a/packages/my-joy-beta/src/graphql/start-instance.gql +++ b/packages/my-joy-beta/src/graphql/start-instance.gql @@ -1,3 +1,5 @@ mutation startInstance($id: ID!) { - startMachine(id: $id) + startMachine(id: $id) { + id + } } diff --git a/packages/my-joy-beta/src/graphql/stop-instance.gql b/packages/my-joy-beta/src/graphql/stop-instance.gql index 0bc0d2d6..fd307e0f 100644 --- a/packages/my-joy-beta/src/graphql/stop-instance.gql +++ b/packages/my-joy-beta/src/graphql/stop-instance.gql @@ -1,3 +1,5 @@ mutation stopInstance($id: ID!) { - stopMachine(id: $id) + stopMachine(id: $id) { + id + } } diff --git a/packages/my-joy-beta/src/router.js b/packages/my-joy-beta/src/router.js index 4702a128..6725227d 100644 --- a/packages/my-joy-beta/src/router.js +++ b/packages/my-joy-beta/src/router.js @@ -9,7 +9,7 @@ import { Header } from '@components/navigation'; import { List as Instances, - Summary as InstanceSummary, + Home as InstanceHome, Tags as InstanceTags, Metadata as InstanceMetadata, Networks as InstanceNetworks, @@ -55,9 +55,9 @@ export default () => ( component={() => null} /> ( exact component={({ match }) => ( )} /> diff --git a/packages/my-joy-beta/src/state/parse-error.js b/packages/my-joy-beta/src/state/parse-error.js new file mode 100644 index 00000000..e0b81e78 --- /dev/null +++ b/packages/my-joy-beta/src/state/parse-error.js @@ -0,0 +1,4 @@ +export default ({ graphQLErrors = [], message = '' }) => + graphQLErrors.length + ? graphQLErrors.map(({ message }) => message).join('\n') + : message; \ No newline at end of file diff --git a/packages/my-joy-beta/src/state/state.js b/packages/my-joy-beta/src/state/state.js index df954655..9385af83 100644 --- a/packages/my-joy-beta/src/state/state.js +++ b/packages/my-joy-beta/src/state/state.js @@ -2,8 +2,7 @@ export default { ui: { sections: { instances: [ - 'feed', - 'summary', + 'home', 'tags', 'metadata', 'networks', diff --git a/packages/ui-toolkit/etc/style.css b/packages/ui-toolkit/etc/style.css index e416d5de..c2c5990c 100644 --- a/packages/ui-toolkit/etc/style.css +++ b/packages/ui-toolkit/etc/style.css @@ -31,7 +31,7 @@ p.rsg--p-32 { padding-bottom: 36px; } -.rsg--sidebar-4 a.rsg--link-72 { +.rsg--sidebar-4 a.rsg--link-48 { color: #fff; font-size: 15px; } diff --git a/packages/ui-toolkit/src/baseline/index.js b/packages/ui-toolkit/src/baseline/index.js index adc33ca7..304a4e79 100644 --- a/packages/ui-toolkit/src/baseline/index.js +++ b/packages/ui-toolkit/src/baseline/index.js @@ -9,7 +9,7 @@ const unitProps = (() => { const measures = ['margin', 'padding'] .reduce((props, rule) => [...props, rule, ...sided(rule)], []) - .concat(['height', 'width']); + .concat(['height', 'width', 'border-radius']); return sides.reduce((acc, side) => [...acc, `border-${side}-width`], [ 'border', diff --git a/packages/ui-toolkit/src/button/index.js b/packages/ui-toolkit/src/button/index.js index b5d34c82..3d42a3b5 100644 --- a/packages/ui-toolkit/src/button/index.js +++ b/packages/ui-toolkit/src/button/index.js @@ -109,6 +109,30 @@ const style = css` } `}; + ${is('error')` + color: ${props => props.theme.red}; + background-color: ${props => props.theme.white}; + border-color: ${props => props.theme.red}; + font-weight: 600; + + &:focus { + background-color: ${props => props.theme.white}; + border-color: ${props => props.theme.red}; + } + + &:hover { + background-color: ${props => props.theme.whiteHover}; + border-color: ${props => props.theme.red}; + } + + &:active, + &:active:hover, + &:active:focus { + background-color: ${props => props.theme.whiteActive}; + border-color: ${props => props.theme.red}; + } + `}; + ${is('tertiary', 'selected')` background-color: rgba(59, 70, 204, 0.2); color: ${props => props.theme.primaryActive}; @@ -160,7 +184,8 @@ const style = css` ${is('icon')` min-height: ${remcalc(48)}; - min-width: ${remcalc(48)}; + display: flex; + align-items: center; `}; ${is('fluid')` diff --git a/packages/ui-toolkit/src/card/outlet.js b/packages/ui-toolkit/src/card/outlet.js index 260b1e04..ea984c34 100644 --- a/packages/ui-toolkit/src/card/outlet.js +++ b/packages/ui-toolkit/src/card/outlet.js @@ -14,9 +14,13 @@ const BaseOutlet = BaseCard.extend` flex: 1 1 auto; flex-direction: column; border-width: 0; - padding: ${remcalc(13)}; + padding: ${remcalc(12)}; margin-bottom: 0; + ${is('big')` + padding: ${remcalc(24)}; + `}; + background-color: transparent; ${is('collapsed')` diff --git a/packages/ui-toolkit/src/form/base/input.js b/packages/ui-toolkit/src/form/base/input.js index 12111240..714a18e6 100644 --- a/packages/ui-toolkit/src/form/base/input.js +++ b/packages/ui-toolkit/src/form/base/input.js @@ -95,6 +95,10 @@ const style = css` width: ${remcalc(120)} `}; + ${is('fluid')` + max-width: 100%; + `}; + ${is('xSmall')` width: ${remcalc(80)} `}; diff --git a/packages/ui-toolkit/src/icons/Readme.md b/packages/ui-toolkit/src/icons/Readme.md index 7aaaa87d..9d0b962b 100644 --- a/packages/ui-toolkit/src/icons/Readme.md +++ b/packages/ui-toolkit/src/icons/Readme.md @@ -13,6 +13,7 @@ const { Clipboard, Close, Cns, + Copy, DataCenter, Delete, Dot, @@ -197,6 +198,24 @@ const { + + + + + + + + + + + + + + + + + + diff --git a/packages/ui-toolkit/src/icons/index.js b/packages/ui-toolkit/src/icons/index.js index 233de406..526c7898 100644 --- a/packages/ui-toolkit/src/icons/index.js +++ b/packages/ui-toolkit/src/icons/index.js @@ -10,6 +10,7 @@ import { Clipboard as BaseClipboard, Close as BaseClose, Cns as BaseCns, + Copy as BaseCopy, DataCenter as BaseDataCenter, Delete as BaseDelete, Dot as BaseDot, @@ -46,6 +47,7 @@ export const Chevron = Baseline(BaseChevron); export const Clipboard = Baseline(BaseClipboard); export const Close = Baseline(BaseClose); export const Cns = Baseline(BaseCns); +export const Copy = Baseline(BaseCopy); export const DataCenter = Baseline(BaseDataCenter); export const Delete = Baseline(BaseDelete); export const Dot = Baseline(BaseDot); diff --git a/packages/ui-toolkit/src/index.js b/packages/ui-toolkit/src/index.js index d8cd9a4c..7523ee3d 100644 --- a/packages/ui-toolkit/src/index.js +++ b/packages/ui-toolkit/src/index.js @@ -93,9 +93,11 @@ export { Arrow as ArrowIcon, Bin as BinIcon, Checkcircle as CheckcircleIcon, + Chevron as ChevronIcon, Clipboard as ClipboardIcon, Close as CloseIcon, Cns as CnsIcon, + Copy as CopyIcon, DataCenter as DataCenterIcon, Delete as DeleteIcon, Dot as DotIcon, diff --git a/packages/ui-toolkit/src/tooltip/index.js b/packages/ui-toolkit/src/tooltip/index.js index fdef4b90..17870140 100644 --- a/packages/ui-toolkit/src/tooltip/index.js +++ b/packages/ui-toolkit/src/tooltip/index.js @@ -4,6 +4,7 @@ import styled from 'styled-components'; import { Popper as BasePopper, Arrow } from 'react-popper'; import rndId from 'rnd-id'; import remcalc from 'remcalc'; +import is from 'styled-is'; import style from './style'; @@ -12,13 +13,21 @@ const arrowClassName = rndId(); const Popper = styled(BasePopper)` padding: ${remcalc(13)} ${remcalc(18)}; font-weight: normal; - ${style({ background: 'text', color: 'white', border: 'transparent', arrow: arrowClassName })}; + + ${is('success')` + ${style({ + background: 'green', + color: 'white', + border: 'transparent', + arrow: arrowClassName + })}; + `}; `; export default class Tooltip extends Component { diff --git a/yarn.lock b/yarn.lock index 27a3ca51..e00f662e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -251,8 +251,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, ajv@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.4.0.tgz#32d1cf08dbc80c432f426f12e10b2511f6b46474" + version "5.5.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.0.tgz#eb2840746e9dc48bd5e063a36e3fd400c5eab5a9" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -456,6 +456,10 @@ apr-for-each@^1.0.6: apr-engine-each "^1.0.3" lodash.defaults "^4.2.0" +apr-intercept@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/apr-intercept/-/apr-intercept-1.0.4.tgz#01c64345f4af647b6b04f5aba4755195429b061a" + apr-main@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/apr-main/-/apr-main-1.0.7.tgz#4f2592e20cb236b09c3c3d98a95088fbcc5fad4d" @@ -2090,12 +2094,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.30000770" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000770.tgz#cf68ae1cb8a82f6d3c35df41c62dc6973e470244" + version "1.0.30000772" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000772.tgz#51aae891768286eade4a3d8319ea76d6a01b512b" caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000770: - version "1.0.30000770" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000770.tgz#bc8e7f50b073273390db6ab357378909a14e9bdb" + version "1.0.30000772" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000772.tgz#78129622cabfed7af1ff38b64ab680a6a0865420" capture-stack-trace@^1.0.0: version "1.0.0" @@ -2177,8 +2181,8 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" chardet@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.0.tgz#0bbe1355ac44d7a3ed4a925707c4ef70f8190f6c" + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" checksum@^0.1.1: version "0.1.1" @@ -2431,11 +2435,7 @@ commander@2.1.x, commander@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" -commander@2.11.x, commander@~2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - -commander@^2.11.0, commander@^2.9.0: +commander@2.12.x, commander@^2.11.0, commander@^2.9.0, commander@~2.12.1: version "2.12.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.1.tgz#468635c4168d06145b9323356d1da84d14ac4a7a" @@ -3070,6 +3070,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-fns@^1.29.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -3263,6 +3267,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + disable-scroll@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/disable-scroll/-/disable-scroll-0.3.0.tgz#486d309ec9873edb18aec7891c5576bf8b506c59" @@ -3295,12 +3306,11 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" +doctrine@^2.0.0, doctrine@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" dependencies: esutils "^2.0.2" - isarray "^1.0.0" dom-converter@~0.1: version "0.1.4" @@ -3325,7 +3335,7 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domelementtype@1: +domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" @@ -3339,6 +3349,12 @@ domhandler@2.1: dependencies: domelementtype "1" +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" @@ -3352,13 +3368,20 @@ domutils@1.5.1: dom-serializer "0" domelementtype "1" +domutils@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" dependencies: is-obj "^1.0.0" -dot-prop@^4.1.0: +dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" dependencies: @@ -3477,7 +3500,7 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" -entities@~1.1.1: +entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" @@ -3520,8 +3543,8 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.6.1, es-abstract@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -3634,8 +3657,8 @@ eslint-config-joyent-portal@3.2.0, eslint-config-joyent-portal@^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.6.0, eslint-config-prettier@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.8.0.tgz#929861a11de0249677686eba908118175d1a26bc" + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" dependencies: get-stdin "^5.0.1" @@ -3812,8 +3835,8 @@ eslint@4.10.0: text-table "~0.2.0" eslint@^4.11.0, eslint@^4.9.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.11.0.tgz#39a8c82bc0a3783adf5a39fa27fdd9d36fac9a34" + version "4.12.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.12.0.tgz#a7ce78eba8cc8f2443acfbbc870cc31a65135884" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -3821,7 +3844,7 @@ eslint@^4.11.0, eslint@^4.9.0: concat-stream "^1.6.0" cross-spawn "^5.1.0" debug "^3.0.1" - doctrine "^2.0.0" + doctrine "^2.0.2" eslint-scope "^3.7.1" espree "^3.5.2" esquery "^1.0.0" @@ -3830,7 +3853,7 @@ eslint@^4.11.0, eslint@^4.9.0: file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^9.17.0" + globals "^11.0.1" ignore "^3.3.3" imurmurhash "^0.1.4" inquirer "^3.0.6" @@ -4025,7 +4048,7 @@ express-graphql@^0.6.6: http-errors "^1.3.0" raw-body "^2.1.0" -express@^4.13.3, express@^4.15.3: +express@^4.13.3, express@^4.15.3, express@^4.16.2: version "4.16.2" resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" dependencies: @@ -4691,6 +4714,10 @@ globals@^10.0.0: version "10.4.0" resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" +globals@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.0.1.tgz#12a87bb010e5154396acc535e1e43fc753b0e5e8" + globals@^9.17.0, globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -4716,6 +4743,17 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + globjoin@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" @@ -5009,17 +5047,17 @@ html-entities@1.2.1, html-entities@^1.2.0: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" html-minifier@^3.2.3: - version "3.5.6" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.6.tgz#7e4e661a09999599c7d8e8a2b8d7fb7430bb5c3e" + version "3.5.7" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.7.tgz#511e69bb5a8e7677d1012ebe03819aa02ca06208" dependencies: camel-case "3.0.x" clean-css "4.1.x" - commander "2.11.x" + commander "2.12.x" he "1.1.x" ncname "1.0.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "3.1.x" + uglify-js "3.2.x" html-tags@^2.0.0: version "2.0.0" @@ -5047,6 +5085,17 @@ html-webpack-plugin@^2.30.1: pretty-error "^2.0.2" toposort "^1.0.0" +htmlparser2@^3.9.2: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + htmlparser2@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" @@ -5156,7 +5205,7 @@ iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -ignore@^3.3.3: +ignore@^3.3.3, ignore@^3.3.5: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" @@ -7003,9 +7052,9 @@ mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^1.2.11, mime@^1.4.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.5.0.tgz#59c20e03ae116089edeb7d3b34a6788c5b3cccea" +mime@^1.2.11, mime@^1.4.1, mime@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" mimic-fn@^1.0.0: version "1.1.0" @@ -7104,8 +7153,8 @@ multicast-dns-service-types@^1.1.0: resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" multicast-dns@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.0.tgz#13f22d0c32dc5ee82a32878e3c380d875b3eab22" + version "6.2.1" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.1.tgz#c5035defa9219d30640558a49298067352098060" dependencies: dns-packet "^1.0.1" thunky "^0.1.0" @@ -7725,7 +7774,7 @@ path-to-regexp@^2.1.0: 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: +path-type@3.0.0, path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" dependencies: @@ -7890,6 +7939,14 @@ postcss-flexbugs-fixes@3.2.0: dependencies: postcss "^6.0.1" +postcss-html@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.11.0.tgz#03a3ff3116f8a0fe0d46316ea21893d4db4b63af" + dependencies: + htmlparser2 "^3.9.2" + remark "^8.0.0" + unist-util-find-all-after "^1.0.1" + postcss-less@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-1.1.3.tgz#6930525271bfe38d5793d33ac09c1a546b87bb51" @@ -8088,7 +8145,7 @@ postcss-scss@^1.0.2: dependencies: postcss "^6.0.3" -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2, postcss-selector-parser@^2.2.3: +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" dependencies: @@ -8096,6 +8153,14 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2, postcss-selector indexes-of "^1.0.1" uniq "^1.0.1" +postcss-selector-parser@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-svgo@^2.1.1: version "2.1.6" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" @@ -8980,8 +9045,8 @@ redux-actions@^2.2.1: reduce-reducers "^0.1.0" redux-form@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.1.2.tgz#6b0f25c57fd8130a05ce00f6435fe1b051f402af" + version "7.2.0" + resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.2.0.tgz#4465d9bc863e40b1704695d672bea75fcf81db04" dependencies: deep-equal "^1.0.1" es6-error "^4.0.0" @@ -10175,8 +10240,8 @@ stylelint-config-styled-components@^0.1.1: resolved "https://registry.yarnpkg.com/stylelint-config-styled-components/-/stylelint-config-styled-components-0.1.1.tgz#b408388d7c687833ab4be4c4e6522d97d2827ede" stylelint-processor-styled-components@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-1.1.0.tgz#27658def7844629960e194ae1b1af6b13f6e83d8" + version "1.1.1" + resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-1.1.1.tgz#c16ee9d6cda0a8c150c3b620812960bdf30958dc" dependencies: babel-traverse "^6.16.0" babylon "^6.12.0" @@ -10184,8 +10249,8 @@ stylelint-processor-styled-components@^1.0.0: typescript-eslint-parser "^9.0.0" stylelint@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.2.0.tgz#6a15044553fb5c3143b16d62013a370314495b0d" + version "8.3.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.3.1.tgz#424c822f32c88e85025b55d72c7b98355e3fa6de" dependencies: autoprefixer "^7.1.2" balanced-match "^1.0.0" @@ -10195,7 +10260,7 @@ stylelint@^8.2.0: execall "^1.0.0" file-entry-cache "^2.0.0" get-stdin "^5.0.1" - globby "^6.1.0" + globby "^7.0.0" globjoin "^0.1.4" html-tags "^2.0.0" ignore "^3.3.3" @@ -10209,13 +10274,14 @@ stylelint@^8.2.0: normalize-selector "^0.2.0" pify "^3.0.0" postcss "^6.0.6" + postcss-html "^0.11.0" postcss-less "^1.1.0" postcss-media-query-parser "^0.2.3" postcss-reporter "^5.0.0" postcss-resolve-nested-selector "^0.1.1" postcss-safe-parser "^3.0.1" postcss-scss "^1.0.2" - postcss-selector-parser "^2.2.3" + postcss-selector-parser "^3.1.0" postcss-value-parser "^3.3.0" resolve-from "^4.0.0" specificity "^0.3.1" @@ -10226,8 +10292,8 @@ stylelint@^8.2.0: table "^4.0.1" stylis@3.x: - version "3.4.4" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.4.tgz#7dbc7e3ca3c8707b796cd217fe6f8fbe81e78464" + version "3.4.5" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.5.tgz#d7b9595fc18e7b9c8775eca8270a9a1d3e59806e" sugarss@^1.0.0: version "1.0.1" @@ -10665,17 +10731,17 @@ ua-parser-js@^0.7.9: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" uglify-es@^3.0.24: - version "3.1.10" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.1.10.tgz#f1840c3b52771d17555a02ce158cf46f689384bd" + version "3.2.0" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.0.tgz#fbbfb9dc465ec7e5065701b9720d0de977d0bc24" dependencies: - commander "~2.11.0" + commander "~2.12.1" source-map "~0.6.1" -uglify-js@3.1.x, uglify-js@^3.0.13: - version "3.1.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.10.tgz#c4a5f9b5c6276b40cb971c1d97c9eeb26af9509c" +uglify-js@3.2.x, uglify-js@^3.0.13: + version "3.2.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.0.tgz#cb411ee4ca0e0cadbfe3a4e1a1da97e6fa0d19c1" dependencies: - commander "~2.11.0" + commander "~2.12.1" source-map "~0.6.1" uglify-js@^2.6, uglify-js@^2.8.29: @@ -10776,7 +10842,13 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -unist-util-is@^2.1.1: +unist-util-find-all-after@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz#4e5512abfef7e0616781aecf7b1ed751c00af908" + dependencies: + unist-util-is "^2.0.0" + +unist-util-is@^2.0.0, unist-util-is@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b" @@ -11118,16 +11190,16 @@ webpack-common-shake@^1.5.3: webpack-sources "^1.0.1" webpack-dev-middleware@^1.11.0: - version "1.12.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.1.tgz#338be3ca930973be1c2ce07d84d275e997e1a25a" + version "1.12.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" dependencies: memory-fs "~0.4.1" - mime "^1.4.1" + mime "^1.5.0" path-is-absolute "^1.0.0" range-parser "^1.0.3" time-stamp "^2.0.0" -webpack-dev-server@2.9.4, webpack-dev-server@^2.8.2: +webpack-dev-server@2.9.4: version "2.9.4" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz#7883e61759c6a4b33e9b19ec4037bd4ab61428d1" dependencies: @@ -11159,6 +11231,38 @@ webpack-dev-server@2.9.4, webpack-dev-server@^2.8.2: webpack-dev-middleware "^1.11.0" yargs "^6.6.0" +webpack-dev-server@^2.8.2: + version "2.9.5" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.5.tgz#79336fba0087a66ae491f4869f6545775b18daa8" + dependencies: + ansi-html "0.0.7" + array-includes "^3.0.3" + bonjour "^3.5.0" + 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.16.2" + 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" + killable "^1.0.0" + loglevel "^1.4.1" + opn "^5.1.0" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.18" + sockjs-client "1.1.4" + spdy "^3.4.1" + strip-ansi "^3.0.1" + supports-color "^4.2.1" + webpack-dev-middleware "^1.11.0" + yargs "^6.6.0" + webpack-manifest-plugin@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-1.3.2.tgz#5ea8ee5756359ddc1d98814324fe43496349a7d4"