diff --git a/src/components/DeviceInteraction/DeviceInteractionStep.js b/src/components/DeviceInteraction/DeviceInteractionStep.js index 3ba0fb8a..3e4a3ce5 100644 --- a/src/components/DeviceInteraction/DeviceInteractionStep.js +++ b/src/components/DeviceInteraction/DeviceInteractionStep.js @@ -180,7 +180,7 @@ class DeviceInteractionStep extends PureComponent< {step.icon} {title && ( - + {title} )} diff --git a/src/components/DeviceInteraction/components.js b/src/components/DeviceInteraction/components.js index 10a6bcb3..a81e425f 100644 --- a/src/components/DeviceInteraction/components.js +++ b/src/components/DeviceInteraction/components.js @@ -4,7 +4,6 @@ import React from 'react' import styled from 'styled-components' import { radii } from 'styles/theme' -import { rgba } from 'styles/helpers' import TranslatedError from 'components/TranslatedError' import Box from 'components/base/Box' @@ -13,12 +12,12 @@ import Spinner from 'components/base/Spinner' import IconCheck from 'icons/Check' import IconCross from 'icons/Cross' import IconExclamationCircle from 'icons/ExclamationCircle' +import IconSmoothBorders from 'icons/SmoothBorders' export const DeviceInteractionStepContainer = styled(Box).attrs({ horizontal: true, ff: 'Open Sans', fontSize: 3, - bg: 'white', color: 'graphite', })` position: relative; @@ -27,21 +26,28 @@ export const DeviceInteractionStepContainer = styled(Box).attrs({ min-height: 80px; border: 1px solid ${p => p.theme.colors.fog}; border-color: ${p => - p.isError ? p.theme.colors.alertRed : p.isActive || p.isSuccess ? p.theme.colors.wallet : ''}; + p.isError ? p.theme.colors.alertRed : p.isActive && !p.isFinished ? p.theme.colors.wallet : ''}; border-top-color: ${p => (p.isFirst || p.isActive ? '' : 'transparent')}; border-bottom-color: ${p => (p.isPrecedentActive ? 'transparent' : '')}; border-bottom-left-radius: ${p => (p.isLast ? `${radii[1]}px` : 0)}; border-bottom-right-radius: ${p => (p.isLast ? `${radii[1]}px` : 0)}; border-top-left-radius: ${p => (p.isFirst ? `${radii[1]}px` : 0)}; border-top-right-radius: ${p => (p.isFirst ? `${radii[1]}px` : 0)}; - box-shadow: ${p => - p.isActive && !p.isSuccess - ? ` - ${rgba(p.isError ? p.theme.colors.alertRed : p.theme.colors.wallet, 0.2)} 0 0 3px 2px - ` - : 'none'}; ` +const AbsCenter = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + align-items: center; + justify-content: center; +` + +const smoothBorders = + export const IconContainer = ({ children, isTransparent, @@ -50,15 +56,15 @@ export const IconContainer = ({ isTransparent: boolean, }) => ( - {children} + {smoothBorders} + {children} ) diff --git a/src/components/EnsureDeviceApp.js b/src/components/EnsureDeviceApp.js index 23385b67..c63caa6b 100644 --- a/src/components/EnsureDeviceApp.js +++ b/src/components/EnsureDeviceApp.js @@ -27,8 +27,8 @@ import { getCurrentDevice } from 'reducers/devices' export const WrongAppOpened = createCustomErrorClass('WrongAppOpened') export const WrongDeviceForAccount = createCustomErrorClass('WrongDeviceForAccount') -const usbIcon = -const Bold = props => +const usbIcon = +const Bold = props => const mapStateToProps = state => ({ device: getCurrentDevice(state), @@ -107,7 +107,7 @@ class EnsureDeviceApp extends Component<{ { id: 'address', title: this.renderOpenAppTitle, - icon: Icon ? : null, + icon: Icon ? : null, run: this.openAppInteractionHandler, }, ]} diff --git a/src/components/ExchangePage/index.js b/src/components/ExchangePage/index.js index fb92fbb0..f3b770fc 100644 --- a/src/components/ExchangePage/index.js +++ b/src/components/ExchangePage/index.js @@ -44,13 +44,13 @@ class ExchangePage extends PureComponent { return ( - + {t('app:exchange.title')} - + {t('app:exchange.desc')} - {cards.map(card => )} + {cards.map(card => )} ) } diff --git a/src/components/GenuineCheck.js b/src/components/GenuineCheck.js index e1f8e2bc..1e3f04af 100644 --- a/src/components/GenuineCheck.js +++ b/src/components/GenuineCheck.js @@ -24,7 +24,7 @@ import Text from 'components/base/Text' import IconUsb from 'icons/Usb' import IconHome from 'icons/Home' -import IconGenuineCheck from 'icons/GenuineCheck' +import IconCheck from 'icons/Check' const DeviceNotGenuineError = createCustomErrorClass('DeviceNotGenuine') @@ -36,15 +36,15 @@ type Props = { device: ?Device, } -const usbIcon = -const homeIcon = -const genuineCheckIcon = +const usbIcon = +const homeIcon = +const genuineCheckIcon = const mapStateToProps = state => ({ device: getCurrentDevice(state), }) -const Bold = props => +const Bold = props => // to speed up genuine check, cache result by device id const genuineDevices = new WeakSet() diff --git a/src/components/GradientBox.js b/src/components/GradientBox.js index dc637006..1c928be9 100644 --- a/src/components/GradientBox.js +++ b/src/components/GradientBox.js @@ -5,10 +5,10 @@ export default styled.div` width: 100%; height: 60px; position: absolute; - bottom: 68px; + bottom: 0; left: 0; right: 0; - background: linear-gradient(rgba(255, 255, 255, 0), #ffffff 70%); + background: linear-gradient(rgba(255, 255, 255, 0), #ffffff); z-index: 2; pointer-events: none; ` diff --git a/src/components/MainSideBar/index.js b/src/components/MainSideBar/index.js index 63f83a84..5196c0b2 100644 --- a/src/components/MainSideBar/index.js +++ b/src/components/MainSideBar/index.js @@ -15,6 +15,7 @@ import type { UpdateStatus } from 'reducers/update' import { MODAL_RECEIVE, MODAL_SEND, MODAL_ADD_ACCOUNTS } from 'config/constants' +import { i } from 'helpers/staticPath' import { accountsSelector } from 'reducers/accounts' import { openModal } from 'reducers/modals' import { getUpdateStatus } from 'reducers/update' @@ -65,6 +66,13 @@ class MainSideBar extends PureComponent { push(to) } + ADD_ACCOUNT_EMPTY_STATE = ( + + + {this.props.t('app:emptyState.sidebar.text')} + + ) + handleClickDashboard = () => this.push('/') handleOpenSendModal = () => this.props.openModal(MODAL_SEND) handleOpenReceiveModal = () => this.props.openModal(MODAL_RECEIVE) @@ -130,7 +138,7 @@ class MainSideBar extends PureComponent { {accounts.map(account => ( { { ( - + {t('app:manager.title')} diff --git a/src/components/ManagerPage/ManagerGenuineCheck.js b/src/components/ManagerPage/ManagerGenuineCheck.js index 8b7effc3..a5255073 100644 --- a/src/components/ManagerPage/ManagerGenuineCheck.js +++ b/src/components/ManagerPage/ManagerGenuineCheck.js @@ -31,7 +31,7 @@ class ManagerGenuineCheck extends PureComponent { alt="connect your device" style={{ marginBottom: 30, maxWidth: 362, width: '100%' }} /> - + {t('app:manager.device.title')} diff --git a/src/components/SettingsPage/SettingsSection.js b/src/components/SettingsPage/SettingsSection.js index acd1f44b..03d9678c 100644 --- a/src/components/SettingsPage/SettingsSection.js +++ b/src/components/SettingsPage/SettingsSection.js @@ -106,7 +106,7 @@ export function SettingsSectionRow({ {title} - + {desc} diff --git a/src/components/base/Button/index.js b/src/components/base/Button/index.js index ec4b822f..1750a8a1 100644 --- a/src/components/base/Button/index.js +++ b/src/components/base/Button/index.js @@ -36,7 +36,7 @@ const buttonStyles: { [_: string]: Style } = { ? ` 0 0 0 1px ${darken(p.theme.colors.wallet, 0.3)} inset, 0 0 0 1px ${rgba(p.theme.colors.wallet, 0.5)}, - 0 0 0 4px ${rgba(p.theme.colors.wallet, 0.3)};` + 0 0 0 3px ${rgba(p.theme.colors.wallet, 0.3)};` : '' } `, @@ -56,7 +56,7 @@ const buttonStyles: { [_: string]: Style } = { ? ` 0 0 0 1px ${darken(p.theme.colors.alertRed, 0.3)} inset, 0 0 0 1px ${rgba(p.theme.colors.alertRed, 0.5)}, - 0 0 0 4px ${rgba(p.theme.colors.alertRed, 0.3)}; + 0 0 0 3px ${rgba(p.theme.colors.alertRed, 0.3)}; ` : '' } @@ -69,15 +69,30 @@ const buttonStyles: { [_: string]: Style } = { `, }, outline: { - default: p => ` - background: transparent; - border: 1px solid ${ - p.outlineColor ? p.theme.colors[p.outlineColor] || p.outlineColor : p.theme.colors.wallet - }; - color: ${ - p.outlineColor ? p.theme.colors[p.outlineColor] || p.outlineColor : p.theme.colors.wallet - }; - `, + default: p => { + const c = p.outlineColor + ? p.theme.colors[p.outlineColor] || p.outlineColor + : p.theme.colors.wallet + return ` + background: transparent; + border: 1px solid ${c}; + color: ${c}; + box-shadow: ${ + p.isFocused + ? ` + 0 0 0 3px ${rgba(c, 0.3)};` + : '' + } + ` + }, + hover: p => { + const c = p.outlineColor + ? p.theme.colors[p.outlineColor] || p.outlineColor + : p.theme.colors.wallet + return ` + background: ${rgba(c, 0.1)}; + ` + }, active: p => ` color: ${darken( p.outlineColor ? p.theme.colors[p.outlineColor] || p.outlineColor : p.theme.colors.wallet, diff --git a/src/components/base/SideBar/SideBarList.js b/src/components/base/SideBar/SideBarList.js index b5a629af..e8da9cff 100644 --- a/src/components/base/SideBar/SideBarList.js +++ b/src/components/base/SideBar/SideBarList.js @@ -11,13 +11,13 @@ type Props = { children: any, title?: Node | string, scroll?: boolean, - titleRight?: any, // TODO: type should be more precise, but, eh ¯\_(ツ)_/¯ - emptyText?: string, + titleRight?: any, + emptyState?: any, } class SideBarList extends Component { render() { - const { children, title, scroll, titleRight, emptyText, ...props } = this.props + const { children, title, scroll, titleRight, emptyState, ...props } = this.props const ListWrapper = scroll ? GrowScroll : Box return ( @@ -34,9 +34,9 @@ class SideBarList extends Component { {children} - ) : emptyText ? ( + ) : emptyState ? ( - {emptyText} + {emptyState} ) : null} diff --git a/src/components/modals/AddAccounts/steps/03-step-import.js b/src/components/modals/AddAccounts/steps/03-step-import.js index b84586cc..b74046fa 100644 --- a/src/components/modals/AddAccounts/steps/03-step-import.js +++ b/src/components/modals/AddAccounts/steps/03-step-import.js @@ -15,9 +15,9 @@ import CurrencyBadge from 'components/base/CurrencyBadge' import Button from 'components/base/Button' import AccountsList from 'components/base/AccountsList' import IconExclamationCircleThin from 'icons/ExclamationCircleThin' -import TranslatedError from '../../../TranslatedError' -import Spinner from '../../../base/Spinner' -import Text from '../../../base/Text' +import TranslatedError from 'components/TranslatedError' +import Spinner from 'components/base/Spinner' +import Text from 'components/base/Text' import type { StepProps } from '../index' @@ -281,6 +281,9 @@ class StepImport extends PureComponent { {scanStatus === 'scanning' ? ( + + {t('app:common.sync.syncing')} + ) : null} diff --git a/src/components/modals/OperationDetails.js b/src/components/modals/OperationDetails.js index 7fd95721..f3ee4618 100644 --- a/src/components/modals/OperationDetails.js +++ b/src/components/modals/OperationDetails.js @@ -129,7 +129,7 @@ const OperationDetails = connect(mapStateToProps)((props: Props) => { return ( {t('app:operationDetails.title')} - + diff --git a/src/components/modals/ReleaseNotes.js b/src/components/modals/ReleaseNotes.js index 37e7b35c..28abeb41 100644 --- a/src/components/modals/ReleaseNotes.js +++ b/src/components/modals/ReleaseNotes.js @@ -221,7 +221,7 @@ class ReleaseNotes extends PureComponent { return ( {t('app:releaseNotes.title')} - + {content} diff --git a/src/components/modals/UpdateFirmware/Disclaimer.js b/src/components/modals/UpdateFirmware/Disclaimer.js index 330795eb..532410ce 100644 --- a/src/components/modals/UpdateFirmware/Disclaimer.js +++ b/src/components/modals/UpdateFirmware/Disclaimer.js @@ -58,8 +58,8 @@ class DisclaimerModal extends PureComponent { {t('app:manager.firmware.disclaimerAppReinstall')} - - + + {firmware.notes} diff --git a/src/icons/GenuineCheck.js b/src/icons/GenuineCheck.js deleted file mode 100644 index 791c0ff4..00000000 --- a/src/icons/GenuineCheck.js +++ /dev/null @@ -1,32 +0,0 @@ -// @flow - -import React, { Fragment } from 'react' - -const path = ( - - - - -) - -export default ({ size, ...p }: { size: number }) => ( - - {path} - -) diff --git a/src/icons/Home.js b/src/icons/Home.js index cc38981f..4c4b509e 100644 --- a/src/icons/Home.js +++ b/src/icons/Home.js @@ -4,29 +4,19 @@ import React, { Fragment } from 'react' const path = ( - ) export default ({ size, ...p }: { size: number }) => ( - + {path} ) diff --git a/src/icons/SmoothBorders.js b/src/icons/SmoothBorders.js new file mode 100644 index 00000000..e69e67e2 --- /dev/null +++ b/src/icons/SmoothBorders.js @@ -0,0 +1,18 @@ +// @flow + +import React from 'react' + +const inner = ( + +) + +export default ({ size, ...p }: { size: number }) => ( + + {inner} + +) diff --git a/src/icons/Usb.js b/src/icons/Usb.js index 45be58c8..32870e01 100644 --- a/src/icons/Usb.js +++ b/src/icons/Usb.js @@ -2,24 +2,15 @@ import React from 'react' -const group = ( - - - - +const inner = ( + ) export default ({ size, ...p }: { size: number }) => ( - - {group} + + {inner} ) diff --git a/static/images/arrow-add.svg b/static/images/arrow-add.svg new file mode 100644 index 00000000..c2858c40 --- /dev/null +++ b/static/images/arrow-add.svg @@ -0,0 +1,14 @@ + + + + fleche + Created with Sketch. + + + + + + + + + \ No newline at end of file