Browse Source

Merge pull request #146 from loeck/master

Add Tooltip component, fix Dropdown
master
Meriadec Pillet 7 years ago
committed by GitHub
parent
commit
436892547e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      package.json
  2. 54
      src/components/DashboardPage/AccountsOrder.js
  3. 42
      src/components/GlobalSearch.js
  4. 19
      src/components/SideBar/index.js
  5. 54
      src/components/TopBar.js
  6. 14
      src/components/base/BoldToggle.js
  7. 10
      src/components/base/DropDown/index.js
  8. 81
      src/components/base/Tooltip/index.js
  9. 10
      src/components/base/Tooltip/stories.js
  10. 10
      src/icons/User.js
  11. 7
      src/index.ejs
  12. 2
      src/reducers/settings.js
  13. 15
      src/styles/global.js
  14. 52
      src/styles/theme.js
  15. 291
      yarn.lock

17
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",

54
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<Props, State> {
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<Props, State> {
isActive={isActive}
flow={2}
>
<Box grow>{item.label}</Box>
{isActive && (
<Box alignItems="center" justifyContent="center" color="dodgerBlue">
{order === 'desc' ? (
<IconArrowUp height={14} width={14} />
) : (
<IconArrowDown height={14} width={14} />
)}
</Box>
)}
<Box grow alignItems="flex-start">
<BoldToggle isBold={isActive}>{item.label}</BoldToggle>
</Box>
<OrderIcon isActive={isActive}>
{order === 'desc' ? (
<IconArrowUp height={14} width={14} />
) : (
<IconArrowDown height={14} width={14} />
)}
</OrderIcon>
</DropDownItem>
)
}
@ -145,6 +162,7 @@ class AccountsOrder extends Component<Props, State> {
return (
<DropDown
flow={1}
offsetTop={2}
horizontal
items={sortItems}
renderItem={this.renderItem}

42
src/components/GlobalSearch.js

@ -7,6 +7,14 @@ import IconSearch from 'icons/Search'
import Box from 'components/base/Box'
const Container = styled(Box).attrs({
grow: true,
horizontal: true,
ff: 'Open Sans|SemiBold',
fontSize: 4,
color: p => (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 (
<Box grow horizontal ff="Open Sans|SemiBold" fontSize={4}>
<Container isFocused={isFocused}>
<Box justifyContent="center" onClick={this.focusInput} pr={2}>
<IconSearch height={16} width={16} />
</Box>
<Input placeholder="Search" innerRef={input => (this._input = input)} />
</Box>
<Input
placeholder="Search"
innerRef={input => (this._input = input)}
onBlur={this.handleBlur}
onFocus={this.handleFocus}
isFocused={isFocused}
/>
</Container>
)
}
}

19
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<Props> {
<Box flow={4} grow pt={1}>
<CapsSubtitle horizontal alignItems="center">
<Box grow>{t('sidebar.accounts')}</Box>
<PlusBtn onClick={() => openModal(MODAL_ADD_ACCOUNT)}>
<IconPlus height={14} width={14} />
</PlusBtn>
<Tooltip render={() => t('addAccount.title')} offset={[0, 1]}>
<PlusBtn onClick={() => openModal(MODAL_ADD_ACCOUNT)}>
<IconPlus height={14} width={14} />
</PlusBtn>
</Tooltip>
</CapsSubtitle>
<GrowScroll pb={4} px={4} flow={2}>
{accounts.map(account => (

54
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<Props, State> {
</Box>
<Box horizontal noShrink>
<DropDown
items={
hasPassword
? [{ key: 'lock', label: 'Lock application', onClick: this.handleLock }]
: []
}
ff="Open Sans|SemiBold"
fontSize={4}
offsetTop={-2}
items={[
{
key: 'profile',
label: 'Edit profile',
icon: <IconUser height={16} width={16} />,
},
...(hasPassword
? [
{
key: 'lock',
label: 'Lock application',
icon: <IconUser height={16} width={16} />,
onClick: this.handleLock,
},
]
: []),
]}
renderItem={({ item, isHighlighted }) => (
<DropDownItem isHighlighted={isHighlighted}>
<Box color={isHighlighted ? 'dodgerBlue' : ''}>{item.icon}</Box>
<Box>{item.label}</Box>
</DropDownItem>
)}
alignItems="center"
justifyContent="center"
flow={1}
color="warmGrey"
ff="Open Sans|SemiBold"
flow={1}
fontSize={4}
horizontal
justifyContent="center"
offsetTop={-2}
>
<Box>{'Khalil Benihoud'}</Box>
<IconAngleDown height={7} width={8} />

14
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 (
<Box relative>
<Text fontWeight={boldWeight} style={{ opacity: isBold ? 1 : 0 }} {...p}>
<Text ff={ffBold} style={{ opacity: isBold ? 1 : 0 }} {...p}>
{children}
</Text>
{!isBold && (
<Box sticky alignItems="center" justifyContent="center">
<Text fontWeight={normalWeight} {...p}>
<Text ff={ff} {...p}>
{children}
</Text>
</Box>
@ -31,8 +31,8 @@ function BoldToggle(props: Props) {
}
BoldToggle.defaultProps = {
boldWeight: 600,
normalWeight: 400,
ff: 'Open Sans',
ffBold: 'Open Sans|SemiBold',
}
export default BoldToggle

10
src/components/base/DropDown/index.js

@ -92,6 +92,12 @@ class DropDown extends PureComponent<Props> {
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<Props> {
return (
<Drop mt={offsetTop}>
{items.map((item, i) => {
const { key } = item
const { key, ...props } = item
return (
<Box key={key} {...getItemProps({ item })}>
<Box key={key} {...getItemProps({ item })} {...props}>
{renderItem({
item,
isHighlighted: highlightedIndex === i,

81
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<number>,
children: any,
render: Function,
}
class Tooltip extends PureComponent<Props> {
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 = `
<svg viewBox="0 0 24 8">
<path d="M5 8l5.5-5.6c.8-.8 2-.8 2.8 0L19 8" />
</svg>`
}
}
}
_node = undefined
_template = undefined
render() {
const { children, render } = this.props
return (
<Container innerRef={n => (this._node = n)}>
<Template>
<Wrapper innerRef={n => (this._template = n)}>{render()}</Wrapper>
</Template>
{children}
</Container>
)
}
}
export default Tooltip

10
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', () => <Tooltip render={() => <div>Oyo!</div>}>Hover me!</Tooltip>)

10
src/icons/User.js

@ -0,0 +1,10 @@
import React from 'react'
export default props => (
<svg viewBox="0 0 16 16" {...props}>
<path
fill="currentColor"
d="M14.5055556 14.5c0 .4142136-.3357864.75-.75.75s-.75-.3357864-.75-.75v-1.4444444c0-1.1812758-.9576132-2.1388889-2.1388889-2.1388889H5.08888894c-1.18127572 0-2.13888889.9576131-2.13888889 2.1388889V14.5c0 .4142136-.33578644.75-.75.75s-.75-.3357864-.75-.75v-1.4444444c0-2.0097029 1.62918605-3.63888893 3.63888889-3.63888893h5.77777776c2.0097029 0 3.6388889 1.62918603 3.6388889 3.63888893V14.5zM7.97777783 8.02777778c-2.00970284 0-3.63888889-1.62918605-3.63888889-3.63888889S5.96807499.75 7.97777783.75s3.63888887 1.62918605 3.63888887 3.63888889-1.62918603 3.63888889-3.63888887 3.63888889zm0-1.5c1.18127571 0 2.13888887-.95761318 2.13888887-2.13888889C10.1166667 3.20761317 9.15905354 2.25 7.97777783 2.25c-1.18127572 0-2.13888889.95761317-2.13888889 2.13888889 0 1.18127571.95761317 2.13888889 2.13888889 2.13888889z"
/>
</svg>
)

7
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;

2
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,
},

15
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)};
}
`

52
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,
}

291
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"
@ -6884,6 +6958,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"
@ -7291,11 +7369,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"
@ -7947,10 +8025,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"
@ -8150,6 +8229,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"
@ -8211,6 +8294,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"
@ -8549,7 +8638,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"
@ -9028,6 +9117,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"

Loading…
Cancel
Save