From d094e2c322f6f990ab7f824c3dc0fce2fe1d3f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=ABck=20V=C3=A9zien?= Date: Tue, 20 Feb 2018 15:44:25 +0100 Subject: [PATCH] Add Tooltip component, fix Dropdown --- package.json | 17 +- src/components/DashboardPage/AccountsOrder.js | 54 ++-- src/components/GlobalSearch.js | 42 ++- src/components/SideBar/index.js | 19 +- src/components/TopBar.js | 54 +++- src/components/base/BoldToggle.js | 14 +- src/components/base/DropDown/index.js | 10 +- src/components/base/Tooltip/index.js | 81 +++++ src/components/base/Tooltip/stories.js | 10 + src/icons/User.js | 10 + src/index.ejs | 7 + src/reducers/settings.js | 2 +- src/styles/global.js | 15 +- src/styles/theme.js | 52 ++-- yarn.lock | 291 ++++++++++++------ 15 files changed, 491 insertions(+), 187 deletions(-) create mode 100644 src/components/base/Tooltip/index.js create mode 100644 src/components/base/Tooltip/stories.js create mode 100644 src/icons/User.js diff --git a/package.json b/package.json index 6b4ce87e..98bb232a 100644 --- a/package.json +++ b/package.json @@ -45,12 +45,12 @@ "@fortawesome/fontawesome-free-regular": "^5.0.6", "@fortawesome/fontawesome-free-solid": "^5.0.6", "@fortawesome/react-fontawesome": "^0.0.17", - "@ledgerhq/common": "2.3.0", - "@ledgerhq/currencies": "^2.3.0", - "@ledgerhq/hw-app-btc": "^4.0.0", - "@ledgerhq/hw-app-eth": "^4.0.0", - "@ledgerhq/hw-transport": "^4.0.0", - "@ledgerhq/hw-transport-node-hid": "^4.0.0", + "@ledgerhq/common": "4.2.0", + "@ledgerhq/currencies": "^4.2.0", + "@ledgerhq/hw-app-btc": "^4.2.0", + "@ledgerhq/hw-app-eth": "^4.2.0", + "@ledgerhq/hw-transport": "^4.2.0", + "@ledgerhq/hw-transport-node-hid": "^4.2.0", "axios": "^0.18.0", "babel-runtime": "^6.26.0", "bcryptjs": "^2.4.3", @@ -92,7 +92,8 @@ "smooth-scrollbar": "^8.2.6", "source-map-support": "^0.5.3", "styled-components": "^3.1.6", - "styled-system": "^2.1.0" + "styled-system": "^2.1.0", + "tippy.js": "^2.2.3" }, "devDependencies": { "@storybook/addon-actions": "^3.3.13", @@ -115,7 +116,7 @@ "concurrently": "^3.5.1", "dotenv": "^5.0.0", "electron": "1.8.2", - "electron-builder": "^20.0.5", + "electron-builder": "^20.0.7", "electron-devtools-installer": "^2.2.3", "electron-webpack": "1.13.0", "eslint": "^4.18.0", diff --git a/src/components/DashboardPage/AccountsOrder.js b/src/components/DashboardPage/AccountsOrder.js index 2aeede7d..218cb92a 100644 --- a/src/components/DashboardPage/AccountsOrder.js +++ b/src/components/DashboardPage/AccountsOrder.js @@ -1,9 +1,11 @@ // @flow import React, { Component } from 'react' +import styled from 'styled-components' import { compose } from 'redux' import { translate } from 'react-i18next' import { connect } from 'react-redux' +import debounce from 'lodash/debounce' import type { MapStateToProps } from 'react-redux' import type { T } from 'types/common' @@ -13,6 +15,7 @@ import { getOrderAccounts } from 'reducers/settings' import { updateOrderAccounts } from 'actions/accounts' import { saveSettings } from 'actions/settings' +import BoldToggle from 'components/base/BoldToggle' import Box from 'components/base/Box' import DropDown, { DropDownItem } from 'components/base/DropDown' import Text from 'components/base/Text' @@ -21,6 +24,14 @@ import IconAngleDown from 'icons/AngleDown' import IconArrowDown from 'icons/ArrowDown' import IconArrowUp from 'icons/ArrowUp' +const OrderIcon = styled(Box).attrs({ + alignItems: 'center', + justifyContent: 'center', + color: 'dodgerBlue', +})` + opacity: ${p => (p.isActive ? 1 : 0)}; +` + const mapStateToProps: MapStateToProps<*, *, *> = state => ({ orderAccounts: getOrderAccounts(state), }) @@ -50,15 +61,21 @@ class AccountsOrder extends Component { this.setState({ cachedValue: this.props.orderAccounts }) } - setAccountOrder = order => { - const { updateOrderAccounts, saveSettings } = this.props - this.setState({ cachedValue: order }, () => { - window.requestIdleCallback(() => { - updateOrderAccounts(order) - saveSettings({ orderAccounts: order }) + setAccountOrder = debounce( + order => { + const { updateOrderAccounts, saveSettings } = this.props + this.setState({ cachedValue: order }, () => { + window.requestIdleCallback(() => { + updateOrderAccounts(order) + saveSettings({ orderAccounts: order }) + }) }) - }) - } + }, + 250, + { + leading: true, + }, + ) getCurrentOrder = () => { const { cachedValue } = this.state @@ -122,16 +139,16 @@ class AccountsOrder extends Component { isActive={isActive} flow={2} > - {item.label} - {isActive && ( - - {order === 'desc' ? ( - - ) : ( - - )} - - )} + + {item.label} + + + {order === 'desc' ? ( + + ) : ( + + )} + ) } @@ -145,6 +162,7 @@ class AccountsOrder extends Component { return ( (p.isFocused ? 'dark' : 'warmGrey'), +})`` + const Input = styled.input` border: none; background: transparent; @@ -18,7 +26,15 @@ const Input = styled.input` } ` -class GlobalSearch extends PureComponent<{}> { +type State = { + isFocused: boolean, +} + +class GlobalSearch extends PureComponent<{}, State> { + state = { + isFocused: false, + } + _input = null focusInput = () => { @@ -27,14 +43,32 @@ class GlobalSearch extends PureComponent<{}> { } } + handleBlur = () => + this.setState({ + isFocused: false, + }) + + handleFocus = () => + this.setState({ + isFocused: true, + }) + render() { + const { isFocused } = this.state + return ( - + - (this._input = input)} /> - + (this._input = input)} + onBlur={this.handleBlur} + onFocus={this.handleFocus} + isFocused={isFocused} + /> + ) } } diff --git a/src/components/SideBar/index.js b/src/components/SideBar/index.js index 00aa118e..d1480188 100644 --- a/src/components/SideBar/index.js +++ b/src/components/SideBar/index.js @@ -22,8 +22,10 @@ import IconPlus from 'icons/Plus' import IconCurrencyBitcoin from 'icons/currencies/Bitcoin' import Box, { Tabbable } from 'components/base/Box' -import GrowScroll from 'components/base/GrowScroll' import FormattedVal from 'components/base/FormattedVal' +import GrowScroll from 'components/base/GrowScroll' +import Tooltip from 'components/base/Tooltip' + import Item from './Item' const CapsSubtitle = styled(Box).attrs({ @@ -47,13 +49,6 @@ const PlusBtn = styled(Tabbable).attrs({ })` cursor: pointer; outline: none; - &:hover, - &:focus { - background: ${p => p.theme.colors.cream}; - } - &:active { - background: ${p => p.theme.colors.argile}; - } ` type Props = { @@ -97,9 +92,11 @@ class SideBar extends PureComponent { {t('sidebar.accounts')} - openModal(MODAL_ADD_ACCOUNT)}> - - + t('addAccount.title')} offset={[0, 1]}> + openModal(MODAL_ADD_ACCOUNT)}> + + + {accounts.map(account => ( diff --git a/src/components/TopBar.js b/src/components/TopBar.js index cad02e74..31e68e4e 100644 --- a/src/components/TopBar.js +++ b/src/components/TopBar.js @@ -12,11 +12,12 @@ import { getAccounts } from 'reducers/accounts' import { lock } from 'reducers/application' import { hasPassword } from 'reducers/settings' -import IconDevices from 'icons/Devices' import IconActivity from 'icons/Activity' import IconAngleDown from 'icons/AngleDown' +import IconDevices from 'icons/Devices' +import IconUser from 'icons/User' -import DropDown from 'components/base/DropDown' +import DropDown, { DropDownItem as DDItem } from 'components/base/DropDown' import Box from 'components/base/Box' import GlobalSearch from 'components/GlobalSearch' @@ -58,6 +59,17 @@ const Activity = styled.div` width: 4px; ` +const DropDownItem = styled(DDItem).attrs({ + horizontal: true, + justifyContent: 'flex-start', + alignItems: 'center', + flow: 3, + ff: 'Open Sans|SemiBold', + px: 2, +})` + height: 35px; +` + const mapStateToProps: MapStateToProps<*, *, *> = state => ({ hasAccounts: getAccounts(state).length > 0, hasPassword: hasPassword(state), @@ -149,19 +161,37 @@ class TopBar extends PureComponent { , + }, + ...(hasPassword + ? [ + { + key: 'lock', + label: 'Lock application', + icon: , + onClick: this.handleLock, + }, + ] + : []), + ]} + renderItem={({ item, isHighlighted }) => ( + + {item.icon} + {item.label} + + )} alignItems="center" - justifyContent="center" - flow={1} color="warmGrey" + ff="Open Sans|SemiBold" + flow={1} + fontSize={4} horizontal + justifyContent="center" + offsetTop={-2} > {'Khalil Benihoud'} diff --git a/src/components/base/BoldToggle.js b/src/components/base/BoldToggle.js index deb046fc..8da40630 100644 --- a/src/components/base/BoldToggle.js +++ b/src/components/base/BoldToggle.js @@ -6,22 +6,22 @@ import Text from 'components/base/Text' import Box from 'components/base/Box' type Props = { - boldWeight?: string | number, - normalWeight?: string | number, + ff?: string | number, + ffBold?: string | number, isBold: boolean, children: any, } function BoldToggle(props: Props) { - const { boldWeight, normalWeight, isBold, children, ...p } = props + const { ff, ffBold, isBold, children, ...p } = props return ( - + {children} {!isBold && ( - + {children} @@ -31,8 +31,8 @@ function BoldToggle(props: Props) { } BoldToggle.defaultProps = { - boldWeight: 600, - normalWeight: 400, + ff: 'Open Sans', + ffBold: 'Open Sans|SemiBold', } export default BoldToggle diff --git a/src/components/base/DropDown/index.js b/src/components/base/DropDown/index.js index 9aaa3dda..5851f9ef 100644 --- a/src/components/base/DropDown/index.js +++ b/src/components/base/DropDown/index.js @@ -92,6 +92,12 @@ class DropDown extends PureComponent { case Downshift.stateChangeTypes.clickButton: return changes + case Downshift.stateChangeTypes.keyDownEnter: + return { + ...changes, + highlightedIndex: state.highlightedIndex, + } + default: return { ...changes, @@ -115,9 +121,9 @@ class DropDown extends PureComponent { return ( {items.map((item, i) => { - const { key } = item + const { key, ...props } = item return ( - + {renderItem({ item, isHighlighted: highlightedIndex === i, diff --git a/src/components/base/Tooltip/index.js b/src/components/base/Tooltip/index.js new file mode 100644 index 00000000..1d822a2d --- /dev/null +++ b/src/components/base/Tooltip/index.js @@ -0,0 +1,81 @@ +// @flow + +import React, { PureComponent } from 'react' +import styled from 'styled-components' +import tippy from 'tippy.js' + +import { space } from 'styles/theme' + +import Box from 'components/base/Box' + +const Container = styled(Box)` + display: inline-flex; +` + +const Template = styled.div` + display: none; +` + +const Wrapper = styled(Box).attrs({ + bg: 'transparent', + borderRadius: 1, + color: 'white', + ff: 'Open Sans|SemiBold', + fontSize: 2, + px: 2, + py: 1, +})`` + +type Props = { + offset?: Array, + children: any, + render: Function, +} + +class Tooltip extends PureComponent { + static defaultProps = { + offset: [0, 0], + } + + componentDidMount() { + const { offset } = this.props + + if (this._node && this._template) { + tippy(this._node, { + arrowType: 'round', + animateFill: false, + animation: 'shift-toward', + arrow: true, + html: this._template, + offset: offset ? offset.map(v => space[v]).join(',') : 0, + performance: true, + }) + + // Override default arrow ¯\_(ツ)_/¯ + if (this._node && this._node._tippy) { + this._node._tippy.popper.querySelector('.tippy-roundarrow').innerHTML = ` + + + ` + } + } + } + + _node = undefined + _template = undefined + + render() { + const { children, render } = this.props + + return ( + (this._node = n)}> + + {children} + + ) + } +} + +export default Tooltip diff --git a/src/components/base/Tooltip/stories.js b/src/components/base/Tooltip/stories.js new file mode 100644 index 00000000..ed05422f --- /dev/null +++ b/src/components/base/Tooltip/stories.js @@ -0,0 +1,10 @@ +// @flow + +import React from 'react' +import { storiesOf } from '@storybook/react' + +import Tooltip from 'components/base/Tooltip' + +const stories = storiesOf('Tooltip', module) + +stories.add('basic', () =>
Oyo!
}>Hover me!
) diff --git a/src/icons/User.js b/src/icons/User.js new file mode 100644 index 00000000..7e61d701 --- /dev/null +++ b/src/icons/User.js @@ -0,0 +1,10 @@ +import React from 'react' + +export default props => ( + + + +) diff --git a/src/index.ejs b/src/index.ejs index 00fa4d52..56a4906a 100644 --- a/src/index.ejs +++ b/src/index.ejs @@ -26,6 +26,13 @@ line-height: 1.5; } + input, + textarea { + font-family: "Open Sans", Arial, Helvetica, sans-serif;; + font-weight: 600; + line-height: normal; + } + #app { display: none; flex-direction: column; diff --git a/src/reducers/settings.js b/src/reducers/settings.js index 196fc07c..25f9823d 100644 --- a/src/reducers/settings.js +++ b/src/reducers/settings.js @@ -10,7 +10,7 @@ export type SettingsState = Object const state: SettingsState = { language: 'en', - orderAccounts: 'balance', + orderAccounts: 'balance|desc', password: { state: false, }, diff --git a/src/styles/global.js b/src/styles/global.js index 78e74329..197864bd 100644 --- a/src/styles/global.js +++ b/src/styles/global.js @@ -8,7 +8,8 @@ import '@fortawesome/fontawesome-free-solid' import '@fortawesome/fontawesome-free-regular' import '@fortawesome/fontawesome-free-brands' -import { fontFace } from 'styles/helpers' +import { fontFace, rgba } from 'styles/helpers' +import { radii, colors } from 'styles/theme' const fonts = { 'Open Sans': [ @@ -107,4 +108,16 @@ injectGlobal` .recharts-wrapper { cursor: inherit !important; } + + .tippy-tooltip { + background-color: ${rgba(colors.dark, 0.8)}; + border-radius: ${radii[1]}px; + padding: 0; + } + .tippy-tooltip .tippy-content { + background: transparent; + } + .tippy-popper .tippy-roundarrow { + fill: ${rgba(colors.dark, 0.8)}; + } ` diff --git a/src/styles/theme.js b/src/styles/theme.js index 0bae72bf..13c12d4e 100644 --- a/src/styles/theme.js +++ b/src/styles/theme.js @@ -60,6 +60,32 @@ export const fontFamilies = { }, } +export const colors = { + transparent: 'transparent', + + black: '#000000', + white: '#ffffff', + + argile: '#eeeeee', + blue: '#6193ff', + cream: '#f9f9f9', + grey: '#a8b6c2', + green: '#a6d495', + grenade: '#ea2e49', + lead: '#999999', + mouse: '#e2e2e2', + night: '#1d2028', + ocean: '#27d0e2', + pearl: '#f4f4f4', + shark: '#666666', + steel: '#767676', + + dark: '#1d2028', + dodgerBlue: '#4b84ff', + paleGrey: '#f7f8fa', + warmGrey: '#999999', +} + export default { sizes: { topBarHeight: 58, @@ -70,29 +96,5 @@ export default { fontSizes, space, shadows, - colors: { - transparent: 'transparent', - - black: '#000000', - white: '#ffffff', - - argile: '#eeeeee', - blue: '#6193ff', - cream: '#f9f9f9', - grey: '#a8b6c2', - green: '#a6d495', - grenade: '#ea2e49', - lead: '#999999', - mouse: '#e2e2e2', - night: '#1d2028', - ocean: '#27d0e2', - pearl: '#f4f4f4', - shark: '#666666', - steel: '#767676', - - dark: '#1d2028', - dodgerBlue: '#4b84ff', - paleGrey: '#f7f8fa', - warmGrey: '#999999', - }, + colors, } diff --git a/yarn.lock b/yarn.lock index 8152815f..086b24b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,13 +26,21 @@ version "0.0.6" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" -"@babel/code-frame@7.0.0-beta.36": - version "7.0.0-beta.36" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4" +"@babel/code-frame@7.0.0-beta.40", "@babel/code-frame@^7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz#37e2b0cf7c56026b4b21d3927cadf81adec32ac6" dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" + "@babel/highlight" "7.0.0-beta.40" + +"@babel/generator@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.40.tgz#ab61f9556f4f71dbd1138949c795bb9a21e302ea" + dependencies: + "@babel/types" "7.0.0-beta.40" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" "@babel/helper-annotate-as-pure@^7.0.0-beta.37": version "7.0.0-beta.40" @@ -40,19 +48,19 @@ dependencies: "@babel/types" "7.0.0-beta.40" -"@babel/helper-function-name@7.0.0-beta.36": - version "7.0.0-beta.36" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d" +"@babel/helper-function-name@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.40.tgz#9d033341ab16517f40d43a73f2d81fc431ccd7b6" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.36" - "@babel/template" "7.0.0-beta.36" - "@babel/types" "7.0.0-beta.36" + "@babel/helper-get-function-arity" "7.0.0-beta.40" + "@babel/template" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" -"@babel/helper-get-function-arity@7.0.0-beta.36": - version "7.0.0-beta.36" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8" +"@babel/helper-get-function-arity@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.40.tgz#ac0419cf067b0ec16453e1274f03878195791c6e" dependencies: - "@babel/types" "7.0.0-beta.36" + "@babel/types" "7.0.0-beta.40" "@babel/helper-module-imports@7.0.0-beta.35": version "7.0.0-beta.35" @@ -61,23 +69,32 @@ "@babel/types" "7.0.0-beta.35" lodash "^4.2.0" -"@babel/template@7.0.0-beta.36": - version "7.0.0-beta.36" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00" +"@babel/highlight@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.40.tgz#b43d67d76bf46e1d10d227f68cddcd263786b255" dependencies: - "@babel/code-frame" "7.0.0-beta.36" - "@babel/types" "7.0.0-beta.36" - babylon "7.0.0-beta.36" + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/template@7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.40.tgz#034988c6424eb5c3268fe6a608626de1f4410fc8" + dependencies: + "@babel/code-frame" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" + babylon "7.0.0-beta.40" lodash "^4.2.0" -"@babel/traverse@7.0.0-beta.36": - version "7.0.0-beta.36" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261" +"@babel/traverse@^7.0.0-beta.40": + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.40.tgz#d140e449b2e093ef9fe1a2eecc28421ffb4e521e" dependencies: - "@babel/code-frame" "7.0.0-beta.36" - "@babel/helper-function-name" "7.0.0-beta.36" - "@babel/types" "7.0.0-beta.36" - babylon "7.0.0-beta.36" + "@babel/code-frame" "7.0.0-beta.40" + "@babel/generator" "7.0.0-beta.40" + "@babel/helper-function-name" "7.0.0-beta.40" + "@babel/types" "7.0.0-beta.40" + babylon "7.0.0-beta.40" debug "^3.0.1" globals "^11.1.0" invariant "^2.2.0" @@ -91,15 +108,7 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@babel/types@7.0.0-beta.36": - version "7.0.0-beta.36" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - -"@babel/types@7.0.0-beta.40": +"@babel/types@7.0.0-beta.40", "@babel/types@^7.0.0-beta.40": version "7.0.0-beta.40" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.40.tgz#25c3d7aae14126abe05fcb098c65a66b6d6b8c14" dependencies: @@ -141,9 +150,9 @@ dependencies: humps "^2.0.1" -"@ledgerhq/common@2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/common/-/common-2.3.0.tgz#a6bffa04f05f939f40e623ab8f3c39906ef36dbd" +"@ledgerhq/common@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/common/-/common-4.2.0.tgz#b4e831f2d4b6b9550660141ae4f3aee0198a0987" dependencies: fbjs "^0.8.16" invariant "^2.2.2" @@ -156,35 +165,35 @@ redux "^3.7.2" redux-thunk "^2.2.0" -"@ledgerhq/currencies@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/currencies/-/currencies-2.3.0.tgz#4f76a7a47890d23a754b34da4d615fa479e2edec" +"@ledgerhq/currencies@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/currencies/-/currencies-4.2.0.tgz#c54e9d19493c1086dbdbc968096dcc107c46becc" dependencies: querystring "^0.2.0" -"@ledgerhq/hw-app-btc@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-4.0.0.tgz#716e7a31a8bc4750375d26e666de667f4f8f7c3d" +"@ledgerhq/hw-app-btc@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-4.2.0.tgz#1591de7a8bb6e9b4d3f39e969abda605c5adeb18" dependencies: - "@ledgerhq/hw-transport" "^4.0.0" + "@ledgerhq/hw-transport" "^4.2.0" create-hash "^1.1.3" -"@ledgerhq/hw-app-eth@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-4.0.0.tgz#2367efa8c3ccfb50ecbf7c1ccadc05cd9a943096" +"@ledgerhq/hw-app-eth@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-4.2.0.tgz#cbbf57f57d44ea0912f173c9c9d3135ee122c942" dependencies: - "@ledgerhq/hw-transport" "^4.0.0" + "@ledgerhq/hw-transport" "^4.2.0" -"@ledgerhq/hw-transport-node-hid@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.0.0.tgz#6b3aae9da62b9601476f57d651b06a6d172c0ee9" +"@ledgerhq/hw-transport-node-hid@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.2.0.tgz#cbfaa47748c1b617d9dab4e822d2a60582699a29" dependencies: - "@ledgerhq/hw-transport" "^4.0.0" + "@ledgerhq/hw-transport" "^4.2.0" node-hid "^0.7.2" -"@ledgerhq/hw-transport@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.0.0.tgz#de0bab8d1d7e963b069bbd1164bc687e8616c5e4" +"@ledgerhq/hw-transport@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.2.0.tgz#ed0c30fc36beb0c9760fbdcb29ee4e0c61be37e8" dependencies: events "^1.1.1" @@ -559,14 +568,26 @@ app-builder-bin-linux@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.3.5.tgz#8ef1a839d0614b81e0f11bd593ff533a058d7c5b" +app-builder-bin-linux@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.3.6.tgz#45344c4b09b3c2febc3a452e8916fa00aa645b62" + app-builder-bin-mac@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.3.5.tgz#3a9d3dea92f4fd5cf531a8947571c4c67a10761b" +app-builder-bin-mac@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.3.6.tgz#c7df8f4c349292c789e557a285df2279d05b8201" + app-builder-bin-win@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.3.5.tgz#5d2a3c31e8a54991498f861b5a0cbe0227a91e9c" +app-builder-bin-win@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.3.6.tgz#b492c0573cfa4206fb9f33756d6ab844e04ce0b8" + app-builder-bin@1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.3.5.tgz#70d6a16a19265cd764747779c84017abc14abce4" @@ -575,6 +596,14 @@ app-builder-bin@1.3.5: app-builder-bin-mac "1.3.5" app-builder-bin-win "1.3.5" +app-builder-bin@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.3.6.tgz#fbc49a3b74917f5e23632c71ea1a3ea9b083424e" + optionalDependencies: + app-builder-bin-linux "1.3.6" + app-builder-bin-mac "1.3.6" + app-builder-bin-win "1.3.6" + app-root-path@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" @@ -841,13 +870,13 @@ babel-core@^6.26.0: source-map "^0.5.6" babel-eslint@^8.2.1: - version "8.2.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951" + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.2.tgz#1102273354c6f0b29b4ea28a65f97d122296b68b" dependencies: - "@babel/code-frame" "7.0.0-beta.36" - "@babel/traverse" "7.0.0-beta.36" - "@babel/types" "7.0.0-beta.36" - babylon "7.0.0-beta.36" + "@babel/code-frame" "^7.0.0-beta.40" + "@babel/traverse" "^7.0.0-beta.40" + "@babel/types" "^7.0.0-beta.40" + babylon "^7.0.0-beta.40" eslint-scope "~3.7.1" eslint-visitor-keys "^1.0.0" @@ -1755,9 +1784,9 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.36: - version "7.0.0-beta.36" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e" +babylon@7.0.0-beta.40, babylon@^7.0.0-beta.40: + version "7.0.0-beta.40" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.40.tgz#91fc8cd56d5eb98b28e6fde41045f2957779940a" babylon@^6.14.1, babylon@^6.18.0: version "6.18.0" @@ -2136,6 +2165,25 @@ builder-util@5.3.0, builder-util@^5.3.0: stat-mode "^0.2.2" temp-file "^3.1.1" +builder-util@5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.3.1.tgz#e90831153268803962b2a96afcba31dfa4223c39" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.3.6" + bluebird-lst "^1.0.5" + builder-util-runtime "^4.0.5" + chalk "^2.3.0" + debug "^3.1.0" + fs-extra-p "^4.5.2" + is-ci "^1.1.0" + js-yaml "^3.10.0" + lazy-val "^1.0.3" + semver "^5.5.0" + source-map-support "^0.5.3" + stat-mode "^0.2.2" + temp-file "^3.1.1" + builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -2236,12 +2284,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.30000809" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000809.tgz#b0b88434a598f40b546d46a4dbd839b0ff798f4d" + version "1.0.30000810" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000810.tgz#bd25830c41efab64339a2e381f49677343c84509" caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: - version "1.0.30000809" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000809.tgz#1e12c1344b8f74d56737ee2614bcedb648943479" + version "1.0.30000810" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz#47585fffce0e9f3593a6feea4673b945424351d9" capture-stack-trace@^1.0.0: version "1.0.0" @@ -3337,7 +3385,36 @@ ejs@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@20.0.6, electron-builder-lib@~20.0.5: +electron-builder-lib@20.0.7: + version "20.0.7" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.0.7.tgz#d9925bb326f9db081586058bc4ff78bf2145b4be" + dependencies: + "7zip-bin" "~3.1.0" + app-builder-bin "1.3.6" + async-exit-hook "^2.0.1" + bluebird-lst "^1.0.5" + builder-util "5.3.1" + builder-util-runtime "4.0.5" + chromium-pickle-js "^0.2.0" + debug "^3.1.0" + ejs "^2.5.7" + electron-osx-sign "0.4.8" + electron-publish "20.0.6" + fs-extra-p "^4.5.2" + hosted-git-info "^2.5.0" + is-ci "^1.1.0" + isbinaryfile "^3.0.2" + js-yaml "^3.10.0" + lazy-val "^1.0.3" + minimatch "^3.0.4" + normalize-package-data "^2.4.0" + plist "^2.1.0" + read-config-file "3.0.0" + sanitize-filename "^1.6.1" + semver "^5.5.0" + temp-file "^3.1.1" + +electron-builder-lib@~20.0.5: version "20.0.6" resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.0.6.tgz#1484108626312026cf5c2188aefe0c33f40bad81" dependencies: @@ -3366,16 +3443,16 @@ electron-builder-lib@20.0.6, electron-builder-lib@~20.0.5: semver "^5.5.0" temp-file "^3.1.1" -electron-builder@^20.0.5: - version "20.0.6" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.0.6.tgz#74393c405e70947511e2ca71431f66bab8f3e82a" +electron-builder@^20.0.7: + version "20.0.7" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.0.7.tgz#daaa45efb7eeff77a76362671e1dc359d9d931c1" dependencies: bluebird-lst "^1.0.5" - builder-util "5.3.0" + builder-util "5.3.1" builder-util-runtime "4.0.5" chalk "^2.3.0" dmg-builder "4.1.0" - electron-builder-lib "20.0.6" + electron-builder-lib "20.0.7" electron-download-tf "4.3.4" fs-extra-p "^4.5.2" is-ci "^1.1.0" @@ -4143,14 +4220,7 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.6.tgz#7b9a8f2c58f00a77fddf49e940f7ac978a3ea0e8" - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" - -file-loader@^1.1.7: +file-loader@^1.1.6, file-loader@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.7.tgz#0a3ad0fe81695feeed6f2dac324fce500c30f0a0" dependencies: @@ -5111,8 +5181,8 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + version "2.2.3" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" dependencies: loose-envify "^1.0.0" @@ -5124,9 +5194,9 @@ ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" -ipaddr.js@1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" +ipaddr.js@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" is-absolute-url@^2.0.0: version "2.1.0" @@ -5519,6 +5589,10 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -6883,6 +6957,10 @@ podda@^1.2.2: babel-runtime "^6.11.6" immutable "^3.8.1" +popper.js@^1.12.9: + version "1.12.9" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.9.tgz#0dfbc2dff96c451bb332edcfcfaaf566d331d5b3" + portfinder@^1.0.9: version "1.0.13" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" @@ -7290,11 +7368,11 @@ prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, object-assign "^4.1.1" proxy-addr@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" + version "2.0.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" dependencies: forwarded "~0.1.2" - ipaddr.js "1.5.2" + ipaddr.js "1.6.0" prr@~1.0.1: version "1.0.1" @@ -7946,10 +8024,11 @@ regex-cache@^0.4.2: is-equal-shallow "^0.1.3" regex-not@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9" + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" dependencies: - extend-shallow "^2.0.1" + extend-shallow "^3.0.2" + safe-regex "^1.1.0" regexpu-core@^1.0.0: version "1.0.0" @@ -8149,6 +8228,10 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -8210,6 +8293,12 @@ safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + sanitize-filename@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" @@ -8548,7 +8637,7 @@ source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -9027,6 +9116,12 @@ tinycolor2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" +tippy.js@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-2.2.3.tgz#ae2aa54763a86d38682de199ef7f6442c2926413" + dependencies: + popper.js "^1.12.9" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"