From 8def4f5571e4f665ed0313fb4b2ac3a261c0c688 Mon Sep 17 00:00:00 2001
From: Anastasia Poupeney <anastasia.poupeney@ledger.fr>
Date: Fri, 8 Jun 2018 11:36:53 +0200
Subject: [PATCH] pixel polish, a few functional fixes, some new icons

---
 src/components/Onboarding/OnboardingFooter.js |  2 +-
 src/components/Onboarding/helperComponents.js |  4 +-
 src/components/Onboarding/steps/Analytics.js  | 35 +++++------
 .../Onboarding/steps/GenuineCheck.js          | 61 +++++++++----------
 src/components/Onboarding/steps/Init.js       |  2 +-
 .../Onboarding/steps/SelectDevice.js          |  3 +-
 .../steps/SelectPIN/SelectPINblue.js          |  6 +-
 src/components/base/Button/index.js           | 11 ++++
 .../illustrations/LedgerNanoSelectPIN.js      |  1 +
 .../illustrations/SensitiveOperationShield.js | 61 +++++++++++++++++++
 10 files changed, 127 insertions(+), 59 deletions(-)
 create mode 100644 src/icons/illustrations/SensitiveOperationShield.js

diff --git a/src/components/Onboarding/OnboardingFooter.js b/src/components/Onboarding/OnboardingFooter.js
index 2e56d1f0..c2658001 100644
--- a/src/components/Onboarding/OnboardingFooter.js
+++ b/src/components/Onboarding/OnboardingFooter.js
@@ -37,7 +37,7 @@ const OnboardingFooter = ({
   ...props
 }: Props) => (
   <Wrapper {...props}>
-    <Button padded outline onClick={() => prevStep()}>
+    <Button padded outlineGrey onClick={() => prevStep()}>
       {t('common:back')}
     </Button>
     <Button
diff --git a/src/components/Onboarding/helperComponents.js b/src/components/Onboarding/helperComponents.js
index f2b905fa..49359da5 100644
--- a/src/components/Onboarding/helperComponents.js
+++ b/src/components/Onboarding/helperComponents.js
@@ -4,7 +4,7 @@ import styled from 'styled-components'
 import { radii } from 'styles/theme'
 
 import Box from 'components/base/Box'
-import IconWarning from 'icons/Shield'
+import IconSensitiveOperationShield from 'icons/illustrations/SensitiveOperationShield'
 
 // GENERAL
 export const Title = styled(Box).attrs({
@@ -78,7 +78,7 @@ export function DisclaimerBox({ disclaimerNotes, ...p }: { disclaimerNotes: any
     <DisclaimerBoxContainer {...p}>
       <Box m={3} relative>
         <DisclaimerBoxIconContainer>
-          <IconWarning />
+          <IconSensitiveOperationShield />
         </DisclaimerBoxIconContainer>
         {disclaimerNotes.map(note => <OptionRow key={note.key} step={note} />)}
       </Box>
diff --git a/src/components/Onboarding/steps/Analytics.js b/src/components/Onboarding/steps/Analytics.js
index f0537441..34584285 100644
--- a/src/components/Onboarding/steps/Analytics.js
+++ b/src/components/Onboarding/steps/Analytics.js
@@ -45,41 +45,35 @@ class Analytics extends PureComponent<StepProps, State> {
     const { analyticsToggle, termsConditionsToggle, sentryLogsToggle } = this.state
 
     return (
-      <Box sticky pt={170}>
-        <Box grow alignItems="center">
+      <Box sticky pt={50}>
+        <Box grow alignItems="center" justifyContent="center">
           <Title>{t('onboarding:analytics.title')}</Title>
           <Description>{t('onboarding:analytics.desc')}</Description>
           <Box mt={5}>
             <Container>
-              <Box justify="center" style={{ width: 450 }}>
-                <Box horizontal>
-                  <AnalyticsTitle>{t('onboarding:analytics.sentryLogs.title')}</AnalyticsTitle>
-                </Box>
+              <Box>
+                <AnalyticsTitle>{t('onboarding:analytics.sentryLogs.title')}</AnalyticsTitle>
                 <AnalyticsText>{t('onboarding:analytics.sentryLogs.desc')}</AnalyticsText>
               </Box>
-              <Box alignItems="center" horizontal mx={5}>
+              <Box justifyContent="center">
                 <CheckBox isChecked={sentryLogsToggle} onChange={this.handleSentryLogsToggle} />
               </Box>
             </Container>
             <Container>
-              <Box justify="center" style={{ width: 450 }}>
-                <Box horizontal>
-                  <AnalyticsTitle>{t('onboarding:analytics.shareAnalytics.title')}</AnalyticsTitle>
-                </Box>
+              <Box>
+                <AnalyticsTitle>{t('onboarding:analytics.shareAnalytics.title')}</AnalyticsTitle>
                 <AnalyticsText>{t('onboarding:analytics.shareAnalytics.desc')}</AnalyticsText>
               </Box>
-              <Box alignItems="center" horizontal mx={5}>
+              <Box justifyContent="center">
                 <CheckBox isChecked={analyticsToggle} onChange={this.handleAnalyticsToggle} />
               </Box>
             </Container>
             <Container>
-              <Box justify="center" style={{ width: 450 }}>
-                <Box horizontal>
-                  <AnalyticsTitle>{t('onboarding:analytics.termsConditions.title')}</AnalyticsTitle>
-                </Box>
+              <Box>
+                <AnalyticsTitle>{t('onboarding:analytics.termsConditions.title')}</AnalyticsTitle>
                 <AnalyticsText>{t('onboarding:analytics.termsConditions.desc')}</AnalyticsText>
               </Box>
-              <Box alignItems="center" horizontal mx={5}>
+              <Box justifyContent="center">
                 <CheckBox isChecked={termsConditionsToggle} onChange={this.handleTermsToggle} />
               </Box>
             </Container>
@@ -110,7 +104,7 @@ export const AnalyticsText = styled(Box).attrs({
   textAlign: 'left',
   color: 'smoke',
 })`
-  max-width: 450px;
+  max-width: 400px;
 `
 export const AnalyticsTitle = styled(Box).attrs({
   ff: 'Open Sans|SemiBold',
@@ -122,4 +116,7 @@ export const AnalyticsTitle = styled(Box).attrs({
 const Container = styled(Box).attrs({
   horizontal: true,
   p: 3,
-})``
+})`
+  width: 550px;
+  justify-content: space-between;
+`
diff --git a/src/components/Onboarding/steps/GenuineCheck.js b/src/components/Onboarding/steps/GenuineCheck.js
index 32b91bad..0cfe4dec 100644
--- a/src/components/Onboarding/steps/GenuineCheck.js
+++ b/src/components/Onboarding/steps/GenuineCheck.js
@@ -120,8 +120,8 @@ class GenuineCheck extends PureComponent<StepProps, State> {
     }
 
     return (
-      <Box sticky pt={150}>
-        <Box grow alignItems="center">
+      <Box sticky pt={50}>
+        <Box grow alignItems="center" justifyContent="center">
           <Title>{t('onboarding:genuineCheck.title')}</Title>
           <Description>{t('onboarding:genuineCheck.desc')}</Description>
           <Box mt={5}>
@@ -132,15 +132,16 @@ class GenuineCheck extends PureComponent<StepProps, State> {
                   <CardTitle>{t('onboarding:genuineCheck.steps.step1.title')}</CardTitle>
                 </Box>
               </Box>
-              <RadioGroup
-                style={{ margin: '0 30px' }}
-                items={this.getButtonLabel()}
-                activeKey={cachedPinStepButton}
-                onChange={item => this.handleButtonPass(item, 'pinStepPass')}
-              />
+              <Box justify="center">
+                <RadioGroup
+                  items={this.getButtonLabel()}
+                  activeKey={cachedPinStepButton}
+                  onChange={item => this.handleButtonPass(item, 'pinStepPass')}
+                />
+              </Box>
             </CardWrapper>
           </Box>
-          <Box mt={5}>
+          <Box mt={3}>
             <CardWrapper isDisabled={!genuine.pinStepPass}>
               <Box justify="center">
                 <Box horizontal>
@@ -148,15 +149,16 @@ class GenuineCheck extends PureComponent<StepProps, State> {
                   <CardTitle>{t('onboarding:genuineCheck.steps.step2.title')}</CardTitle>
                 </Box>
               </Box>
-              <RadioGroup
-                style={{ margin: '0 30px' }}
-                items={this.getButtonLabel()}
-                activeKey={cachedRecoveryStepButton}
-                onChange={item => this.handleButtonPass(item, 'recoveryStepPass')}
-              />
+              <Box justify="center">
+                <RadioGroup
+                  items={this.getButtonLabel()}
+                  activeKey={cachedRecoveryStepButton}
+                  onChange={item => this.handleButtonPass(item, 'recoveryStepPass')}
+                />
+              </Box>
             </CardWrapper>
           </Box>
-          <Box mt={5}>
+          <Box mt={3}>
             <CardWrapper isDisabled={!genuine.recoveryStepPass}>
               <Box justify="center">
                 <Box horizontal>
@@ -164,7 +166,7 @@ class GenuineCheck extends PureComponent<StepProps, State> {
                   <CardTitle>{t('onboarding:genuineCheck.steps.step3.title')}</CardTitle>
                 </Box>
               </Box>
-              <Box justify="center" horizontal mx={5}>
+              <Box justify="center">
                 {genuine.isDeviceGenuine ? (
                   <Box horizontal align="center" flow={1} color={colors.wallet}>
                     <IconCheck size={16} />
@@ -218,29 +220,27 @@ export function GenuineCheckFail({
 }: {
   redoGenuineCheck: () => void,
   contactSupport: () => void,
-  isLedgerNano: boolean,
+  isLedgerNano: boolean | null,
   t: T,
 }) {
   return (
-    <Box sticky pt={250}>
-      <Box grow alignItems="center">
+    <Box sticky pt={50}>
+      <Box grow alignItems="center" justifyContent="center">
         {isLedgerNano ? (
           <Fragment>
             <Title>{t('onboarding:genuineCheck.errorPage.ledgerNano.title')}</Title>
-            <Description style={{ maxWidth: 527 }}>
-              {t('onboarding:genuineCheck.errorPage.ledgerNano.desc')}
-            </Description>
-            <Box style={{ minWidth: 527 }}>
+            <Description>{t('onboarding:genuineCheck.errorPage.ledgerNano.desc')}</Description>
+            <Box style={{ width: 550 }} mt={5} ml={100}>
               <IconLedgerNanoError />
             </Box>
           </Fragment>
         ) : (
           <Fragment>
             <Title>{t('onboarding:genuineCheck.errorPage.ledgerBlue.title')}</Title>
-            <Description style={{ maxWidth: 527 }}>
+            <Description pb={5}>
               {t('onboarding:genuineCheck.errorPage.ledgerBlue.desc')}
             </Description>
-            <Box style={{ minWidth: 527, alignItems: 'center' }}>
+            <Box alignItems="center">
               <IconLedgerBlueError />
             </Box>
           </Fragment>
@@ -248,7 +248,7 @@ export function GenuineCheckFail({
       </Box>
       <Wrapper horizontal>
         <Button
-          small
+          padded
           outline
           onClick={() => {
             redoGenuineCheck()
@@ -257,7 +257,7 @@ export function GenuineCheckFail({
           {t('common:back')}
         </Button>
         <Button
-          small
+          padded
           danger
           onClick={() => {
             contactSupport()
@@ -292,11 +292,10 @@ const Wrapper = styled(Box).attrs({
 const CardWrapper = styled(Card).attrs({
   horizontal: true,
   p: 5,
-  flow: 2,
   justify: 'space-between',
 })`
-  width: 550px;
-  height: 70px;
+  width: 580px;
+  height: 74px;
   border: ${p => `1px ${p.isDisabled ? 'dashed' : 'solid'} ${p.theme.colors.fog}`};
   pointer-events: ${p => (p.isDisabled ? 'none' : 'auto')};
   background-color: ${p => (p.isDisabled ? p.theme.colors.lightGrey : p.theme.colors.white)};
diff --git a/src/components/Onboarding/steps/Init.js b/src/components/Onboarding/steps/Init.js
index 2d0cf31e..e99fd845 100644
--- a/src/components/Onboarding/steps/Init.js
+++ b/src/components/Onboarding/steps/Init.js
@@ -7,7 +7,7 @@ import { colors } from 'styles/theme'
 
 import styled from 'styled-components'
 import { flowType } from 'reducers/onboarding'
-import Box, { Card } from 'components/base/Box'
+import Box from 'components/base/Box'
 import IconUser from 'icons/User'
 import IconPlus from 'icons/Plus'
 import IconRecover from 'icons/Recover'
diff --git a/src/components/Onboarding/steps/SelectDevice.js b/src/components/Onboarding/steps/SelectDevice.js
index 2357ce27..217fe574 100644
--- a/src/components/Onboarding/steps/SelectDevice.js
+++ b/src/components/Onboarding/steps/SelectDevice.js
@@ -7,12 +7,12 @@ import { rgba } from 'styles/helpers'
 
 import { isLedgerNano } from 'reducers/onboarding'
 
-import OnboardingFooter from '../OnboardingFooter'
 import Box from 'components/base/Box'
 import IconCheckCirle from 'icons/Check'
 import IconLedgerNano from 'icons/illustrations/LedgerNano'
 import IconLedgerBlue from 'icons/illustrations/LedgerBlue'
 import { Title, Inner } from '../helperComponents'
+import OnboardingFooter from '../OnboardingFooter'
 
 import type { StepProps } from '..'
 
@@ -24,7 +24,6 @@ class SelectDevice extends PureComponent<StepProps, {}> {
   }
   render() {
     const { t, onboarding, nextStep, prevStep, jumpStep } = this.props
-    console.log('wewee: ', onboarding.isLedgerNano)
     return (
       <Box sticky>
         <Box grow alignItems="center" justifyContent="center">
diff --git a/src/components/Onboarding/steps/SelectPIN/SelectPINblue.js b/src/components/Onboarding/steps/SelectPIN/SelectPINblue.js
index e0e19c83..a37330a4 100644
--- a/src/components/Onboarding/steps/SelectPIN/SelectPINblue.js
+++ b/src/components/Onboarding/steps/SelectPIN/SelectPINblue.js
@@ -58,11 +58,11 @@ class SelectPIN extends PureComponent<Props, *> {
 
     return (
       <Box align="center">
-        <Inner style={{ width: 700 }}>
-          <Box style={{ width: 260, justifyContent: 'center', alignItems: 'center' }} mt={2}>
+        <Inner style={{ width: 550 }}>
+          <Box style={{ width: 180, justifyContent: 'center', alignItems: 'center' }}>
             <IconLedgerBlueSelectPIN />
           </Box>
-          <Box mt={4}>
+          <Box>
             <Box shrink grow flow={4}>
               {stepsLedgerBlue.map(step => <OptionRow key={step.key} step={step} />)}
             </Box>
diff --git a/src/components/base/Button/index.js b/src/components/base/Button/index.js
index f01e20bf..a27c7f22 100644
--- a/src/components/base/Button/index.js
+++ b/src/components/base/Button/index.js
@@ -45,6 +45,17 @@ const buttonStyles = {
       border-color: ${darken(p.theme.colors.wallet, 0.1)};
     `,
   },
+  outlineGrey: {
+    default: p => `
+      background: transparent;
+      border: 1px solid ${p.theme.colors.grey};
+      color: ${p.theme.colors.grey};
+    `,
+    active: p => `
+      color: ${darken(p.theme.colors.grey, 0.1)};
+      border-color: ${darken(p.theme.colors.grey, 0.1)};
+    `,
+  },
   icon: {
     default: () => `
       font-size: ${fontSize[3]}px;
diff --git a/src/icons/illustrations/LedgerNanoSelectPIN.js b/src/icons/illustrations/LedgerNanoSelectPIN.js
index eecb5c71..aa9fb1c2 100644
--- a/src/icons/illustrations/LedgerNanoSelectPIN.js
+++ b/src/icons/illustrations/LedgerNanoSelectPIN.js
@@ -1,5 +1,6 @@
 // @flow
 import React from 'react'
+
 export default () => (
   <svg width="260" height="129">
     <defs>
diff --git a/src/icons/illustrations/SensitiveOperationShield.js b/src/icons/illustrations/SensitiveOperationShield.js
new file mode 100644
index 00000000..b80d5b45
--- /dev/null
+++ b/src/icons/illustrations/SensitiveOperationShield.js
@@ -0,0 +1,61 @@
+// @flow
+
+import React from 'react'
+
+export default () => (
+  <svg width="26" height="31">
+    <defs>
+      <path id="a" d="M4 0h600a4 4 0 0 1 4 4v112a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z" />
+      <mask id="b" width="608" height="120" x="0" y="0" fill="#fff">
+        <use xlinkHref="#a" />
+      </mask>
+      <filter
+        id="c"
+        width="153.8%"
+        height="141.9%"
+        x="-26.9%"
+        y="-19.4%"
+        filterUnits="objectBoundingBox"
+      >
+        <feOffset dy="1" in="SourceAlpha" result="shadowOffsetOuter1" />
+        <feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="1.5" />
+        <feColorMatrix
+          in="shadowBlurOuter1"
+          result="shadowMatrixOuter1"
+          values="0 0 0 0 0.418261054 0 0 0 0 0.418261054 0 0 0 0 0.418261054 0 0 0 0.116196784 0"
+        />
+        <feMerge>
+          <feMergeNode in="shadowMatrixOuter1" />
+          <feMergeNode in="SourceGraphic" />
+        </feMerge>
+      </filter>
+      <path id="d" d="M13 30s13-4.426 13-14.016V4.795L13 0 0 4.795v11.189C0 25.574 13 30 13 30z" />
+    </defs>
+    <g fill="none" fillRule="evenodd" transform="translate(-567 -15)">
+      <use
+        fill="#F9F9F9"
+        fillOpacity=".5"
+        stroke="#D8D8D8"
+        strokeDasharray="3"
+        strokeWidth="2"
+        mask="url(#b)"
+        xlinkHref="#a"
+      />
+      <g filter="url(#c)" transform="translate(567 15)">
+        <g strokeLinecap="round" strokeLinejoin="round">
+          <use fill="#FFF" stroke="#EA2E49" strokeWidth="1.5" xlinkHref="#d" />
+          <path
+            stroke="#FFF"
+            strokeWidth="2"
+            d="M12.678 30.947c-.116-.04-.321-.115-.603-.225-.462-.182-.975-.4-1.527-.656a29.353 29.353 0 0 1-4.627-2.662C1.621 24.354-1 20.56-1 15.984V4.098l14-5.164 14 5.164v11.886c0 4.577-2.62 8.37-6.921 11.42a29.353 29.353 0 0 1-4.627 2.662c-.552.256-1.065.474-1.527.656-.282.11-.487.185-.603.225l-.322.11-.322-.11z"
+          />
+        </g>
+        <path
+          fill="#EA2E49"
+          fillRule="nonzero"
+          d="M17.129 10.305c-.419 0-.76.35-.76.783l-.013 3.51s.001.246-.227.246c-.234 0-.227-.245-.227-.245V9.534a.755.755 0 0 0-.756-.768c-.42 0-.718.336-.718.768v5.064s-.026.248-.251.248c-.224 0-.24-.248-.24-.248V8.69c0-.432-.316-.76-.736-.76s-.738.328-.738.76v5.908s-.011.237-.253.237c-.237 0-.238-.237-.238-.237V10.21c0-.432-.328-.703-.747-.703-.42 0-.727.27-.727.703v6.415s-.04.285-.437-.186c-1.017-1.206-1.548-1.446-1.548-1.446s-.965-.488-1.393.392c-.31.639.019.673.525 1.457.448.694 1.866 2.52 1.866 2.52s1.68 2.444 3.95 2.444c0 0 4.442.196 4.442-4.336l-.015-6.381a.771.771 0 0 0-.76-.783"
+        />
+      </g>
+    </g>
+  </svg>
+)