diff --git a/images/hero.png b/images/hero.png new file mode 100644 index 000000000..e9f64ee06 Binary files /dev/null and b/images/hero.png differ diff --git a/stylesheets/_session_signin.scss b/stylesheets/_session_signin.scss index 1bd52447a..8bc530c4f 100644 --- a/stylesheets/_session_signin.scss +++ b/stylesheets/_session_signin.scss @@ -1,57 +1,5 @@ .session { - &-fullscreen { - width: 100%; - height: 100%; - background-color: var(--background-primary-color); - color: var(--text-primary-color); - } - &-content { - &-accent { - &-text { - font-family: var(--font-accent), var(--font-default); - text-align: center; - .title { - font-size: 90px; - font-weight: 700; - line-height: 100px; - } - } - } - - &-registration { - padding-inline-end: 128px; - } - - &-header { - display: flex; - flex-direction: row; - width: 100%; - justify-content: space-between; - padding: 17px 20px; - } - - &-body { - display: flex; - flex-direction: row; - flex: 1; - align-items: center; - width: 100%; - padding-bottom: 20px; - } - } - &-registration { - &-container { - display: flex; - flex-direction: column; - width: 289px; - - .session-button { - width: 80%; - margin: auto; - } - } - &__content { width: 100%; padding-top: 20px; diff --git a/ts/components/registration/RegistrationStages.tsx b/ts/components/registration/RegistrationStages.tsx index 6da3476b2..01fc8caeb 100644 --- a/ts/components/registration/RegistrationStages.tsx +++ b/ts/components/registration/RegistrationStages.tsx @@ -1,5 +1,6 @@ import { createContext, useEffect, useMemo, useState } from 'react'; import { Provider } from 'react-redux'; +import styled from 'styled-components'; import { Data } from '../../data/data'; import { SettingsKey } from '../../data/settings-key'; import { getSwarmPollingInstance } from '../../session/apis/snode_api'; @@ -17,10 +18,20 @@ import { signInByLinkingDevice, } from '../../util/accountManager'; import { Storage, setSignInByLinking, setSignWithRecoveryPhrase } from '../../util/storage'; +import { Flex } from '../basic/Flex'; import { ModalContainer } from './ModalContainer'; import { SignInMode, SignInTab } from './SignInTab'; import { SignUpMode, SignUpTab } from './SignUpTab'; +const StyledRegistrationContainer = styled(Flex)` + width: 289px; + + .session-button { + width: 80%; + margin: auto; + } +`; + export async function resetRegistration() { await Data.removeAll(); Storage.reset(); @@ -240,14 +251,14 @@ export const RegistrationStages = () => { return ( -
+ {(registrationPhase === RegistrationPhase.Start || registrationPhase === RegistrationPhase.SignUp) && } {(registrationPhase === RegistrationPhase.Start || registrationPhase === RegistrationPhase.SignIn) && } -
+
); }; diff --git a/ts/components/registration/SessionRegistrationView.tsx b/ts/components/registration/SessionRegistrationView.tsx index d26ca4dda..99c9a1f60 100644 --- a/ts/components/registration/SessionRegistrationView.tsx +++ b/ts/components/registration/SessionRegistrationView.tsx @@ -1,4 +1,5 @@ import { useEffect } from 'react'; +import styled from 'styled-components'; import { AccentText } from './AccentText'; import { SessionTheme } from '../../themes/SessionTheme'; @@ -7,32 +8,77 @@ import { SessionToastContainer } from '../SessionToastContainer'; import { Flex } from '../basic/Flex'; import { SessionIcon } from '../icon'; import { RegistrationStages } from './RegistrationStages'; +import { Hero } from './components'; + +const StyledFullscreenContainer = styled(Flex)` + position: relative; + width: 100%; + height: 100%; + background-color: var(--background-primary-color); + color: var(--text-primary-color); +`; + +const StyledSessionContent = styled(Flex)` + z-index: 1; + &-accent { + &-text { + font-family: var(--font-accent), var(--font-default); + text-align: center; + .title { + font-size: 90px; + font-weight: 700; + line-height: 100px; + } + } + } + + &-registration { + padding-inline-end: 128px; + } + + &-header { + display: flex; + flex-direction: row; + width: 100%; + justify-content: space-between; + padding: 17px 20px; + } + + &-body { + display: flex; + flex-direction: row; + flex: 1; + align-items: center; + width: 100%; + padding-bottom: 20px; + } +`; export const SessionRegistrationView = () => { useEffect(() => { void setSignInByLinking(false); }, []); + return ( -
-
- - - - - - - - + + + + + + + + + -
-
+ +
); }; diff --git a/ts/components/registration/components/Hero.tsx b/ts/components/registration/components/Hero.tsx new file mode 100644 index 000000000..eef43b804 --- /dev/null +++ b/ts/components/registration/components/Hero.tsx @@ -0,0 +1,75 @@ +import { useEffect, useState } from 'react'; +import { useWindowSize } from 'react-use'; +import styled from 'styled-components'; + +type PositionWithinContainer = 'left' | 'right'; + +const StyledHeroContainer = styled.div<{ positionWithinContainer: PositionWithinContainer }>` + position: relative; + width: 40%; + height: 100%; + overflow: hidden; + z-index: 0; + + // TODO[epic=ses-50] remove this when we have the new mockup with narrower shadows if needed + &:after { + content: ''; + position: absolute; + top: 0; + right: ${props => (props.positionWithinContainer === 'right' ? '0' : '290px')}; + width: 20px; + height: 100%; + background-image: linear-gradient(to right, rgba(27, 27, 27, 0), rgba(27, 27, 27, 1)); + } +`; + +const StyledHero = styled.img<{ + scaleFactor: number; + positionWithinContainer: PositionWithinContainer; +}>` + width: auto; + ${props => props.scaleFactor && `height: calc(3701px / ${props.scaleFactor});`} + position: absolute; + top: 50%; + ${props => (props.positionWithinContainer === 'right' ? 'right: 0;' : 'left: 0;')} + transform: translateY(-50%); +`; + +export const Hero = () => { + const [scaleFactor, setScaleFactor] = useState(2.1); // default width 1024px + const [positionWithinContainer, setPositionWithinContainer] = useState( + 'left' + ); + + const { width } = useWindowSize(); + + useEffect(() => { + if (width) { + if (width <= 1024) { + setPositionWithinContainer('right'); + setScaleFactor(2.1); + } else if (width <= 1920) { + setPositionWithinContainer('right'); + setScaleFactor(2.0); + } else if (width <= 2560) { + setPositionWithinContainer('right'); + setScaleFactor(1.5); + } else if (width <= 3440) { + setPositionWithinContainer('left'); + setScaleFactor(1.5); + } else { + setPositionWithinContainer('left'); + setScaleFactor(1.5); + } + } + }, [width]); + return ( + + + + ); +}; diff --git a/ts/components/registration/components/index.tsx b/ts/components/registration/components/index.tsx new file mode 100644 index 000000000..9617fc2d0 --- /dev/null +++ b/ts/components/registration/components/index.tsx @@ -0,0 +1,3 @@ +import { Hero } from './Hero'; + +export { Hero };