diff --git a/app/src/__tests__/components/auth/AuthPage.spec.tsx b/app/src/__tests__/components/auth/AuthPage.spec.tsx index d6d643352..a3ed94562 100644 --- a/app/src/__tests__/components/auth/AuthPage.spec.tsx +++ b/app/src/__tests__/components/auth/AuthPage.spec.tsx @@ -26,14 +26,9 @@ describe('AuthPage ', () => { expect(getByText('Terminal')).toBeInTheDocument(); }); - it('should display the password field', () => { - const { getByLabelText } = render(); - expect(getByLabelText('Enter your password in the field above')).toBeInTheDocument(); - }); - - it('should display the submit button', () => { + it('should display the login button', () => { const { getByText } = render(); - expect(getByText('Submit')).toBeInTheDocument(); + expect(getByText('Login')).toBeInTheDocument(); }); it('should display nothing when the store is not initialized', () => { @@ -49,7 +44,7 @@ describe('AuthPage ', () => { it('should display an error when submitting an empty password', async () => { const { getByText, findByText } = render(); - fireEvent.click(getByText('Submit')); + fireEvent.click(getByText('Login')); expect(await findByText('oops, password is required')).toBeInTheDocument(); }); @@ -59,10 +54,8 @@ describe('AuthPage ', () => { return undefined as any; }); - const { getByText, getByLabelText, findByText } = render(); - const input = getByLabelText('Enter your password in the field above'); - fireEvent.change(input, { target: { value: 'test-pw' } }); - fireEvent.click(getByText('Submit')); + const { getByText, findByText } = render(); + fireEvent.click(getByText('Login')); expect(await findByText('oops, that password is incorrect')).toBeInTheDocument(); }); }); diff --git a/app/src/components/auth/AuthPage.tsx b/app/src/components/auth/AuthPage.tsx index f1782b330..20185acb8 100644 --- a/app/src/components/auth/AuthPage.tsx +++ b/app/src/components/auth/AuthPage.tsx @@ -4,7 +4,8 @@ import styled from '@emotion/styled'; import { ReactComponent as LogoImage } from 'assets/images/logo.svg'; import { usePrefixedTranslation } from 'hooks'; import { useStore } from 'store'; -import { Background, Button, HeaderOne, Input } from 'components/base'; +import { Background, HeaderOne, Input } from 'components/base'; +import PurpleButton from 'components/connect/PurpleButton'; const Styled = { Wrapper: styled.div` @@ -16,20 +17,24 @@ const Styled = { height: 100%; `, Logo: styled(LogoImage)` - color: ${props => props.theme.colors.offWhite}; - width: 80px; - height: 156px; - margin-bottom: 30px; + color: ${props => props.theme.colors.white}; + width: 60px; + height: 80px; + margin-bottom: 32px; `, Title: styled(HeaderOne)` - font-size: 75px; - margin-bottom: 30px; + color: ${props => props.theme.colors.white}; + font-size: 48px; + line-height: 48px; + margin-bottom: 0px; text-transform: uppercase; `, Subtitle: styled.div` + color: ${props => props.theme.colors.gray}; width: 100%; - max-width: 500px; - margin-bottom: 80px; + max-width: 400px; + margin-top: 24px; + margin-bottom: 24px; text-align: center; `, Form: styled.form` @@ -37,19 +42,31 @@ const Styled = { flex-direction: column; align-items: center; `, + Input: styled(Input)` + font-size: ${props => props.theme.sizes.l}; + width: 100%; + color: ${props => props.theme.colors.white}; + padding: 8px 0px; + border-width: 0; + border-bottom: 2px solid ${props => props.theme.colors.gray}; + min-width: 360px; + outline: none; + `, Label: styled.label` margin: 10px 0 80px; `, ErrMessage: styled.div` width: 100%; - margin: 0 0 80px; - padding: 5px 0; - background-color: ${props => props.theme.colors.pink}; - color: ${props => props.theme.colors.offWhite}; - text-align: center; + padding: 8px 0; + color: ${props => props.theme.colors.lightningRed}; + text-align: left; `, - Submit: styled(Button)` - background-color: transparent; + PurpleButton: styled(PurpleButton)` + font-size: ${props => props.theme.sizes.s}; + margin-top: 32px; + line-height: 24px; + padding: 12px 24px; + width: 100%; `, }; @@ -77,7 +94,16 @@ const AuthPage: React.FC = () => { // a UI flicker while validating credentials stored in session storage if (!store.initialized) return null; - const { Wrapper, Logo, Title, Subtitle, Form, Label, ErrMessage, Submit } = Styled; + const { + Wrapper, + Logo, + Title, + Subtitle, + Form, + Input, + ErrMessage, + PurpleButton, + } = Styled; return ( @@ -92,13 +118,10 @@ const AuthPage: React.FC = () => { autoFocus value={pass} onChange={handleChange} + placeholder="Password" /> - {error ? ( - {error} - ) : ( - - )} - {l('submitBtn')} + {error && {error}} + {l('loginBtn')} diff --git a/app/src/components/base/shared.tsx b/app/src/components/base/shared.tsx index a7e607b93..3c1b034d7 100644 --- a/app/src/components/base/shared.tsx +++ b/app/src/components/base/shared.tsx @@ -8,8 +8,7 @@ import Chevrons from 'assets/icons/chevrons.svg'; export const Background = styled.div<{ gradient?: boolean }>` height: 100%; color: ${props => props.theme.colors.white}; - background: ${props => - props.gradient ? props.theme.colors.gradient : props.theme.colors.blue}; + background: radial-gradient(#1d273f, #101727); font-family: ${props => props.theme.fonts.open.regular}; font-size: ${props => props.theme.sizes.m}; `; @@ -170,15 +169,20 @@ export const Button = styled.button` `; export const Input = styled.input` - font-family: ${props => props.theme.fonts.work.light}; - font-weight: 300; + font-family: ${props => props.theme.fonts.open.regular}; + font-weight: 500; font-size: ${props => props.theme.sizes.xxl}; color: ${props => props.theme.colors.offWhite}; background-color: transparent; border-width: 0; - border-bottom: 3px solid ${props => props.theme.colors.offWhite}; - padding: 5px; - text-align: center; + border-bottom: 2px solid ${props => props.theme.colors.offWhite}; + padding: 8px; + text-align: left; + transition: all 200ms; + + &:hover { + border-bottom-color: ${props => props.theme.colors.white}; + } &:active, &:focus { @@ -193,13 +197,13 @@ export const Input = styled.input` `; export const TextArea = styled.textarea` - font-family: ${props => props.theme.fonts.work.light}; + font-family: ${props => props.theme.fonts.open.regular}; font-weight: 300; font-size: ${props => props.theme.sizes.m}; color: ${props => props.theme.colors.offWhite}; background-color: ${props => props.theme.colors.overlay}; border-width: 0; - border-bottom: 3px solid ${props => props.theme.colors.offWhite}; + border-bottom: 3px solid ${props => props.theme.colors.gray}; padding: 5px; &:active, diff --git a/app/src/i18n/locales/en-US.json b/app/src/i18n/locales/en-US.json index a6bfb67e1..ab51efca9 100644 --- a/app/src/i18n/locales/en-US.json +++ b/app/src/i18n/locales/en-US.json @@ -26,7 +26,7 @@ "cmps.auth.AuthPage.terminal": "Terminal", "cmps.auth.AuthPage.subtitle": "Efficiently manage Lightning node liquidity", "cmps.auth.AuthPage.passLabel": "Enter your password in the field above", - "cmps.auth.AuthPage.submitBtn": "Submit", + "cmps.auth.AuthPage.loginBtn": "Login", "cmps.common.Tile.maximizeTip": "Maximize", "cmps.common.PageHeader.exportTip": "Download CSV", "cmps.common.PageHeader.helpTip": "Take a Tour",