Browse Source

Merge pull request #194 from loeck/master

Clean helpers format, fix Tooltip on chart
master
Meriadec Pillet 7 years ago
committed by GitHub
parent
commit
cda182abf9
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      jest.config.js
  2. 4
      package.json
  3. 15
      src/actions/counterValues.js
  4. 13
      src/components/AccountPage/index.js
  5. 20
      src/components/BalanceSummary/BalanceInfos.js
  6. 33
      src/components/BalanceSummary/index.js
  7. 7
      src/components/CalculateBalance.js
  8. 5
      src/components/DashboardPage/AccountCard.js
  9. 3
      src/components/DashboardPage/AccountsOrder.js
  10. 12
      src/components/DashboardPage/index.js
  11. 5
      src/components/IsUnlocked.js
  12. 3
      src/components/ReceiveBox.js
  13. 14
      src/components/SelectAccount/index.js
  14. 88
      src/components/SettingsPage/Money.js
  15. 19
      src/components/SettingsPage/index.js
  16. 5
      src/components/SideBar/Item.js
  17. 5
      src/components/SideBar/index.js
  18. 5
      src/components/TopBar.js
  19. 3
      src/components/UpdateNotifier.js
  20. 73
      src/components/base/Chart/index.js
  21. 5
      src/components/base/FormattedVal/index.js
  22. 25
      src/components/base/Modal/index.js
  23. 6
      src/components/base/Tooltip/index.js
  24. 3
      src/components/modals/AddAccount/index.js
  25. 8
      src/helpers/__tests__/balance.test.js
  26. 12
      src/helpers/balance.js
  27. 19
      src/helpers/format.js
  28. 9
      src/helpers/staticPath.js
  29. 17
      src/reducers/settings.js
  30. 5
      src/types/common.js
  31. 1
      static/i18n/en/settings.yml
  32. 390
      yarn.lock

6
jest.config.js

@ -1,6 +0,0 @@
module.exports = {
globals: {
__DEV__: true,
__TEST__: true,
},
}

4
package.json

@ -69,7 +69,7 @@
"history": "^4.7.2",
"i18next": "^10.5.0",
"i18next-node-fs-backend": "^1.0.0",
"ledger-test-library": "KhalilBellakrid/ledger-test-library-nodejs",
"ledger-test-library": "KhalilBellakrid/ledger-test-library-nodejs#7d37482",
"lodash": "^4.17.5",
"moment": "^2.20.1",
"object-path": "^0.11.4",
@ -118,7 +118,7 @@
"chance": "^1.0.13",
"concurrently": "^3.5.1",
"dotenv": "^5.0.1",
"electron": "1.8.2",
"electron": "1.8.3",
"electron-builder": "^20.2.0",
"electron-devtools-installer": "^2.2.3",
"electron-rebuild": "^1.7.3",

15
src/actions/counterValues.js

