Browse Source

Merge pull request #826 from meriadec/polishes

Visual polishes
master
Gaëtan Renaudeau 7 years ago
committed by GitHub
parent
commit
d924c7bd60
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/components/DeviceInteraction/DeviceInteractionStep.js
  2. 28
      src/components/DeviceInteraction/components.js
  3. 6
      src/components/EnsureDeviceApp.js
  4. 6
      src/components/ExchangePage/index.js
  5. 10
      src/components/GenuineCheck.js
  6. 4
      src/components/GradientBox.js
  7. 10
      src/components/MainSideBar/index.js
  8. 4
      src/components/ManagerPage/AppsList.js
  9. 2
      src/components/ManagerPage/Dashboard.js
  10. 2
      src/components/ManagerPage/ManagerGenuineCheck.js
  11. 2
      src/components/SettingsPage/SettingsSection.js
  12. 35
      src/components/base/Button/index.js
  13. 10
      src/components/base/SideBar/SideBarList.js
  14. 9
      src/components/modals/AddAccounts/steps/03-step-import.js
  15. 2
      src/components/modals/OperationDetails.js
  16. 2
      src/components/modals/ReleaseNotes.js
  17. 4
      src/components/modals/UpdateFirmware/Disclaimer.js
  18. 32
      src/icons/GenuineCheck.js
  19. 20
      src/icons/Home.js
  20. 18
      src/icons/SmoothBorders.js
  21. 19
      src/icons/Usb.js
  22. 14
      static/images/arrow-add.svg

2
src/components/DeviceInteraction/DeviceInteractionStep.js

@ -180,7 +180,7 @@ class DeviceInteractionStep extends PureComponent<
<IconContainer isTransparent={!isActive && !isSuccess}>{step.icon}</IconContainer> <IconContainer isTransparent={!isActive && !isSuccess}>{step.icon}</IconContainer>
<Box py={4} justify="center" grow shrink> <Box py={4} justify="center" grow shrink>
{title && ( {title && (
<Box color={isActive || isSuccess ? 'dark' : ''} ff="Open Sans|SemiBold"> <Box color={isActive || isSuccess ? 'dark' : ''} ff="Open Sans|Regular">
{title} {title}
</Box> </Box>
)} )}

28
src/components/DeviceInteraction/components.js

@ -4,7 +4,6 @@ import React from 'react'
import styled from 'styled-components' import styled from 'styled-components'
import { radii } from 'styles/theme' import { radii } from 'styles/theme'
import { rgba } from 'styles/helpers'
import TranslatedError from 'components/TranslatedError' import TranslatedError from 'components/TranslatedError'
import Box from 'components/base/Box' import Box from 'components/base/Box'
@ -13,12 +12,12 @@ import Spinner from 'components/base/Spinner'
import IconCheck from 'icons/Check' import IconCheck from 'icons/Check'
import IconCross from 'icons/Cross' import IconCross from 'icons/Cross'
import IconExclamationCircle from 'icons/ExclamationCircle' import IconExclamationCircle from 'icons/ExclamationCircle'
import IconSmoothBorders from 'icons/SmoothBorders'
export const DeviceInteractionStepContainer = styled(Box).attrs({ export const DeviceInteractionStepContainer = styled(Box).attrs({
horizontal: true, horizontal: true,
ff: 'Open Sans', ff: 'Open Sans',
fontSize: 3, fontSize: 3,
bg: 'white',
color: 'graphite', color: 'graphite',
})` })`
position: relative; position: relative;
@ -27,21 +26,28 @@ export const DeviceInteractionStepContainer = styled(Box).attrs({
min-height: 80px; min-height: 80px;
border: 1px solid ${p => p.theme.colors.fog}; border: 1px solid ${p => p.theme.colors.fog};
border-color: ${p => 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-top-color: ${p => (p.isFirst || p.isActive ? '' : 'transparent')};
border-bottom-color: ${p => (p.isPrecedentActive ? 'transparent' : '')}; border-bottom-color: ${p => (p.isPrecedentActive ? 'transparent' : '')};
border-bottom-left-radius: ${p => (p.isLast ? `${radii[1]}px` : 0)}; border-bottom-left-radius: ${p => (p.isLast ? `${radii[1]}px` : 0)};
border-bottom-right-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-left-radius: ${p => (p.isFirst ? `${radii[1]}px` : 0)};
border-top-right-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 = <IconSmoothBorders size={28} />
export const IconContainer = ({ export const IconContainer = ({
children, children,
isTransparent, isTransparent,
@ -50,15 +56,15 @@ export const IconContainer = ({
isTransparent: boolean, isTransparent: boolean,
}) => ( }) => (
<Box <Box
align="center" relative
justify="center"
color="dark" color="dark"
style={{ style={{
width: 70, width: 70,
opacity: isTransparent ? 0.5 : 1, opacity: isTransparent ? 0.5 : 1,
}} }}
> >
{children} <AbsCenter>{smoothBorders}</AbsCenter>
<AbsCenter>{children}</AbsCenter>
</Box> </Box>
) )

6
src/components/EnsureDeviceApp.js

@ -27,8 +27,8 @@ import { getCurrentDevice } from 'reducers/devices'
export const WrongAppOpened = createCustomErrorClass('WrongAppOpened') export const WrongAppOpened = createCustomErrorClass('WrongAppOpened')
export const WrongDeviceForAccount = createCustomErrorClass('WrongDeviceForAccount') export const WrongDeviceForAccount = createCustomErrorClass('WrongDeviceForAccount')
const usbIcon = <IconUsb size={30} /> const usbIcon = <IconUsb size={16} />
const Bold = props => <Text ff="Open Sans|Bold" {...props} /> const Bold = props => <Text ff="Open Sans|SemiBold" {...props} />
const mapStateToProps = state => ({ const mapStateToProps = state => ({
device: getCurrentDevice(state), device: getCurrentDevice(state),
@ -107,7 +107,7 @@ class EnsureDeviceApp extends Component<{
{ {
id: 'address', id: 'address',
title: this.renderOpenAppTitle, title: this.renderOpenAppTitle,
icon: Icon ? <Icon size={30} /> : null, icon: Icon ? <Icon size={16} /> : null,
run: this.openAppInteractionHandler, run: this.openAppInteractionHandler,
}, },
]} ]}

6
src/components/ExchangePage/index.js

@ -44,13 +44,13 @@ class ExchangePage extends PureComponent<Props> {
return ( return (
<Box pb={6}> <Box pb={6}>
<TrackPage category="Exchange" /> <TrackPage category="Exchange" />
<Box ff="Museo Sans|Regular" color="dark" fontSize={7} mb={3}> <Box ff="Museo Sans|Regular" fontSize={7} color="dark">
{t('app:exchange.title')} {t('app:exchange.title')}
</Box> </Box>
<Box ff="Museo Sans|Light" color="grey" fontSize={5} mb={5}> <Box ff="Museo Sans|Light" fontSize={5} mb={5}>
{t('app:exchange.desc')} {t('app:exchange.desc')}
</Box> </Box>
<Box flow={5}>{cards.map(card => <ExchangeCard key={card.key} t={t} card={card} />)}</Box> <Box flow={3}>{cards.map(card => <ExchangeCard key={card.key} t={t} card={card} />)}</Box>
</Box> </Box>
) )
} }

10
src/components/GenuineCheck.js

@ -24,7 +24,7 @@ import Text from 'components/base/Text'
import IconUsb from 'icons/Usb' import IconUsb from 'icons/Usb'
import IconHome from 'icons/Home' import IconHome from 'icons/Home'
import IconGenuineCheck from 'icons/GenuineCheck' import IconCheck from 'icons/Check'
const DeviceNotGenuineError = createCustomErrorClass('DeviceNotGenuine') const DeviceNotGenuineError = createCustomErrorClass('DeviceNotGenuine')
@ -36,15 +36,15 @@ type Props = {
device: ?Device, device: ?Device,
} }
const usbIcon = <IconUsb size={26} /> const usbIcon = <IconUsb size={16} />
const homeIcon = <IconHome size={24} /> const homeIcon = <IconHome size={16} />
const genuineCheckIcon = <IconGenuineCheck size={24} /> const genuineCheckIcon = <IconCheck size={16} />
const mapStateToProps = state => ({ const mapStateToProps = state => ({
device: getCurrentDevice(state), device: getCurrentDevice(state),
}) })
const Bold = props => <Text ff="Open Sans|Bold" {...props} /> const Bold = props => <Text ff="Open Sans|SemiBold" {...props} />
// to speed up genuine check, cache result by device id // to speed up genuine check, cache result by device id
const genuineDevices = new WeakSet() const genuineDevices = new WeakSet()

4
src/components/GradientBox.js

@ -5,10 +5,10 @@ export default styled.div`
width: 100%; width: 100%;
height: 60px; height: 60px;
position: absolute; position: absolute;
bottom: 68px; bottom: 0;
left: 0; left: 0;
right: 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; z-index: 2;
pointer-events: none; pointer-events: none;
` `

10
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 { MODAL_RECEIVE, MODAL_SEND, MODAL_ADD_ACCOUNTS } from 'config/constants'
import { i } from 'helpers/staticPath'
import { accountsSelector } from 'reducers/accounts' import { accountsSelector } from 'reducers/accounts'
import { openModal } from 'reducers/modals' import { openModal } from 'reducers/modals'
import { getUpdateStatus } from 'reducers/update' import { getUpdateStatus } from 'reducers/update'
@ -65,6 +66,13 @@ class MainSideBar extends PureComponent<Props> {
push(to) push(to)
} }
ADD_ACCOUNT_EMPTY_STATE = (
<Box relative>
<img style={{ position: 'absolute', top: 0, right: 5 }} alt="" src={i('arrow-add.svg')} />
{this.props.t('app:emptyState.sidebar.text')}
</Box>
)
handleClickDashboard = () => this.push('/') handleClickDashboard = () => this.push('/')
handleOpenSendModal = () => this.props.openModal(MODAL_SEND) handleOpenSendModal = () => this.props.openModal(MODAL_SEND)
handleOpenReceiveModal = () => this.props.openModal(MODAL_RECEIVE) handleOpenReceiveModal = () => this.props.openModal(MODAL_RECEIVE)
@ -130,7 +138,7 @@ class MainSideBar extends PureComponent<Props> {
<SideBarList <SideBarList
title={t('app:sidebar.accounts', { count: accounts.length })} title={t('app:sidebar.accounts', { count: accounts.length })}
titleRight={addAccountButton} titleRight={addAccountButton}
emptyText={t('app:emptyState.sidebar.text')} emptyState={this.ADD_ACCOUNT_EMPTY_STATE}
> >
{accounts.map(account => ( {accounts.map(account => (
<AccountListItem <AccountListItem

4
src/components/ManagerPage/AppsList.js

@ -205,7 +205,7 @@ class AppsList extends PureComponent<Props, State> {
<ExclamationCircleThin size={44} /> <ExclamationCircleThin size={44} />
</Box> </Box>
<Box <Box
color="black" color="dark"
mt={4} mt={4}
fontSize={6} fontSize={6}
ff="Museo Sans|Regular" ff="Museo Sans|Regular"
@ -238,7 +238,7 @@ class AppsList extends PureComponent<Props, State> {
<CheckCircle size={44} /> <CheckCircle size={44} />
</Box> </Box>
<Box <Box
color="black" color="dark"
mt={4} mt={4}
fontSize={6} fontSize={6}
ff="Museo Sans|Regular" ff="Museo Sans|Regular"

2
src/components/ManagerPage/Dashboard.js

@ -22,7 +22,7 @@ const Dashboard = ({ device, deviceInfo, t }: Props) => (
<Box flow={4} pb={8}> <Box flow={4} pb={8}>
<TrackPage category="Manager" name="Dashboard" /> <TrackPage category="Manager" name="Dashboard" />
<Box> <Box>
<Text ff="Museo Sans|Regular" fontSize={7} color="black"> <Text ff="Museo Sans|Regular" fontSize={7} color="dark">
{t('app:manager.title')} {t('app:manager.title')}
</Text> </Text>
<Text ff="Museo Sans|Light" fontSize={5}> <Text ff="Museo Sans|Light" fontSize={5}>

2
src/components/ManagerPage/ManagerGenuineCheck.js

@ -31,7 +31,7 @@ class ManagerGenuineCheck extends PureComponent<Props> {
alt="connect your device" alt="connect your device"
style={{ marginBottom: 30, maxWidth: 362, width: '100%' }} style={{ marginBottom: 30, maxWidth: 362, width: '100%' }}
/> />
<Text ff="Museo Sans|Regular" fontSize={7} color="black" style={{ marginBottom: 10 }}> <Text ff="Museo Sans|Regular" fontSize={7} color="dark" style={{ marginBottom: 10 }}>
{t('app:manager.device.title')} {t('app:manager.device.title')}
</Text> </Text>
<Text ff="Museo Sans|Light" fontSize={5} color="grey" align="center"> <Text ff="Museo Sans|Light" fontSize={5} color="grey" align="center">

2
src/components/SettingsPage/SettingsSection.js

@ -106,7 +106,7 @@ export function SettingsSectionRow({
<Box ff="Open Sans|SemiBold" color="dark" fontSize={4}> <Box ff="Open Sans|SemiBold" color="dark" fontSize={4}>
{title} {title}
</Box> </Box>
<Box ff="Open Sans" fontSize={3} color="grey" mt={1} mr={1}> <Box ff="Open Sans" fontSize={3} color="grey" mt={1} mr={1} style={{ maxWidth: 520 }}>
{desc} {desc}
</Box> </Box>
</Box> </Box>

35
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 ${darken(p.theme.colors.wallet, 0.3)} inset,
0 0 0 1px ${rgba(p.theme.colors.wallet, 0.5)}, 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 ${darken(p.theme.colors.alertRed, 0.3)} inset,
0 0 0 1px ${rgba(p.theme.colors.alertRed, 0.5)}, 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: { outline: {
default: p => ` default: p => {
const c = p.outlineColor
? p.theme.colors[p.outlineColor] || p.outlineColor
: p.theme.colors.wallet
return `
background: transparent; background: transparent;
border: 1px solid ${ border: 1px solid ${c};
p.outlineColor ? p.theme.colors[p.outlineColor] || p.outlineColor : p.theme.colors.wallet color: ${c};
}; box-shadow: ${
color: ${ p.isFocused
p.outlineColor ? p.theme.colors[p.outlineColor] || p.outlineColor : p.theme.colors.wallet ? `
}; 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 => ` active: p => `
color: ${darken( color: ${darken(
p.outlineColor ? p.theme.colors[p.outlineColor] || p.outlineColor : p.theme.colors.wallet, p.outlineColor ? p.theme.colors[p.outlineColor] || p.outlineColor : p.theme.colors.wallet,

10
src/components/base/SideBar/SideBarList.js

@ -11,13 +11,13 @@ type Props = {
children: any, children: any,
title?: Node | string, title?: Node | string,
scroll?: boolean, scroll?: boolean,
titleRight?: any, // TODO: type should be more precise, but, eh ¯\_(ツ)_/¯ titleRight?: any,
emptyText?: string, emptyState?: any,
} }
class SideBarList extends Component<Props> { class SideBarList extends Component<Props> {
render() { render() {
const { children, title, scroll, titleRight, emptyText, ...props } = this.props const { children, title, scroll, titleRight, emptyState, ...props } = this.props
const ListWrapper = scroll ? GrowScroll : Box const ListWrapper = scroll ? GrowScroll : Box
return ( return (
<Fragment> <Fragment>
@ -34,9 +34,9 @@ class SideBarList extends Component<Props> {
<ListWrapper flow={2} px={3} fontSize={3} {...props}> <ListWrapper flow={2} px={3} fontSize={3} {...props}>
{children} {children}
</ListWrapper> </ListWrapper>
) : emptyText ? ( ) : emptyState ? (
<Box px={4} ff="Open Sans|Regular" fontSize={3} color="grey"> <Box px={4} ff="Open Sans|Regular" fontSize={3} color="grey">
{emptyText} {emptyState}
</Box> </Box>
) : null} ) : null}
</Fragment> </Fragment>

9
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 Button from 'components/base/Button'
import AccountsList from 'components/base/AccountsList' import AccountsList from 'components/base/AccountsList'
import IconExclamationCircleThin from 'icons/ExclamationCircleThin' import IconExclamationCircleThin from 'icons/ExclamationCircleThin'
import TranslatedError from '../../../TranslatedError' import TranslatedError from 'components/TranslatedError'
import Spinner from '../../../base/Spinner' import Spinner from 'components/base/Spinner'
import Text from '../../../base/Text' import Text from 'components/base/Text'
import type { StepProps } from '../index' import type { StepProps } from '../index'
@ -281,6 +281,9 @@ class StepImport extends PureComponent<StepProps> {
{scanStatus === 'scanning' ? ( {scanStatus === 'scanning' ? (
<LoadingRow> <LoadingRow>
<Spinner color="grey" size={16} /> <Spinner color="grey" size={16} />
<Box ml={2} ff="Open Sans|Regular" color="grey" fontSize={4}>
{t('app:common.sync.syncing')}
</Box>
</LoadingRow> </LoadingRow>
) : null} ) : null}
</Box> </Box>

2
src/components/modals/OperationDetails.js

@ -129,7 +129,7 @@ const OperationDetails = connect(mapStateToProps)((props: Props) => {
return ( return (
<ModalBody onClose={onClose}> <ModalBody onClose={onClose}>
<ModalTitle>{t('app:operationDetails.title')}</ModalTitle> <ModalTitle>{t('app:operationDetails.title')}</ModalTitle>
<ModalContent style={{ height: 500 }} mx={-5} pb={0}> <ModalContent relative style={{ height: 500 }} px={0} pb={0}>
<GrowScroll px={5} pt={1} pb={8}> <GrowScroll px={5} pt={1} pb={8}>
<Box flow={3}> <Box flow={3}>
<Box alignItems="center" mt={1}> <Box alignItems="center" mt={1}>

2
src/components/modals/ReleaseNotes.js

@ -221,7 +221,7 @@ class ReleaseNotes extends PureComponent<Props, State> {
return ( return (
<ModalBody onClose={onClose}> <ModalBody onClose={onClose}>
<ModalTitle>{t('app:releaseNotes.title')}</ModalTitle> <ModalTitle>{t('app:releaseNotes.title')}</ModalTitle>
<ModalContent style={{ height: 500 }} mx={-5} pb={0}> <ModalContent relative style={{ height: 500 }} px={0} pb={0}>
<GrowScroll px={5} pb={8}> <GrowScroll px={5} pb={8}>
{content} {content}
</GrowScroll> </GrowScroll>

4
src/components/modals/UpdateFirmware/Disclaimer.js

@ -58,8 +58,8 @@ class DisclaimerModal extends PureComponent<Props, State> {
{t('app:manager.firmware.disclaimerAppReinstall')} {t('app:manager.firmware.disclaimerAppReinstall')}
</Text> </Text>
</ModalContent> </ModalContent>
<ModalContent style={{ height: 250, width: '100%' }}> <ModalContent relative pb={0} style={{ height: 250, width: '100%' }}>
<GrowScroll> <GrowScroll pb={5}>
<Notes> <Notes>
<ReactMarkdown>{firmware.notes}</ReactMarkdown> <ReactMarkdown>{firmware.notes}</ReactMarkdown>
</Notes> </Notes>

32
src/icons/GenuineCheck.js

@ -1,32 +0,0 @@
// @flow
import React, { Fragment } from 'react'
const path = (
<Fragment>
<rect
x=".75"
y=".75"
width="24"
height="24"
rx="8"
fill="none"
fillRule="evenodd"
stroke="currentColor"
strokeWidth="1.5"
/>
<path
transform="translate(4.75,4.75)"
width="100%"
height="100%"
fill="#000000"
d="m13.62 2.6083-8.2201 8.2201-3.0204-3.0204c-0.14644-0.14644-0.38388-0.14644-0.53034 0l-0.88388 0.88388c-0.14644 0.14644-0.14644 0.38388 0 0.53034l4.1694 4.1694c0.14644 0.14644 0.38388 0.14644 0.53034 0l9.3692-9.3692c0.14644-0.14644 0.14644-0.38387 0-0.53034l-0.88388-0.88388c-0.14644-0.14644-0.38388-0.14644-0.53031 0z"
/>
</Fragment>
)
export default ({ size, ...p }: { size: number }) => (
<svg viewBox="0 0 25.5 25.5" height={size} width={size} {...p}>
{path}
</svg>
)

20
src/icons/Home.js

@ -4,29 +4,19 @@ import React, { Fragment } from 'react'
const path = ( const path = (
<Fragment> <Fragment>
<rect <path
x=".75" fill="currentColor"
y=".75" d="m9.9609 0a1.0001 1.0001 0 0 0-0.57422 0.21094l-9 7a1.0001 1.0001 0 0 0-0.38672 0.78906v11c0 1.645 1.355 3 3 3h14c1.645 0 3-1.355 3-3v-11a1.0001 1.0001 0 0 0-0.38672-0.78906l-9-7a1.0001 1.0001 0 0 0-0.65234-0.21094zm0.039062 2.2676 8 6.2207v10.512c0 0.56413-0.43587 1-1 1h-14c-0.56413 0-1-0.43587-1-1v-10.512z"
width="24"
height="24"
rx="8"
fill="none"
fillRule="evenodd"
stroke="currentColor"
strokeWidth="1.5"
/> />
<path <path
fill="currentColor" fill="currentColor"
transform="translate(4.75,4.75)" d="m7 10a1.0001 1.0001 0 0 0-1 1v10a1.0001 1.0001 0 1 0 2 0v-9h4v9a1.0001 1.0001 0 1 0 2 0v-10a1.0001 1.0001 0 0 0-1-1z"
width="100%"
height="100%"
d="m2.75 6.3668v6.9665c0 0.32217 0.26117 0.58333 0.58333 0.58333h9.3333c0.32217 0 0.58333-0.26117 0.58333-0.58333v-6.9665l-5.25-4.0833zm-1.2105-0.95883 6-4.6667c0.27083-0.21065 0.65008-0.21065 0.92091 0l6 4.6667c0.18269 0.14209 0.28954 0.36057 0.28954 0.59201v7.3333c0 1.1506-0.93274 2.0833-2.0833 2.0833h-9.3333c-1.1506 0-2.0833-0.93274-2.0833-2.0833v-7.3333c0-0.23144 0.10685-0.44992 0.28954-0.59201zm5.2105 3.342v5.9167c0 0.41421-0.33579 0.75-0.75 0.75s-0.75-0.33579-0.75-0.75v-6.6667c0-0.41421 0.33579-0.75 0.75-0.75h4c0.41421 0 0.75 0.33579 0.75 0.75v6.6667c0 0.41421-0.33579 0.75-0.75 0.75-0.41421 0-0.75-0.33579-0.75-0.75v-5.9167z"
/> />
</Fragment> </Fragment>
) )
export default ({ size, ...p }: { size: number }) => ( export default ({ size, ...p }: { size: number }) => (
<svg viewBox="0 0 25.5 25.5" height={size} width={size} {...p}> <svg viewBox="0 0 20 22.014" height={size} width={size} {...p}>
{path} {path}
</svg> </svg>
) )

18
src/icons/SmoothBorders.js

@ -0,0 +1,18 @@
// @flow
import React from 'react'
const inner = (
<path
d="m8.75 0.75h12c4.432 0 8 3.568 8 8v12c0 4.432-3.568 8-8 8h-12c-4.432 0-8-3.568-8-8v-12c0-4.432 3.568-8 8-8z"
fill="none"
stroke="currentColor"
strokeWidth="1.5"
/>
)
export default ({ size, ...p }: { size: number }) => (
<svg viewBox="0 0 29.5 29.5" height={size} width={size} {...p}>
{inner}
</svg>
)

19
src/icons/Usb.js

@ -2,24 +2,15 @@
import React from 'react' import React from 'react'
const group = ( const inner = (
<g fill="currentColor">
<path <path
fill="none" transform="translate(-1 -.5)"
d="m9 1h8c4.432 0 8 3.568 8 8v8c0 4.432-3.568 8-8 8h-8c-4.432 0-8-3.568-8-8v-8c0-4.432 3.568-8 8-8z" d="m14.79 3.65-2.94-2.94c-0.28-0.28-0.7-0.28-0.98 0l-2.45 2.45-1.05-0.98c-0.28-0.28-0.7-0.28-0.98 0l-3.01 3.01c-1.68 1.68-1.89 4.41-0.42 6.37l-1.75 1.75c-0.28 0.28-0.28 0.7 0 0.98s0.7 0.28 0.98 0l1.75-1.75c1.96 1.47 4.69 1.26 6.37-0.49l2.94-2.94c0.28-0.28 0.28-0.7 0-0.98l-0.98-0.98 2.52-2.45c0.28-0.28 0.28-0.77 0-1.05zm-5.46 7.42c-1.33 1.33-3.57 1.33-4.97 0-1.4-1.4-1.4-3.57 0-4.97l2.45-2.45 4.97 4.97zm2.03-4.9-1.96-1.96 1.96-1.96 1.96 1.96z"
fillRule="evenodd"
stroke="currentColor"
strokeWidth="1.5"
/> />
<path
fill="currentColor"
d="m19.79 9.65-2.94-2.94c-0.28-0.28-0.7-0.28-0.98 0l-2.45 2.45-1.05-0.98c-0.28-0.28-0.7-0.28-0.98 0l-3.01 3.01c-1.68 1.68-1.89 4.41-0.42 6.37l-1.75 1.75c-0.28 0.28-0.28 0.7 0 0.98s0.7 0.28 0.98 0l1.75-1.75c1.96 1.47 4.69 1.26 6.37-0.49l2.94-2.94c0.28-0.28 0.28-0.7 0-0.98l-0.98-0.98 2.52-2.45c0.28-0.28 0.28-0.77 0-1.05zm-5.46 7.42c-1.33 1.33-3.57 1.33-4.97 0-1.4-1.4-1.4-3.57 0-4.97l2.45-2.45 4.97 4.97zm2.03-4.9-1.96-1.96 1.96-1.96 1.96 1.96z"
/>
</g>
) )
export default ({ size, ...p }: { size: number }) => ( export default ({ size, ...p }: { size: number }) => (
<svg viewBox="0 0 26 26" height={size} width={size} {...p}> <svg viewBox="0 0 14 14" height={size} width={size} {...p}>
{group} {inner}
</svg> </svg>
) )

14
static/images/arrow-add.svg

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 50.2 (55047) - http://www.bohemiancoding.com/sketch -->
<title>fleche</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Empty-State" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Desktop/EmptyState/Dashboard" transform="translate(-177.000000, -396.000000)" fill="#D8D8D8" fill-rule="nonzero">
<g id="fleche" transform="translate(193.000000, 412.000000) scale(-1, 1) translate(-193.000000, -412.000000) translate(177.000000, 396.000000)">
<path d="M31.6933648,8.09651084 L31.6943649,8.09551085 C31.6953649,8.09401085 31.6963649,8.09251085 31.6973649,8.09051085 C31.7833657,7.99301089 31.8463663,7.87551095 31.8968668,7.751511 C31.9128669,7.71351102 31.923367,7.67751103 31.9348671,7.63901105 C31.9638674,7.5435111 31.9818676,7.44451114 31.9878677,7.34101119 C31.9908677,7.3030112 31.9968677,7.26701122 31.9958677,7.22801124 C31.9958677,7.20801125 32.0008678,7.19001126 31.9998678,7.17051126 C31.9928677,7.05101132 31.9688675,6.93551137 31.9318671,6.82701142 C31.9288671,6.81551143 31.920867,6.80651143 31.916867,6.79501144 C31.8728666,6.67551149 31.809866,6.56951154 31.7353652,6.47251158 C31.7248651,6.45901159 31.7213651,6.4410116 31.710365,6.4275116 L26.5548159,0.354514357 C26.1603121,-0.110485432 25.5128059,-0.119485428 25.1078021,0.336014366 C24.7037982,0.791014159 24.6962982,1.53701382 25.0918019,2.00301361 L27.8708284,5.27751212 C23.8102897,4.73951237 19.8187517,5.59401198 19.6302499,5.63601196 C7.30713242,7.86951095 -1.41345069,19.2495058 0.19006459,31.0040005 C0.269565348,31.5860002 0.704069489,32 1.19957421,32 C1.25257472,32 1.30557522,31.9955 1.35957574,31.9865 C1.91758106,31.8850001 2.29858469,31.2820003 2.21158386,30.6385006 C0.783070242,20.1685054 8.73964608,9.99750998 19.9802532,7.95951091 C20.0317537,7.94751091 24.155793,7.06251131 28.03883,7.67251104 L23.7502891,10.2190099 C23.2477844,10.5180097 23.0512825,11.2290094 23.3097849,11.8075092 C23.5677874,12.3870089 24.1837933,12.6115088 24.6877981,12.3160089 L31.4478625,8.30201075 C31.5393634,8.24651078 31.6213642,8.17701081 31.6933648,8.09651084 Z" id="Shape" transform="translate(16.000000, 16.000000) rotate(-90.000000) translate(-16.000000, -16.000000) "></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

Loading…
Cancel
Save