@ -8,21 +8,22 @@ import get from 'lodash/get'
import db from 'helpers/db'
type InitCounterValues = () => { type: string, payload: Object }
export type InitCounterValues = () => { type: string, payload: Object }
export const initCounterValues: InitCounterValues = () => ({
type: 'UPDATE_COUNTER_VALUES',
payload: db.get('counterValues'),
})
type UpdateCounterValues = Object => { type: string, payload: Object }
export type UpdateCounterValues = Object => { type: string, payload: Object }
export const updateCounterValues: UpdateCounterValues = payload => ({
type: 'DB:UPDATE_COUNTER_VALUES',
payload,
})
type FetchCounterValues = (?number) => (Dispatch<*>, Function) => Promise<any>
export type FetchCounterValues = (?number) => (Dispatch<*>, Function) => Promise<any>
export const fetchCounterValues: FetchCounterValues = coinType => (dispatch, getState) => {
const { accounts, counterValues } = getState()
const { accounts, counterValues, settings } = getState()
const { counterValue } = settings
let coinTypes = []
@ -36,7 +37,7 @@ export const fetchCounterValues: FetchCounterValues = coinType => (dispatch, get
const fetchCounterValuesByCoinType = coinType => {
const { code } = getDefaultUnitByCoinType(coinType)
const todayCounterValues = get(counterValues, `${code}-USD.${today}`, null)
const todayCounterValues = get(counterValues, `${code}-${counterValue}.${today}`, null)
if (todayCounterValues !== null) {
return null
@ -44,10 +45,10 @@ export const fetchCounterValues: FetchCounterValues = coinType => (dispatch, get
return axios
.get(
`https://min-api.cryptocompare.com/data/histoday?&extraParams=ledger-test&fsym=${code}&tsym=USD&allData=1`,
`https://min-api.cryptocompare.com/data/histoday?&extraParams=ledger-test&fsym=${code}&tsym=${counterValue}&allData=1`,
)
.then(({ data }) => ({
symbol: `${code}-USD`,
symbol: `${code}-${counterValue}`,
values: data.Data.reduce((result, d) => {
const date = moment(d.time * 1000).format('YYYY-MM-DD')
result[date] = d.close

13
src/components/AccountPage/index.js

@ -8,10 +8,10 @@ import { Redirect } from 'react-router'
import { MODAL_SEND, MODAL_RECEIVE, MODAL_SETTINGS_ACCOUNT } from 'constants'
import type { MapStateToProps } from 'react-redux'
import type { T, Account } from 'types/common'
import { getAccountById } from 'reducers/accounts'
import { getCounterValue } from 'reducers/settings'
import { openModal } from 'reducers/modals'
import IconControls from 'icons/Controls'
@ -32,8 +32,9 @@ import TransactionsList from 'components/TransactionsList'
import AccountHeader from './AccountHeader'
const mapStateToProps: MapStateToProps<*, *, *> = (state, props) => ({
const mapStateToProps = (state, props) => ({
account: getAccountById(state, props.match.params.id),
counterValue: getCounterValue(state),
})
const mapDispatchToProps = {
@ -41,6 +42,7 @@ const mapDispatchToProps = {
}
type Props = {
counterValue: string,
t: T,
account?: Account,
openModal: Function,
@ -64,7 +66,7 @@ class AccountPage extends PureComponent<Props, State> {
})
render() {
const { account, openModal, t } = this.props
const { account, openModal, t, counterValue } = this.props
const { selectedTime, daysCount } = this.state
// Don't even throw if we jumped in wrong account route
@ -101,6 +103,7 @@ class AccountPage extends PureComponent<Props, State> {
</Box>
<Box mb={7}>
<BalanceSummary
counterValue={counterValue}
chartColor={account.currency.color}
chartId={`account-chart-${account.id}`}
accounts={[account]}
@ -114,7 +117,7 @@ class AccountPage extends PureComponent<Props, State> {
<FormattedVal
alwaysShowSign={false}
color="warmGrey"
fiat="USD"
fiat={counterValue}
fontSize={6}
showCode
style={{ lineHeight: 1 }}
@ -140,7 +143,7 @@ class AccountPage extends PureComponent<Props, State> {
/>
<BalanceSinceDiff
t={t}
fiat="USD"
counterValue={counterValue}
alignItems="center"
totalBalance={totalBalance}
sinceBalance={sinceBalance}

20
src/components/BalanceSummary/BalanceInfos.js

@ -28,13 +28,13 @@ type BalanceSinceProps = {
type BalanceTotalProps = {
children?: any,
fiat?: string,
counterValue?: string,
totalBalance: number,
unit?: Unit,
}
type Props = {
fiat: string,
counterValue: string,
} & BalanceSinceProps
export function BalanceSincePercent(props: BalanceSinceProps) {
@ -53,11 +53,11 @@ export function BalanceSincePercent(props: BalanceSinceProps) {
}
export function BalanceSinceDiff(props: Props) {
const { t, totalBalance, sinceBalance, since, fiat, ...otherProps } = props
const { t, totalBalance, sinceBalance, since, counterValue, ...otherProps } = props
return (
<Box {...otherProps}>
<FormattedVal
fiat={fiat}
fiat={counterValue}
alwaysShowSign
showCode
val={totalBalance - sinceBalance}
@ -69,13 +69,13 @@ export function BalanceSinceDiff(props: Props) {
}
export function BalanceTotal(props: BalanceTotalProps) {
const { fiat, totalBalance, children, unit } = props
const { counterValue, totalBalance, children, unit } = props
return (
<Box grow>
<FormattedVal
alwaysShowSign={false}
color="dark"
fiat={fiat}
fiat={counterValue}
fontSize={8}
showCode
style={{ lineHeight: 1 }}
@ -88,16 +88,16 @@ export function BalanceTotal(props: BalanceTotalProps) {
}
BalanceTotal.defaultProps = {
fiat: undefined,
counterValue: undefined,
children: null,
unit: undefined,
}
function BalanceInfos(props: Props) {
const { t, fiat, totalBalance, since, sinceBalance, refBalance } = props
const { t, totalBalance, since, sinceBalance, refBalance, counterValue } = props
return (
<Box horizontal alignItems="flex-end" flow={7}>
<BalanceTotal fiat={fiat} totalBalance={totalBalance}>
<BalanceTotal counterValue={counterValue} totalBalance={totalBalance}>
<Sub>{t('dashboard:totalBalance')}</Sub>
</BalanceTotal>
<BalanceSincePercent
@ -109,7 +109,7 @@ function BalanceInfos(props: Props) {
t={t}
/>
<BalanceSinceDiff
fiat="USD"
counterValue={counterValue}
alignItems="flex-end"
totalBalance={totalBalance}
sinceBalance={sinceBalance}

33
src/components/BalanceSummary/index.js

@ -13,7 +13,32 @@ import { AreaChart } from 'components/base/Chart'
import Box, { Card } from 'components/base/Box'
import CalculateBalance from 'components/CalculateBalance'
function getTickCountX(selectedTime) {
switch (selectedTime) {
default:
case 'week':
return 7
case 'month':
return 10
case 'year':
return 13
}
}
function renderTickX(selectedTime) {
let format = 'MMM. D'
if (selectedTime === 'year') {
format = 'MMM.'
}
return t => moment(t).format(format)
}
type Props = {
counterValue: string,
chartColor: string,
chartId: string,
accounts: Accounts,
@ -23,6 +48,7 @@ type Props = {
}
const BalanceSummary = ({
counterValue,
chartColor,
chartId,
accounts,
@ -30,10 +56,11 @@ const BalanceSummary = ({
daysCount,
renderHeader,
}: Props) => {
const unit = getFiatUnit('USD')
const unit = getFiatUnit(counterValue)
return (
<Card p={0} py={6}>
<CalculateBalance
counterValue={counterValue}
accounts={accounts}
daysCount={daysCount}
render={({ allBalances, totalBalance, sinceBalance, refBalance }) => (
@ -66,8 +93,10 @@ const BalanceSummary = ({
showCode: true,
})
}
renderTickX={t => moment(t).format('MMM. D')}
renderTickX={renderTickX(selectedTime)}
renderTickY={t => formatShort(unit, t)}
tickCountX={getTickCountX(selectedTime)}
tickCountY={4}
/>
</Box>
</Fragment>

7
src/components/CalculateBalance.js

@ -7,16 +7,15 @@ import find from 'lodash/find'
import first from 'lodash/first'
import last from 'lodash/last'
import type { MapStateToProps } from 'react-redux'
import type { Accounts } from 'types/common'
import { getBalanceHistoryForAccounts } from 'helpers/balance'
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
counterValues: state.counterValues,
})
function calculateBalance(props) {
function calculateBalance(props: Object) {
const interval = {
start: moment()
.subtract(props.daysCount, 'days')
@ -25,7 +24,7 @@ function calculateBalance(props) {
}
const allBalances = getBalanceHistoryForAccounts({
fiat: 'USD',
counterValue: props.counterValue,
accounts: props.accounts,
counterValues: props.counterValues,
interval,

5
src/components/DashboardPage/AccountCard.js

@ -12,10 +12,12 @@ import CalculateBalance from 'components/CalculateBalance'
import FormattedVal from 'components/base/FormattedVal'
const AccountCard = ({
counterValue,
account,
onClick,
daysCount,
}: {
counterValue: string,
account: Account,
onClick: Function,
daysCount: number,
@ -57,6 +59,7 @@ const AccountCard = ({
</Box>
</Box>
<CalculateBalance
counterValue={counterValue}
accounts={[account]}
daysCount={daysCount}
render={({ allBalances, totalBalance, refBalance }) => (
@ -64,7 +67,7 @@ const AccountCard = ({
<Box flow={2} horizontal>
<Box justifyContent="center">
<FormattedVal
fiat="USD"
fiat={counterValue}
val={totalBalance}
alwaysShowSign={false}
showCode

3
src/components/DashboardPage/AccountsOrder.js

@ -7,7 +7,6 @@ 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'
import { getOrderAccounts } from 'reducers/settings'
@ -32,7 +31,7 @@ const OrderIcon = styled(Box).attrs({
opacity: ${p => (p.isActive ? 1 : 0)};
`
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
orderAccounts: getOrderAccounts(state),
})

12
src/components/DashboardPage/index.js

@ -10,10 +10,10 @@ import chunk from 'lodash/chunk'
import get from 'lodash/get'
import sortBy from 'lodash/sortBy'
import type { MapStateToProps } from 'react-redux'
import type { Account, Accounts, T } from 'types/common'
import { getVisibleAccounts } from 'reducers/accounts'
import { getCounterValue } from 'reducers/settings'
import { updateOrderAccounts } from 'actions/accounts'
import { saveSettings } from 'actions/settings'
@ -28,8 +28,9 @@ import TransactionsList from 'components/TransactionsList'
import AccountCard from './AccountCard'
import AccountsOrder from './AccountsOrder'
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
accounts: getVisibleAccounts(state),
counterValue: getCounterValue(state),
})
const mapDispatchToProps = {
@ -42,6 +43,7 @@ type Props = {
t: T,
accounts: Accounts,
push: Function,
counterValue: string,
}
type State = {
@ -107,7 +109,7 @@ class DashboardPage extends PureComponent<Props, State> {
})
render() {
const { push, accounts, t } = this.props
const { push, accounts, t, counterValue } = this.props
const { accountsChunk, allTransactions, selectedTime, daysCount } = this.state
const totalAccounts = accounts.length
@ -132,6 +134,7 @@ class DashboardPage extends PureComponent<Props, State> {
{totalAccounts > 0 && (
<Fragment>
<BalanceSummary
counterValue={counterValue}
chartId="dashboard-chart"
chartColor="#5286f7"
accounts={accounts}
@ -140,7 +143,7 @@ class DashboardPage extends PureComponent<Props, State> {
renderHeader={({ totalBalance, selectedTime, sinceBalance, refBalance }) => (
<BalanceInfos
t={t}
fiat="USD"
counterValue={counterValue}
totalBalance={totalBalance}
since={selectedTime}
sinceBalance={sinceBalance}
@ -174,6 +177,7 @@ class DashboardPage extends PureComponent<Props, State> {
/>
) : (
<AccountCard
counterValue={counterValue}
account={account}
daysCount={daysCount}
key={account.id}

5
src/components/IsUnlocked.js

@ -6,7 +6,6 @@ import { compose } from 'redux'
import { translate } from 'react-i18next'
import bcrypt from 'bcryptjs'
import type { MapStateToProps } from 'react-redux'
import type { Settings, Accounts, T } from 'types/common'
import get from 'lodash/get'
@ -38,13 +37,13 @@ type State = {
inputValue: InputValue,
}
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
accounts: getAccounts(state),
settings: state.settings,
isLocked: isLocked(state),
})
const mapDispatchToProps = {
const mapDispatchToProps: Object = {
fetchAccounts,
unlock,
}

3
src/components/ReceiveBox.js

@ -5,7 +5,6 @@ import { connect } from 'react-redux'
import styled from 'styled-components'
import { ipcRenderer } from 'electron'
import type { MapStateToProps } from 'react-redux'
import type { Account, Device } from 'types/common'
import { getCurrentDevice } from 'reducers/devices'
@ -48,7 +47,7 @@ const Action = styled(Box).attrs({
}
`
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
currentDevice: getCurrentDevice(state),
})

14
src/components/SelectAccount/index.js

@ -6,32 +6,28 @@ import { connect } from 'react-redux'
import { translate } from 'react-i18next'
import noop from 'lodash/noop'
import type { MapStateToProps } from 'react-redux'
import type { T, Accounts, Account } from 'types/common'
import { formatBTC } from 'helpers/format'
import { getVisibleAccounts } from 'reducers/accounts'
import Select from 'components/base/Select'
import FormattedVal from 'components/base/FormattedVal'
import Box from 'components/base/Box'
import Text from 'components/base/Text'
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
accounts: getVisibleAccounts(state),
})
const renderItem = item => (
const renderItem = a => (
<Box horizontal alignItems="center">
<Box grow>
<Text color="dark" fontSize={4} fontWeight="bold">
{item.name}
{a.name}
</Text>
</Box>
<Box>
<Text color="fog" fontSize={4}>
{formatBTC(item.balance)}
</Text>
<FormattedVal val={a.balance} unit={a.unit} />
</Box>
</Box>
)

88
src/components/SettingsPage/Money.js

@ -0,0 +1,88 @@
// @flow
import React, { PureComponent } from 'react'
import { getFiatUnit } from '@ledgerhq/currencies'
import type { SettingsMoney, T } from 'types/common'
import Box, { Card } from 'components/base/Box'
import Button from 'components/base/Button'
import Label from 'components/base/Label'
import Select from 'components/base/Select'
const counterValues = ['USD', 'EUR', 'JPY', 'GBP'].sort().map(c => {
const { name } = getFiatUnit(c)
return {
key: c,
name,
}
})
type InputValue = SettingsMoney
type Props = {
t: T,
settings: SettingsMoney,
onSaveSettings: Function,
}
type State = {
inputValue: InputValue,
}
class TabProfile extends PureComponent<Props, State> {
state = {
inputValue: {
counterValue: this.props.settings.counterValue,
},
}
handleChangeInput = (key: $Keys<InputValue>) => (value: $Values<InputValue>) =>
this.setState(prev => ({
inputValue: {
...prev.inputValue,
[key]: value,
},
}))
handleSubmit = (e: SyntheticEvent<HTMLFormElement>) => {
e.preventDefault()
const { onSaveSettings } = this.props
const { inputValue } = this.state
onSaveSettings({
...inputValue,
})
}
render() {
const { t } = this.props
const { inputValue } = this.state
const currentCounterValues = counterValues.find(l => l.key === inputValue.counterValue)
return (
<form onSubmit={this.handleSubmit}>
<Card flow={3}>
<Box flow={1}>
<Label>{t('settings:display.counterValue')}</Label>
<Select
onChange={item => this.handleChangeInput('counterValue')(item.key)}
renderSelected={item => item && item.name}
value={currentCounterValues}
items={counterValues}
/>
</Box>
<Box horizontal justifyContent="flex-end">
<Button primary type="submit">
{t('common:save')}
</Button>
</Box>
</Card>
</form>
)
}
}
export default TabProfile

19
src/components/SettingsPage/index.js

@ -5,11 +5,12 @@ import { compose } from 'redux'
import { connect } from 'react-redux'
import { translate } from 'react-i18next'
import type { MapStateToProps } from 'react-redux'
import type { Settings, T } from 'types/common'
import type { SaveSettings } from 'actions/settings'
import type { FetchCounterValues } from 'actions/counterValues'
import { saveSettings } from 'actions/settings'
import { fetchCounterValues } from 'actions/counterValues'
import Box from 'components/base/Box'
import Text from 'components/base/Text'
@ -17,12 +18,14 @@ import Tabs from 'components/base/Tabs'
import TabDisplay from './Display'
import TabProfile from './Profile'
import TabMoney from './Money'
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
settings: state.settings,
})
const mapDispatchToProps = {
fetchCounterValues,
saveSettings,
}
@ -30,6 +33,7 @@ type Props = {
i18n: Object,
saveSettings: SaveSettings,
settings: Settings,
fetchCounterValues: FetchCounterValues,
t: T,
}
@ -45,13 +49,17 @@ class SettingsPage extends PureComponent<Props, State> {
handleChangeTab = (tab: number) => this.setState({ tab })
handleSaveSettings = newSettings => {
const { saveSettings, i18n, settings } = this.props
const { fetchCounterValues, saveSettings, i18n, settings } = this.props
saveSettings(newSettings)
if (newSettings.language !== settings.language) {
i18n.changeLanguage(newSettings.language)
}
saveSettings(newSettings)
if (newSettings.counterValue !== settings.counterValue) {
fetchCounterValues()
}
}
render() {
@ -78,9 +86,8 @@ class SettingsPage extends PureComponent<Props, State> {
},
{
key: 'money',
isDisabled: true,
title: t('settings:tabs.money'),
render: () => <div>{'Monnaie'}</div>,
render: () => <TabMoney {...props} />,
},
{
key: 'material',

5
src/components/SideBar/Item.js

@ -10,19 +10,18 @@ import { connect } from 'react-redux'
import { openModal } from 'reducers/modals'
import type { Node } from 'react'
import type { MapStateToProps } from 'react-redux'
import type { Location } from 'react-router'
import Box, { Tabbable } from 'components/base/Box'
import Text from 'components/base/Text'
const mapStateToProps: MapStateToProps<*, *, *> = (state: any) => ({
const mapStateToProps = (state: any) => ({
// connect router here only to make components re-render
// see https://github.com/ReactTraining/react-router/issues/4671
router: state.router,
})
const mapDispatchToProps = {
const mapDispatchToProps: Object = {
push,
openModal,
}

5
src/components/SideBar/index.js

@ -9,7 +9,6 @@ import { getIconByCoinType } from '@ledgerhq/currencies/react'
import { MODAL_SEND, MODAL_RECEIVE, MODAL_ADD_ACCOUNT } from 'constants'
import type { MapStateToProps } from 'react-redux'
import type { Accounts, T } from 'types/common'
import { openModal } from 'reducers/modals'
@ -57,11 +56,11 @@ type Props = {
openModal: Function,
}
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
accounts: getVisibleAccounts(state),
})
const mapDispatchToProps = {
const mapDispatchToProps: Object = {
openModal,
}

5
src/components/TopBar.js

@ -7,7 +7,6 @@ import { connect } from 'react-redux'
import styled from 'styled-components'
import { ipcRenderer } from 'electron'
import type { MapStateToProps, MapDispatchToProps } from 'react-redux'
import type { T } from 'types/common'
import { rgba } from 'styles/helpers'
@ -73,12 +72,12 @@ const DropDownItem = styled(DDItem).attrs({
height: 35px;
`
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
hasAccounts: getAccounts(state).length > 0,
hasPassword: hasPassword(state),
})
const mapDispatchToProps: MapDispatchToProps<*, *, *> = {
const mapDispatchToProps = {
lock,
}

3
src/components/UpdateNotifier.js

@ -5,7 +5,6 @@ import { translate } from 'react-i18next'
import { compose } from 'redux'
import { Motion, spring } from 'react-motion'
import { connect } from 'react-redux'
import type { MapStateToProps } from 'react-redux'
import styled from 'styled-components'
import { getUpdateStatus, getUpdateData } from 'reducers/update'
@ -23,7 +22,7 @@ type Props = {
updateStatus: UpdateStatus,
}
const mapStateToProps: MapStateToProps<*, *, *> = (state: State) => ({
const mapStateToProps = (state: State) => ({
updateStatus: getUpdateStatus(state),
updateData: getUpdateData(state),
})

73
src/components/base/Chart/index.js

@ -2,20 +2,19 @@
/* eslint-disable react/no-multi-comp */
import React, { Fragment, PureComponent } from 'react'
import React, { Fragment, Component, PureComponent } from 'react'
import {
VictoryChart,
VictoryArea,
VictoryAxis,
VictoryTooltip,
VictoryVoronoiContainer,
VictoryLabel,
} from 'victory'
import { radii, space, colors, fontSizes } from 'styles/theme'
import { ff } from 'styles/helpers'
import { space, colors, fontSizes } from 'styles/theme'
import Box from 'components/base/Box'
import { TooltipContainer } from 'components/base/Tooltip'
const ANIMATION_DURATION = 600
const DEFAULT_PROPS = {
@ -112,6 +111,36 @@ function getLinearGradient({
) : null
}
class CustomTooltip extends Component<Object> {
static defaultEvents = VictoryTooltip.defaultEvents
shouldComponentUpdate(nextProps) {
const isActive = nextProps.active === true
const wasActive = this.props.active === true && !nextProps.active
return isActive || wasActive
}
render() {
const { x, y, active, text, datum } = this.props
if (!active) {
return null
}
return (
<foreignObject>
<TooltipContainer
mt={-space[1]}
style={{ position: 'absolute', top: y, left: x, transform: `translate3d(-50%, 0, 0)` }}
>
{text(datum)}
</TooltipContainer>
</foreignObject>
)
}
}
type LinearGradient = Array<Array<*>>
type GenericChart = {
@ -127,6 +156,8 @@ type Chart = GenericChart & {
renderLabels: Function,
renderTickX: Function,
renderTickY: Function,
tickCountX: number,
tickCountY: number,
}
export const SimpleAreaChart = ({
@ -178,27 +209,7 @@ SimpleAreaChart.defaultProps = {
...DEFAULT_PROPS,
}
const areaChartTooltip = ({ renderLabels }: { renderLabels: Function }) => (
<VictoryTooltip
corderRadius={radii[1]}
pointerLength={0}
height={25}
labelComponent={
<VictoryLabel
style={{
...ff('Open Sans|SemiBold'),
fontSize: fontSizes[2],
fill: colors.white,
}}
/>
}
flyoutStyle={{
fill: colors.dark,
stroke: null,
}}
width={a => space[2] * 2 + renderLabels(a).length * 5.2} // Approximatif size of char for calculate Tooltip width
/>
)
const areaChartTooltip = <CustomTooltip />
const AreaChartContainer = <VictoryVoronoiContainer voronoiDimension="x" />
@ -214,10 +225,6 @@ export class AreaChart extends PureComponent<Chart> {
...DEFAULT_PROPS,
}
_tooltip = areaChartTooltip({
renderLabels: this.props.renderLabels,
})
render() {
const {
color,
@ -230,6 +237,8 @@ export class AreaChart extends PureComponent<Chart> {
renderTickX,
renderTickY,
strokeWidth,
tickCountX,
tickCountY,
} = this.props
const tickLabelsStyle = {
@ -260,7 +269,7 @@ export class AreaChart extends PureComponent<Chart> {
>
<VictoryAxis
animate={false}
tickCount={6}
tickCount={tickCountX}
tickFormat={renderTickX}
style={{
axis: {
@ -274,7 +283,7 @@ export class AreaChart extends PureComponent<Chart> {
/>
<VictoryAxis
dependentAxis
tickCount={4}
tickCount={tickCountY}
tickFormat={renderTickY}
style={{
grid: {
@ -294,7 +303,7 @@ export class AreaChart extends PureComponent<Chart> {
data={data}
x="name"
y="value"
labelComponent={this._tooltip}
labelComponent={areaChartTooltip}
labels={renderLabels}
style={{
data: {

5
src/components/base/FormattedVal/index.js

@ -3,9 +3,10 @@
import React from 'react'
import styled from 'styled-components'
import { formatCurrencyUnit, getFiatUnit } from '@ledgerhq/currencies'
import type { Unit } from '@ledgerhq/currencies'
import { formatCurrencyUnit, getFiatUnit } from '@ledgerhq/currencies'
import Text from 'components/base/Text'
const T = styled(Text).attrs({
@ -35,7 +36,7 @@ function FormattedVal(props: Props) {
} else {
if (fiat) {
unit = getFiatUnit(fiat)
val *= 100
val *= 10 ** unit.magnitude
} else if (!unit) {
return ''
}

25
src/components/base/Modal/index.js

@ -20,25 +20,19 @@ import GrowScroll from 'components/base/GrowScroll'
import Icon from 'components/base/Icon'
import Defer from 'components/base/Defer'
type Props = {
isOpened?: boolean,
onClose: Function,
onHide?: Function,
preventBackdropClick?: boolean,
render: Function,
data?: any,
}
const springConfig = {
stiffness: 380,
}
const mapStateToProps = (state, { name, isOpened }: { name: string, isOpened?: boolean }) => ({
const mapStateToProps: Function = (
state,
{ name, isOpened }: { name: string, isOpened?: boolean },
): Object => ({
isOpened: isOpened || (name && isModalOpened(state, name)),
data: getModalData(state, name),
})
const mapDispatchToProps = (dispatch, { name, onClose = noop }) => ({
const mapDispatchToProps: Function = (dispatch, { name, onClose = noop }): Object => ({
onClose: name
? () => {
dispatch(closeModal(name))
@ -122,6 +116,15 @@ class Pure extends Component<any> {
}
}
type Props = {
isOpened?: boolean,
onClose: Function,
onHide?: Function,
preventBackdropClick?: boolean,
render: Function,
data?: any,
}
export class Modal extends Component<Props> {
static defaultProps = {
data: undefined,

6
src/components/base/Tooltip/index.js

@ -16,8 +16,8 @@ const Template = styled.div`
display: none;
`
const Wrapper = styled(Box).attrs({
bg: 'transparent',
export const TooltipContainer = styled(Box).attrs({
bg: 'dark',
borderRadius: 1,
color: 'white',
ff: 'Open Sans|SemiBold',
@ -70,7 +70,7 @@ class Tooltip extends PureComponent<Props> {
return (
<Container innerRef={n => (this._node = n)}>
<Template>
<Wrapper innerRef={n => (this._template = n)}>{render()}</Wrapper>
<TooltipContainer innerRef={n => (this._template = n)}>{render()}</TooltipContainer>
</Template>
{children}
</Container>

3
src/components/modals/AddAccount/index.js

@ -12,7 +12,6 @@ import type { Currency } from '@ledgerhq/currencies'
import { MODAL_ADD_ACCOUNT } from 'constants'
import type { MapStateToProps } from 'react-redux'
import type { Accounts, Device, T } from 'types/common'
import { closeModal } from 'reducers/modals'
@ -138,7 +137,7 @@ type State = {
step: Step,
}
const mapStateToProps: MapStateToProps<*, *, *> = state => ({
const mapStateToProps = state => ({
accounts: getAccounts(state),
archivedAccounts: getArchivedAccounts(state),
canCreateAccount: canCreateAccount(state),

8
src/helpers/__tests__/balance.test.js

@ -27,7 +27,7 @@ describe('helpers > balance', () => {
}
const balances = getBalanceHistoryForAccount({
fiat: 'USD',
counterValue: 'USD',
account,
counterValues,
interval,
@ -54,7 +54,7 @@ describe('helpers > balance', () => {
}
const balances = getBalanceHistoryForAccount({
fiat: 'USD',
counterValue: 'USD',
account,
counterValues,
interval,
@ -81,7 +81,7 @@ describe('helpers > balance', () => {
}
const balances = getBalanceHistoryForAccount({
fiat: 'USD',
counterValue: 'USD',
account,
counterValues,
interval,
@ -118,7 +118,7 @@ describe('helpers > balance', () => {
}
const balances = getBalanceHistoryForAccounts({
fiat: 'USD',
counterValue: 'USD',
accounts: [account1, account2],
counterValues,
interval,

12
src/helpers/balance.js

@ -49,17 +49,17 @@ function getBalanceAtIntervalStart(account: Account, interval: DateInterval): nu
export function getBalanceHistoryForAccount({
account,
fiat,
counterValue,
counterValues,
interval,
}: {
fiat: string,
counterValue: string,
account: Account,
counterValues: Object,
interval: DateInterval,
}): Array<BalanceHistoryDay> {
const unit = getDefaultUnitByCoinType(account.coinType)
const counterVals = counterValues[`${unit.code}-${fiat}`]
const counterVals = counterValues[`${unit.code}-${counterValue}`]
let lastBalance = getBalanceAtIntervalStart(account, interval)
return mapInterval(interval, date => {
let balance = 0
@ -84,11 +84,11 @@ export function getBalanceHistoryForAccount({
export function getBalanceHistoryForAccounts({
accounts,
fiat,
counterValue,
counterValues,
interval,
}: {
fiat: string,
counterValue: string,
accounts: Accounts,
counterValues: Object,
interval: DateInterval,
@ -96,7 +96,7 @@ export function getBalanceHistoryForAccounts({
// calculate balance history for each account on the given interval
const balances = accounts.map(account =>
getBalanceHistoryForAccount({
fiat,
counterValue,
account,
counterValues,
interval,

19
src/helpers/format.js

@ -1,19 +0,0 @@
// @flow
import { formatCurrencyUnit } from '@ledgerhq/currencies'
export function formatBTC(
v: string | number,
options: Object = { alwaysShowSign: true, showCode: true },
) {
return formatCurrencyUnit(
{
name: 'bitcoin',
code: 'BTC',
symbol: 'b',
magnitude: 8,
},
Number(v),
options,
)
}

9
src/helpers/staticPath.js

@ -1,9 +1,10 @@
const isStorybook = process.env.STORYBOOK_ENV
const { NODE_ENV, STORYBOOK_ENV } = process.env
const isRunningInAsar =
!isStorybook && process.mainModule && process.mainModule.filename.indexOf('app.asar') !== -1
!STORYBOOK_ENV && process.mainModule && process.mainModule.filename.indexOf('app.asar') !== -1
export default (__DEV__ && !isStorybook && !__TEST__
export default (__DEV__ && !STORYBOOK_ENV && NODE_ENV !== 'test'
? __static
: isRunningInAsar
? __dirname.replace(/app\.asar$/, 'static')
: !isStorybook ? `${__dirname}/../static` : 'static')
: !STORYBOOK_ENV ? `${__dirname}/../static` : 'static')

17
src/reducers/settings.js

@ -8,7 +8,8 @@ import type { Settings } from 'types/common'
export type SettingsState = Object
const state: SettingsState = {
const defaultState: SettingsState = {
counterValue: 'USD',
language: 'en',
orderAccounts: 'balance|desc',
password: {
@ -16,6 +17,10 @@ const state: SettingsState = {
},
}
const state: SettingsState = {
...defaultState,
}
const handlers: Object = {
SAVE_SETTINGS: (state: SettingsState, { payload: settings }: { payload: Settings }) => ({
...state,
@ -27,8 +32,12 @@ const handlers: Object = {
}),
}
export const hasPassword = (state: Object) => get(state.settings, 'password.state', false)
export const getLanguage = (state: Object) => get(state.settings, 'language', 'en')
export const getOrderAccounts = (state: Object) => get(state.settings, 'orderAccounts', 'balance')
export const hasPassword = (state: Object) =>
get(state.settings, 'password.state', defaultState.password.state)
export const getCounterValue = (state: Object) =>
get(state.settings, 'counterValue', defaultState.counterValue)
export const getLanguage = (state: Object) => get(state.settings, 'language', defaultState.language)
export const getOrderAccounts = (state: Object) =>
get(state.settings, 'orderAccounts', defaultState.orderAccounts)
export default handleActions(handlers, state)

5
src/types/common.js

@ -60,6 +60,9 @@ export type SettingsProfile = {
export type SettingsDisplay = {
language: string,
}
export type Settings = SettingsProfile & SettingsDisplay
export type SettingsMoney = {
counterValue: string,
}
export type Settings = SettingsProfile & SettingsDisplay & SettingsMoney
export type T = (string, ?Object) => string

1
static/i18n/en/settings.yml

@ -9,6 +9,7 @@ tabs:
profile: Profile
display:
language: Language
counterValue: Counter Value
orderAccounts: Order accounts
profile:
protectWithPassword: Protect local data with a password

390
yarn.lock

@ -166,36 +166,36 @@
redux-thunk "^2.2.0"
"@ledgerhq/currencies@^4.3.0-beta.f8165b69":
version "4.3.0-beta.f8165b69"
resolved "https://registry.yarnpkg.com/@ledgerhq/currencies/-/currencies-4.3.0-beta.f8165b69.tgz#bf85e210a1172ec3cc6821af75d39fdd60627963"
version "4.3.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/currencies/-/currencies-4.3.0.tgz#d06d82030b374e72c237d0fb065d1fc175399c9e"
dependencies:
lodash "^4.17.5"
numeral "^2.0.6"
querystring "^0.2.0"
"@ledgerhq/hw-app-btc@^4.2.2":
version "4.2.2"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-4.2.2.tgz#17be52803ce4fb639b62e9920ff450acebac789f"
version "4.3.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-4.3.0.tgz#15e2b01c5e8493c3de78b59386ec029719dda1dd"
dependencies:
"@ledgerhq/hw-transport" "^4.2.0"
"@ledgerhq/hw-transport" "^4.3.0"
create-hash "^1.1.3"
"@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"
version "4.3.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-4.3.0.tgz#5f365a3560cd78e8cd711737ec56249390cbf5e5"
dependencies:
"@ledgerhq/hw-transport" "^4.2.0"
"@ledgerhq/hw-transport" "^4.3.0"
"@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"
version "4.3.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-4.3.0.tgz#6438133a2021ecf8db03b0ae4827b9ec454c5577"
dependencies:
"@ledgerhq/hw-transport" "^4.2.0"
"@ledgerhq/hw-transport" "^4.3.0"
node-hid "^0.7.2"
"@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"
"@ledgerhq/hw-transport@^4.2.0", "@ledgerhq/hw-transport@^4.3.0":
version "4.3.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-4.3.0.tgz#24e1ff819d8aad00a58ae10ed3ee5d60aad54d7c"
dependencies:
events "^1.1.1"
@ -452,7 +452,7 @@ acorn@^4.0.3:
version "4.0.13"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
acorn@^5.0.0, acorn@^5.3.0, acorn@^5.4.0:
acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298"
@ -473,6 +473,10 @@ airbnb-js-shims@^1.4.0:
string.prototype.padend "^3.0.0"
string.prototype.padstart "^3.0.0"
ajv-keywords@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
ajv-keywords@^3.0.0, ajv-keywords@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be"
@ -484,7 +488,7 @@ ajv@^4.9.1:
co "^4.6.0"
json-stable-stringify "^1.0.1"
ajv@^5.0.0, ajv@^5.1.0, ajv@^5.3.0:
ajv@^5.0.0, ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
dependencies:
@ -494,8 +498,8 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.3.0:
json-schema-traverse "^0.3.0"
ajv@^6.0.1, ajv@^6.1.0, ajv@^6.1.1:
version "6.2.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.0.tgz#afac295bbaa0152449e522742e4547c1ae9328d2"
version "6.2.1"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.1.tgz#28a6abc493a2abe0fb4c8507acaedb43fa550671"
dependencies:
fast-deep-equal "^1.0.0"
fast-json-stable-stringify "^2.0.0"
@ -523,7 +527,7 @@ ansi-align@^2.0.0:
dependencies:
string-width "^2.0.0"
ansi-escapes@^1.0.0:
ansi-escapes@^1.0.0, ansi-escapes@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
@ -555,7 +559,7 @@ ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
ansi-styles@^3.2.0:
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
dependencies:
@ -579,25 +583,45 @@ anymatch@^2.0.0:
micromatch "^3.1.4"
normalize-path "^2.1.1"
app-builder-bin-linux@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.5.0.tgz#c22df1ab9ee7fb0270ec27a3c8a6993966ea4220"
app-builder-bin-linux@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.6.0.tgz#d7731d7988b8a740e74d591cbd565f168a266111"
app-builder-bin-mac@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.5.0.tgz#40821128a1f20e0559f1fca71a59ecab81bb59b5"
app-builder-bin-linux@1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/app-builder-bin-linux/-/app-builder-bin-linux-1.7.1.tgz#925967add77c13d387e3fe88359a4b4dce82c525"
app-builder-bin-win@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.5.0.tgz#0a12437d825ac89fc2357e8be0ba855f54c083e9"
app-builder-bin-mac@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.6.0.tgz#c976da70796d67aeb7134a57899636f2581d1c67"
app-builder-bin@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.5.0.tgz#dc768af9704876959c68af5456ef31f67a4663fe"
app-builder-bin-mac@1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/app-builder-bin-mac/-/app-builder-bin-mac-1.7.1.tgz#e5c2b49be82473a737e000cfccfc65a68f9cc62d"
app-builder-bin-win@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.6.0.tgz#528ef96430d519c270b4de260bea0ddc70df1733"
app-builder-bin-win@1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/app-builder-bin-win/-/app-builder-bin-win-1.7.1.tgz#e1ba3d6d645896552b28e4dd05525b39561b9b88"
app-builder-bin@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.6.0.tgz#c0e88a488d4c23c2e7fe0bbfb70c1d61165be206"
optionalDependencies:
app-builder-bin-linux "1.6.0"
app-builder-bin-mac "1.6.0"
app-builder-bin-win "1.6.0"
app-builder-bin@1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-1.7.1.tgz#c2540eb8b164c91c30bc8cf3f16b5c181f3f5c31"
optionalDependencies:
app-builder-bin-linux "1.5.0"
app-builder-bin-mac "1.5.0"
app-builder-bin-win "1.5.0"
app-builder-bin-linux "1.7.1"
app-builder-bin-mac "1.7.1"
app-builder-bin-win "1.7.1"
app-root-path@^2.0.1:
version "2.0.1"
@ -1197,8 +1221,8 @@ babel-plugin-react-docgen@^1.8.0:
react-docgen "^2.20.0"
babel-plugin-styled-components@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.5.0.tgz#4549f28a19fb05170aa9ee429b4de0eac2d2401d"
version "1.5.1"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.5.1.tgz#31dbeb696d1354d1585e60d66c7905f5e474afcd"
dependencies:
"@babel/helper-annotate-as-pure" "^7.0.0-beta.37"
babel-types "^6.26.0"
@ -1615,6 +1639,14 @@ babel-plugin-transform-undefined-to-void@^6.8.3:
version "6.9.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.0.tgz#eb5db0554caffe9ded0206468ec0c6c3b332b9d2"
babel-polyfill@6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d"
dependencies:
babel-runtime "^6.22.0"
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
babel-polyfill@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
@ -2184,7 +2216,7 @@ buffers@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb"
builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4.0.3:
builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.5.tgz#5340cf9886b9283ea6e5b20dc09b5e3e461aef62"
dependencies:
@ -2193,15 +2225,15 @@ builder-util-runtime@4.0.5, builder-util-runtime@^4.0.5, builder-util-runtime@~4
fs-extra-p "^4.5.0"
sax "^1.2.4"
builder-util@5.6.0, builder-util@^5.6.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.0.tgz#c37c5207cd818531bda819ac836b6d51dfbccd4a"
builder-util@5.6.1:
version "5.6.1"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.1.tgz#ab90845cb8949ea4ac81da0ce87b8ec3424cdbf9"
dependencies:
"7zip-bin" "~3.1.0"
app-builder-bin "1.5.0"
app-builder-bin "1.6.0"
bluebird-lst "^1.0.5"
builder-util-runtime "^4.0.5"
chalk "^2.3.0"
chalk "^2.3.2"
debug "^3.1.0"
fs-extra-p "^4.5.2"
is-ci "^1.1.0"
@ -2212,6 +2244,25 @@ builder-util@5.6.0, builder-util@^5.6.0:
stat-mode "^0.2.2"
temp-file "^3.1.1"
builder-util@5.6.3, builder-util@^5.6.0:
version "5.6.3"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-5.6.3.tgz#194288b979958832e0592fe91c8306ce207a60f1"
dependencies:
"7zip-bin" "~3.1.0"
app-builder-bin "1.7.1"
bluebird-lst "^1.0.5"
builder-util-runtime "^4.0.5"
chalk "^2.3.2"
debug "^3.1.0"
fs-extra-p "^4.5.2"
is-ci "^1.1.0"
js-yaml "^3.11.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"
@ -2316,12 +2367,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.30000810"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000810.tgz#bd25830c41efab64339a2e381f49677343c84509"
version "1.0.30000813"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000813.tgz#e0a1c603f8880ad787b2a35652b2733f32a5e29a"
caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805:
version "1.0.30000810"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz#47585fffce0e9f3593a6feea4673b945424351d9"
version "1.0.30000813"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz#7b25e27fdfb8d133f3c932b01f77452140fcc6c9"
capture-stack-trace@^1.0.0:
version "1.0.0"
@ -2362,7 +2413,7 @@ chalk@0.5.1:
strip-ansi "^0.3.0"
supports-color "^0.2.0"
chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
@ -2372,13 +2423,13 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796"
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
dependencies:
ansi-styles "^3.2.0"
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.2.0"
supports-color "^5.3.0"
chance@^1.0.13:
version "1.0.13"
@ -2453,8 +2504,8 @@ classnames@^2.2.5:
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
clean-css@4.1.x:
version "4.1.9"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301"
version "4.1.10"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.10.tgz#3dfc2c2569d5f03c14b41d875ad9bccae09cb89e"
dependencies:
source-map "0.5.x"
@ -3279,8 +3330,8 @@ detect-node@^2.0.3:
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
diff@^3.2.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
diffie-hellman@^5.0.0:
version "5.0.2"
@ -3416,8 +3467,8 @@ dotenv@^5.0.0, dotenv@^5.0.1:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef"
downshift@^1.28.2:
version "1.28.2"
resolved "https://registry.yarnpkg.com/downshift/-/downshift-1.28.2.tgz#ff5b4e89ff439943a8e58890993015199604e1e6"
version "1.29.1"
resolved "https://registry.yarnpkg.com/downshift/-/downshift-1.29.1.tgz#949e493195c4919cfa52ad38011d5631d6395ac3"
duplexer3@^0.1.4:
version "0.1.4"
@ -3453,15 +3504,44 @@ ejs@^2.5.7:
version "2.5.7"
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a"
electron-builder-lib@20.2.0, electron-builder-lib@~20.2.0:
version "20.2.0"
resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.2.0.tgz#e8dba288cf26858803eb1800da870d7312837bfa"
electron-builder-lib@20.3.1:
version "20.3.1"
resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.3.1.tgz#b479a03a718fa443ff29e0623c1ec661199e3eae"
dependencies:
"7zip-bin" "~3.1.0"
app-builder-bin "1.7.1"
async-exit-hook "^2.0.1"
bluebird-lst "^1.0.5"
builder-util "5.6.3"
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.2.0"
fs-extra-p "^4.5.2"
hosted-git-info "^2.5.0"
is-ci "^1.1.0"
isbinaryfile "^3.0.2"
js-yaml "^3.11.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.2.0:
version "20.2.1"
resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-20.2.1.tgz#ff8dc6ac7f6f3c676fc370ddafb2aba464a17672"
dependencies:
"7zip-bin" "~3.1.0"
app-builder-bin "1.5.0"
app-builder-bin "1.6.0"
async-exit-hook "^2.0.1"
bluebird-lst "^1.0.5"
builder-util "5.6.0"
builder-util "5.6.1"
builder-util-runtime "4.0.5"
chromium-pickle-js "^0.2.0"
debug "^3.1.0"
@ -3482,16 +3562,16 @@ electron-builder-lib@20.2.0, electron-builder-lib@~20.2.0:
semver "^5.5.0"
temp-file "^3.1.1"
electron-builder@^20.2.0:
version "20.2.0"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.2.0.tgz#aaeaa439cb96c9a3d7ffda25b28130327c982982"
electron-builder@^20.0.4, electron-builder@^20.2.0:
version "20.3.1"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-20.3.1.tgz#a05bc5cb729d416ee15122552dac3592f2ede4fd"
dependencies:
bluebird-lst "^1.0.5"
builder-util "5.6.0"
builder-util "5.6.3"
builder-util-runtime "4.0.5"
chalk "^2.3.0"
chalk "^2.3.2"
dmg-builder "4.1.1"
electron-builder-lib "20.2.0"
electron-builder-lib "20.3.1"
electron-download-tf "4.3.4"
fs-extra-p "^4.5.2"
is-ci "^1.1.0"
@ -3587,22 +3667,22 @@ electron-store@^1.3.0:
conf "^1.3.0"
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
version "1.3.34"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed"
version "1.3.36"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.36.tgz#0eabf71a9ebea9013fb1cc35a390e068624f27e8"
electron-updater@^2.20.1:
version "2.20.1"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.20.1.tgz#3d2714a3e472fbf198f6053daf8fd12209101aa2"
version "2.21.0"
resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-2.21.0.tgz#3c8765af946090100f7df982127e4c3412cbc1af"
dependencies:
bluebird-lst "^1.0.5"
builder-util-runtime "~4.0.3"
builder-util-runtime "~4.0.5"
electron-is-dev "^0.3.0"
fs-extra-p "^4.5.0"
fs-extra-p "^4.5.2"
js-yaml "^3.10.0"
lazy-val "^1.0.3"
lodash.isequal "^4.5.0"
semver "^5.5.0"
source-map-support "^0.5.2"
source-map-support "^0.5.3"
electron-webpack-js@~1.2.0:
version "1.2.0"
@ -3646,9 +3726,9 @@ electron-webpack@1.13.0:
webpack-merge "^4.1.1"
yargs "^11.0.0"
electron@1.8.2:
version "1.8.2"
resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.2.tgz#a817cd733c2972b3c7cc4f777caf6e424b88014d"
electron@1.8.3, electron@^1.8.2:
version "1.8.3"
resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.3.tgz#001416ea3a25ce594e317cb5531bc41eadd22f7f"
dependencies:
"@types/node" "^8.0.24"
electron-download "^3.0.1"
@ -3937,8 +4017,8 @@ eslint-visitor-keys@^1.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
eslint@^4.18.1:
version "4.18.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.1.tgz#b9138440cb1e98b2f44a0d578c6ecf8eae6150b0"
version "4.18.2"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
@ -3975,14 +4055,14 @@ eslint@^4.18.1:
semver "^5.3.0"
strip-ansi "^4.0.0"
strip-json-comments "~2.0.1"
table "^4.0.1"
table "4.0.2"
text-table "~0.2.0"
espree@^3.5.2:
version "3.5.3"
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6"
version "3.5.4"
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
dependencies:
acorn "^5.4.0"
acorn "^5.5.0"
acorn-jsx "^3.0.0"
esprima@^2.6.0:
@ -4182,7 +4262,7 @@ extend@~3.0.0, extend@~3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
external-editor@^2.0.4:
external-editor@^2.0.1, external-editor@^2.0.4:
version "2.1.0"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
dependencies:
@ -4668,8 +4748,8 @@ glamor@^2.20.40:
through "^2.3.8"
glamorous@^4.11.2:
version "4.11.6"
resolved "https://registry.yarnpkg.com/glamorous/-/glamorous-4.11.6.tgz#337d9ec370ef3fa7cd0cd8f9f1c058fa3c55a424"
version "4.12.0"
resolved "https://registry.yarnpkg.com/glamorous/-/glamorous-4.12.0.tgz#47b864326ca37e1f1ea6d523b3d23402f6657af1"
dependencies:
brcast "^3.0.0"
fast-memoize "^2.2.7"
@ -4838,8 +4918,8 @@ har-validator@~5.0.3:
har-schema "^2.0.0"
hard-source-webpack-plugin@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.6.0.tgz#ec2f60068a8d1f358439b7b1587f1c64fe642eda"
version "0.6.4"
resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.6.4.tgz#d80575d42c53e6af6dadc92271577a61cda20b12"
dependencies:
lodash "^4.15.0"
mkdirp "^0.5.1"
@ -5054,8 +5134,8 @@ html-loader@^0.5.4, html-loader@^0.5.5:
object-assign "^4.1.1"
html-minifier@^3.2.3, html-minifier@^3.5.8:
version "3.5.9"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.9.tgz#74424014b872598d4bb0e20ac420926ec61024b6"
version "3.5.10"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.10.tgz#8522c772c388db81aa5c26f62033302d906ea1c7"
dependencies:
camel-case "3.0.x"
clean-css "4.1.x"
@ -5272,6 +5352,24 @@ inline-style-prefixer@^3.0.6:
bowser "^1.7.3"
css-in-js-utils "^2.0.0"
inquirer@3.0.6:
version "3.0.6"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347"
dependencies:
ansi-escapes "^1.1.0"
chalk "^1.0.0"
cli-cursor "^2.1.0"
cli-width "^2.0.0"
external-editor "^2.0.1"
figures "^2.0.0"
lodash "^4.3.0"
mute-stream "0.0.7"
run-async "^2.2.0"
rx "^4.1.0"
string-width "^2.0.0"
strip-ansi "^3.0.0"
through "^2.3.6"
inquirer@^3.0.6:
version "3.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
@ -6005,9 +6103,9 @@ js-yaml@3.5.4:
argparse "^1.0.2"
esprima "^2.6.0"
js-yaml@^3.10.0, js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
version "3.10.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
version "3.11.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@ -6140,8 +6238,8 @@ jsprim@^1.2.2:
verror "1.10.0"
jsqr@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.0.3.tgz#1e4e2f1de50413853855b3389e69a983ff7d067d"
version "1.0.4"
resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.0.4.tgz#e2ea353fa81007708efab7d95b2652a7254c10dd"
jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1:
version "2.0.1"
@ -6209,12 +6307,15 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
ledger-test-library@KhalilBellakrid/ledger-test-library-nodejs:
ledger-test-library@KhalilBellakrid/ledger-test-library-nodejs#7d37482:
version "1.0.0"
resolved "https://codeload.github.com/KhalilBellakrid/ledger-test-library-nodejs/tar.gz/7d374820ae44f1b7d2177dfe52deb4702a36cb65"
dependencies:
axios "^0.17.1"
bindings "^1.3.0"
electron "^1.8.2"
electron-builder "^20.0.4"
electron-rebuild "^1.7.3"
nan "^2.6.2"
prebuild-install "^2.2.2"
@ -6711,7 +6812,7 @@ minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
@ -6754,8 +6855,8 @@ mkdirp@0.5.0:
minimist "0.0.8"
moment@^2.20.1:
version "2.20.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd"
version "2.21.0"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a"
move-concurrently@^1.0.1:
version "1.0.1"
@ -6848,6 +6949,13 @@ node-dir@^0.1.10:
dependencies:
minimatch "^3.0.2"
node-fetch@1.6.3:
version "1.6.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
dependencies:
encoding "^0.1.11"
is-stream "^1.0.1"
node-fetch@^1.0.1:
version "1.7.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
@ -7172,6 +7280,24 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
opencollective@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1"
dependencies:
babel-polyfill "6.23.0"
chalk "1.1.3"
inquirer "3.0.6"
minimist "1.2.0"
node-fetch "1.6.3"
opn "4.0.2"
opn@4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
dependencies:
object-assign "^4.0.1"
pinkie-promise "^2.0.0"
opn@^5.1.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225"
@ -8085,8 +8211,8 @@ range-parser@^1.0.3, range-parser@~1.2.0:
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
raven-js@^3.22.4:
version "3.23.0"
resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.23.0.tgz#4365ae1c09072049a60fab25e19316273e01b383"
version "3.23.1"
resolved "https://registry.yarnpkg.com/raven-js/-/raven-js-3.23.1.tgz#34a5d7b5b3dd626a3d59e7a264e1d19a4c799cdb"
raven@^2.4.2:
version "2.4.2"
@ -8404,8 +8530,8 @@ read-pkg@^2.0.0:
path-type "^2.0.0"
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3:
version "2.3.4"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071"
version "2.3.5"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
@ -8524,7 +8650,7 @@ regenerate@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
regenerator-runtime@^0.10.5:
regenerator-runtime@^0.10.0, regenerator-runtime@^0.10.5:
version "0.10.5"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
@ -8824,6 +8950,10 @@ rx@2.3.24:
version "2.3.24"
resolved "https://registry.yarnpkg.com/rx/-/rx-2.3.24.tgz#14f950a4217d7e35daa71bbcbe58eff68ea4b2b7"
rx@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
rxjs@^5.1.1, rxjs@^5.4.2:
version "5.5.6"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02"
@ -9190,7 +9320,7 @@ source-map-support@^0.4.15:
dependencies:
source-map "^0.5.6"
source-map-support@^0.5.0, source-map-support@^0.5.2, source-map-support@^0.5.3:
source-map-support@^0.5.0, source-map-support@^0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76"
dependencies:
@ -9499,30 +9629,31 @@ style-loader@^0.20.2:
schema-utils "^0.4.3"
styled-components@^3.1.6:
version "3.1.6"
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.1.6.tgz#9c443146fa82c6659a9f64dd493bf2202480342e"
version "3.2.0"
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.2.0.tgz#5e063656783a66f6bf411153fcfe994572f3e848"
dependencies:
buffer "^5.0.3"
css-to-react-native "^2.0.3"
fbjs "^0.8.9"
hoist-non-react-statics "^1.2.0"
is-plain-object "^2.0.1"
opencollective "^1.0.3"
prop-types "^15.5.4"
stylis "^3.4.0"
stylis-rule-sheet "^0.0.7"
stylis "^3.4.10"
stylis-rule-sheet "^0.0.8"
supports-color "^3.2.3"
styled-system@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-2.1.1.tgz#ec7cd9c25f8413662c90a3ff1b6660cf8d744163"
version "2.1.2"
resolved "https://registry.yarnpkg.com/styled-system/-/styled-system-2.1.2.tgz#00d30706e01a7a1b9b0f4a99e75649315969da51"
dependencies:
prop-types "^15.6.0"
stylis-rule-sheet@^0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.7.tgz#5c51dc879141a61821c2094ba91d2cbcf2469c6c"
stylis-rule-sheet@^0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.8.tgz#b0d0a126c945b1f3047447a3aae0647013e8d166"
stylis@^3.0.0, stylis@^3.4.0:
stylis@^3.0.0, stylis@^3.4.10:
version "3.4.10"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.10.tgz#a135cab4b9ff208e327fbb5a6fde3fa991c638ee"
@ -9559,7 +9690,7 @@ supports-color@^4.2.1:
dependencies:
has-flag "^2.0.0"
supports-color@^5.1.0, supports-color@^5.2.0:
supports-color@^5.1.0, supports-color@^5.2.0, supports-color@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
dependencies:
@ -9597,7 +9728,18 @@ symbol-tree@^3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
table@^4.0.1, table@^4.0.2:
table@4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
dependencies:
ajv "^5.2.3"
ajv-keywords "^2.1.0"
chalk "^2.1.0"
lodash "^4.17.4"
slice-ansi "1.0.0"
string-width "^2.1.1"
table@^4.0.2:
version "4.0.3"
resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
dependencies:
@ -9871,8 +10013,8 @@ uglify-es@^3.3.4:
source-map "~0.6.1"
uglify-js@3.3.x:
version "3.3.12"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.12.tgz#efd87c16a1f4c674a8a5ede571001ef634dcc883"
version "3.3.13"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.13.tgz#8a1a89eeb16e2d6a66b0db2b04cb871af3c669cf"
dependencies:
commander "~2.14.1"
source-map "~0.6.1"
@ -10288,8 +10430,8 @@ webpack-dev-server@^2.11.1:
yargs "6.6.0"
webpack-hot-middleware@^2.21.0:
version "2.21.1"
resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.1.tgz#1b03b20a1a65a2e2ea0ea987476a5d23370ff176"
version "2.21.2"
resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.2.tgz#2e2aa65563b8b32546b67e53b5a9667dcd80f327"
dependencies:
ansi-html "0.0.7"
html-entities "^1.2.0"

Loading…
Cancel
Save