Merge branch 'main' into hn.emoji-picker

This commit is contained in:
Hristo Nedelkov 2023-08-22 12:12:15 +03:00
commit 1c0122effb
14 changed files with 137 additions and 81 deletions

View File

@ -8,8 +8,10 @@ const BreadcrumbBar = ({ breadcrumbList }: BreadcrumbBarProps) => {
return ( return (
<nav className="breadcrumb-bar-nav"> <nav className="breadcrumb-bar-nav">
<ul className="breadcrumb-bar-ul"> <ul className="breadcrumb-bar-ul">
{breadcrumbList.map(item => ( {breadcrumbList.map((item, index) => (
<li className="breadcrumb-bar-li">{item}</li> <li className="breadcrumb-bar-li" key={index}>
{item}
</li>
))} ))}
</ul> </ul>
</nav> </nav>

View File

@ -0,0 +1,18 @@
import { XStack } from 'tamagui'
import NimbusLogo from '../Logos/NimbusLogo'
import TagContainer from './TagContainer'
type HeaderProps = {
selectedTag: 'pair' | 'create' | 'connect'
}
const Header = ({ selectedTag }: HeaderProps) => {
return (
<XStack justifyContent="space-between" py={'25px'} mt={'70px'}>
<NimbusLogo />
<TagContainer selectedTag={selectedTag} />
</XStack>
)
}
export default Header

View File

@ -10,7 +10,7 @@
margin: 0 auto; margin: 0 auto;
padding: 12px 1rem; padding: 12px 1rem;
position: relative; position: relative;
top: -120px; top: -18vh;
} }
.quick-start-bar > div { .quick-start-bar > div {
width: 100%; width: 100%;

View File

@ -1,4 +1,3 @@
/* .tag-container div:nth-child(1) {
.tag-container div:nth-child(1) {
background:transparent; background:transparent;
} } */

View File

@ -1,13 +1,20 @@
import { Tag } from '@status-im/components' import { Tag } from '@status-im/components'
import { XStack } from 'tamagui' import { XStack } from 'tamagui'
import './TagContainer.css' import './TagContainer.css'
import { AddSmallIcon, SwapIcon } from '@status-im/icons' import { ConnectionIcon, AddSmallIcon, SwapIcon } from '@status-im/icons'
const TagContainer = () => { type TagContainerProps = {
selectedTag: 'pair' | 'create' | 'connect'
}
const TagContainer = ({ selectedTag }: TagContainerProps) => {
return ( return (
<XStack space={'$2'} alignItems="center" className="tag-container"> <XStack space={'$2'} alignItems="center" className="tag-container">
<Tag icon={SwapIcon} label="Pair" size={32} /> {selectedTag === 'connect' ? (
<Tag selected icon={AddSmallIcon} label="Create" size={32} /> <Tag selected={selectedTag === 'connect'} icon={ConnectionIcon} label="Connect" size={32} />
) : null}
<Tag selected={selectedTag === 'pair'} icon={SwapIcon} label="Pair" size={32} />
<Tag selected={selectedTag === 'create'} icon={AddSmallIcon} label="Create" size={32} />
</XStack> </XStack>
) )
} }

View File

@ -1,5 +1,10 @@
.nimbus-logomark{ .nimbus-logomark{
width: auto; display: flex;
height: 30%; justify-content: center;
align-items: center;
}
.nimbus-logomark svg {
width: auto;
height: 24px;
} }

View File

@ -1,6 +1,7 @@
import { XStack } from 'tamagui' import { XStack } from 'tamagui'
import BetaTag from './BetaTag' import BetaTag from './BetaTag'
import './NimbusLogo.css' import './NimbusLogo.css'
import NimbusLogoMark from './NimbusLogoMark'
const NimbusLogo = () => { const NimbusLogo = () => {
return ( return (
@ -11,7 +12,7 @@ const NimbusLogo = () => {
}} }}
space={'$3'} space={'$3'}
> >
<img src={'./icons/marks.svg'} alt="marks" className="nimbus-logomark" /> <NimbusLogoMark />
<img src={'./icons/nimbus.svg'} alt="marks" /> <img src={'./icons/nimbus.svg'} alt="marks" />
<BetaTag /> <BetaTag />
</XStack> </XStack>

View File

@ -0,0 +1,20 @@
const NimbusLogoMark = () => {
return (
<div className="nimbus-logomark">
<svg
xmlns="http://www.w3.org/2000/svg"
width="147"
height="73"
viewBox="0 0 147 73"
fill="none"
>
<path
d="M110.25 36.5002V73C90.0427 73 79.625 71.1754 67.375 54.7503C55.125 38.3252 47.2108 36.4998 36.75 36.4998V73H0V36.4998H36.75V1.4385e-08C55.6049 -2.9897e-08 67.375 2.43335 79.625 18.2501C91.875 34.0669 98.3343 36.5002 110.25 36.5002V0H147V36.5002H110.25Z"
fill="currentColor"
/>
</svg>
</div>
)
}
export default NimbusLogoMark

View File

@ -1,13 +1,20 @@
import { ReactNode } from 'react' import { ReactNode } from 'react'
import './layout.css' import './layout.css'
import NimbusLogoMark from '../Logos/NimbusLogoMark'
type PageWrapperShadowProps = { type PageWrapperShadowProps = {
breadcrumbBar?: ReactNode breadcrumbBar?: ReactNode
rightImageSrc?: string rightImageSrc?: string
rightImageLogo?: boolean
children: ReactNode children: ReactNode
} }
const PageWrapperShadow = ({ breadcrumbBar, rightImageSrc, children }: PageWrapperShadowProps) => { const PageWrapperShadow = ({
breadcrumbBar,
rightImageSrc,
rightImageLogo,
children,
}: PageWrapperShadowProps) => {
return ( return (
<div className="layout"> <div className="layout">
<section className="layout-left"> <section className="layout-left">
@ -18,7 +25,8 @@ const PageWrapperShadow = ({ breadcrumbBar, rightImageSrc, children }: PageWrapp
</section> </section>
<section className="layout-right"> <section className="layout-right">
<div className="image-container"> <div className="image-container">
<img src={rightImageSrc} alt="background" /> <img src={rightImageSrc} alt="background" className="background-img" />
{rightImageLogo ? <NimbusLogoMark /> : null}
</div> </div>
</section> </section>
</div> </div>

View File

@ -26,7 +26,7 @@
flex-wrap: wrap; flex-wrap: wrap;
justify-content: end; justify-content: end;
height: 100%; height: 100%;
padding: 70px 0 0; /* padding: 70px 0 0; */
} }
.container-inner { .container-inner {
max-width: 70%; max-width: 70%;
@ -49,6 +49,7 @@
height: 100%; height: 100%;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
color: #FFF;
} }
.image-container::before { .image-container::before {
display: block; display: block;
@ -65,7 +66,7 @@
height: 100%; height: 100%;
background: linear-gradient(to right, rgba(255, 255, 255, 1) 20%, rgba(255, 255, 255, 0.0)); background: linear-gradient(to right, rgba(255, 255, 255, 1) 20%, rgba(255, 255, 255, 0.0));
} }
.image-container img { .image-container .background-img {
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 50%; left: 50%;
@ -73,3 +74,12 @@
height: 140%; height: 140%;
width: auto; width: auto;
} }
.image-container .nimbus-logomark {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.image-container .nimbus-logomark svg {
height: 73px;
}

View File

@ -1,12 +1,12 @@
import { useState } from 'react' import { useState } from 'react'
import BreadcrumbBar from '../../components/General/BreadcrumbBar/BreadcrumbBar' import BreadcrumbBar from '../../components/General/BreadcrumbBar/BreadcrumbBar'
import { Button as StatusButton, Tag, Text, Avatar, Checkbox } from '@status-im/components' import { Button as StatusButton, Text, Avatar, Checkbox } from '@status-im/components'
import { Label, Separator, XStack, YStack } from 'tamagui' import { Label, Separator, XStack, YStack } from 'tamagui'
import PageWrapperShadow from '../../components/PageWrappers/PageWrapperShadow' import PageWrapperShadow from '../../components/PageWrappers/PageWrapperShadow'
import NimbusLogo from '../../components/Logos/NimbusLogo'
import Titles from '../../components/General/Titles' import Titles from '../../components/General/Titles'
import LabelInputField from '../../components/General/LabelInputField' import LabelInputField from '../../components/General/LabelInputField'
import { AddSmallIcon, ConnectionIcon, NodeIcon, SwapIcon } from '@status-im/icons' import Header from '../../components/General/Header'
import { NodeIcon } from '@status-im/icons'
const ConnectDevicePage = () => { const ConnectDevicePage = () => {
const [autoConnectChecked, setAutoConnectChecked] = useState(false) const [autoConnectChecked, setAutoConnectChecked] = useState(false)
@ -16,24 +16,17 @@ const ConnectDevicePage = () => {
<PageWrapperShadow <PageWrapperShadow
breadcrumbBar={<BreadcrumbBar breadcrumbList={['Nodes', 'Nimbus', 'Connect Device']} />} breadcrumbBar={<BreadcrumbBar breadcrumbList={['Nodes', 'Nimbus', 'Connect Device']} />}
rightImageSrc="./background-images/day-night-bg.png" rightImageSrc="./background-images/day-night-bg.png"
rightImageLogo={true}
> >
<div className="connection-page"> <YStack space={'$3'}>
<XStack justifyContent={'space-between'}> <Header selectedTag="connect" />
<NimbusLogo />
<XStack space={'$2'} alignItems="center">
<Tag icon={ConnectionIcon} label="Connect" size={32} selected />
<Tag icon={SwapIcon} label="Pair" size={32} />
<Tag icon={AddSmallIcon} label="Create" size={32} />
</XStack>
</XStack>
<article className="content"> <article className="content">
<section className="mb-1"> <Titles
<Titles title="Connect Device"
title="Connect Device" subtitle="Configure your device to connect to the Nimbus Node Manager"
subtitle="Configure your device to connect to the Nimbus Node Manager" />
/> <YStack my={16}>
</section>
<section className="mb-1">
<XStack <XStack
width={'100%'} width={'100%'}
alignItems="center" alignItems="center"
@ -65,8 +58,8 @@ const ConnectDevicePage = () => {
<XStack width={'100%'} alignItems="center"> <XStack width={'100%'} alignItems="center">
<LabelInputField labelText="API Token" placeholderText="****_*****_*****" /> <LabelInputField labelText="API Token" placeholderText="****_*****_*****" />
</XStack> </XStack>
</section> </YStack>
<section className="mb-1"> <YStack my={16}>
<YStack> <YStack>
<Text size={13} weight="regular" color={'#647084'}> <Text size={13} weight="regular" color={'#647084'}>
Device Avatar Device Avatar
@ -79,9 +72,9 @@ const ConnectDevicePage = () => {
<LabelInputField labelText="Device Color" placeholderText="#011892" /> <LabelInputField labelText="Device Color" placeholderText="#011892" />
</XStack> </XStack>
</YStack> </YStack>
</section> </YStack>
<Separator alignSelf="stretch" borderColor={'#F0F2F5'} /> <Separator alignSelf="stretch" borderColor={'#F0F2F5'} />
<section className="my-1"> <YStack my={16}>
<YStack> <YStack>
<Text size={19} weight="semibold"> <Text size={19} weight="semibold">
Settings Settings
@ -101,10 +94,10 @@ const ConnectDevicePage = () => {
</Label> </Label>
</XStack> </XStack>
<Separator alignSelf="stretch" borderColor={'#F0F2F5'} /> <Separator alignSelf="stretch" borderColor={'#F0F2F5'} />
</section> </YStack>
<StatusButton icon={<NodeIcon size={20} />}>Connect Device</StatusButton> <StatusButton icon={<NodeIcon size={20} />}>Connect Device</StatusButton>
</article> </article>
</div> </YStack>
</PageWrapperShadow> </PageWrapperShadow>
) )
} }

View File

@ -1,24 +1,20 @@
import { useState } from 'react' import { useState } from 'react'
import { Button as StatusButton, Text, Avatar, Checkbox } from '@status-im/components' import { Button as StatusButton, Text, Avatar, Checkbox } from '@status-im/components'
import { NodeIcon, ReactionIcon } from '@status-im/icons'
import { Label, Separator, XStack, YStack } from 'tamagui' import { Label, Separator, XStack, YStack } from 'tamagui'
import PageWrapperShadow from '../../components/PageWrappers/PageWrapperShadow' import PageWrapperShadow from '../../components/PageWrappers/PageWrapperShadow'
import NimbusLogo from '../../components/Logos/NimbusLogo' import Header from '../../components/General/Header'
import TagContainer from '../../components/General/TagContainer'
import Titles from '../../components/General/Titles' import Titles from '../../components/General/Titles'
import LabelInputField from '../../components/General/LabelInputField' import LabelInputField from '../../components/General/LabelInputField'
import ColorPicker from '../../components/General/ColorPicker' import ColorPicker from '../../components/General/ColorPicker'
import { NodeIcon, ReactionIcon } from '@status-im/icons'
const CreateLocalNodePage = () => { const CreateLocalNodePage = () => {
const [autoConnectChecked, setAutoConnectChecked] = useState(false) const [autoConnectChecked, setAutoConnectChecked] = useState(false)
return ( return (
<PageWrapperShadow rightImageSrc="./background-images/day-night-bg.png"> <PageWrapperShadow rightImageSrc="./background-images/day-night-bg.png" rightImageLogo={true}>
<div className="connection-page"> <YStack space={'$3'}>
<XStack justifyContent={'space-between'}> <Header selectedTag="create" />
<NimbusLogo />
<TagContainer />
</XStack>
<article className="content"> <article className="content">
<Titles <Titles
title="Create Local Node" title="Create Local Node"
@ -35,7 +31,7 @@ const CreateLocalNodePage = () => {
</Text> </Text>
<XStack my={10}> <XStack my={10}>
<Avatar type="account" size={80} name="Device Avatar" /> <Avatar type="account" size={80} name="Device Avatar" />
<ReactionIcon size={20} /> <Avatar type="icon" size={32} icon={<ReactionIcon size={20} />} />
</XStack> </XStack>
</YStack> </YStack>
<YStack> <YStack>
@ -65,9 +61,9 @@ const CreateLocalNodePage = () => {
</XStack> </XStack>
<Separator alignSelf="stretch" borderColor={'#F0F2F5'} /> <Separator alignSelf="stretch" borderColor={'#F0F2F5'} />
</YStack> </YStack>
<StatusButton icon={<NodeIcon size={16} />}>Continue</StatusButton> <StatusButton icon={<NodeIcon size={20} />}>Continue</StatusButton>
</article> </article>
</div> </YStack>
</PageWrapperShadow> </PageWrapperShadow>
) )
} }

View File

@ -1,32 +1,35 @@
import PageWrapperShadow from '../../components/PageWrappers/PageWrapperShadow'
import './LandingPage.css' import './LandingPage.css'
import QuickStartBar from '../../components/General/QuickStartBar/QuickStartBar'
import Titles from '../../components/General/Titles'
import { Button as StatusButton } from '@status-im/components'
import NimbusLogo from '../../components/Logos/NimbusLogo'
import { XStack, YStack } from 'tamagui' import { XStack, YStack } from 'tamagui'
import PageWrapperShadow from '../../components/PageWrappers/PageWrapperShadow'
import Title from '../../components/General/Title'
import NimbusLogo from '../../components/Logos/NimbusLogo'
import { NodeIcon } from '@status-im/icons' import { NodeIcon } from '@status-im/icons'
import EmojiPickerDialog from '../../components/General/EmojiPickerDialog' import EmojiPickerDialog from '../../components/General/EmojiPickerDialog'
import { Button as StatusButton, Text } from '@status-im/components'
import QuickStartBar from '../../components/General/QuickStartBar/QuickStartBar'
function LandingPage() { function LandingPage() {
return ( return (
<> <>
<PageWrapperShadow rightImageSrc="./background-images/landing-page-bg.png"> <PageWrapperShadow rightImageSrc="./background-images/landing-page-bg.png">
<div className="landing-page"> <YStack className="landing-page">
<XStack> <XStack pt={'70px'}>
<NimbusLogo /> <NimbusLogo />
</XStack> </XStack>
<YStack>
<Titles <YStack style={{ width: '100%', margin: '30vh 0 4vh' }}>
title="Light and performant clients, for all Ethereum validators." <Title>Light and performant clients, for all Ethereum validators.</Title>
subtitle="Nimbus Nodes allows you to take control and ownership of the services you wish to run in a completely trustless and decentralized manner." <Text size={15} weight="regular">
/> <strong>Nimbus Nodes</strong> allows you to take control and ownership of the services
<XStack> you wish to run in a completely trustless and decentralized manner.
<StatusButton icon={<NodeIcon size={20} />}>Get Started</StatusButton> </Text>
</XStack>
</YStack> </YStack>
<EmojiPickerDialog emojiStyle={'FACEBOOK'} />
</div> <XStack>
<StatusButton icon={<NodeIcon size={20} />}>Get Started</StatusButton>
</XStack>
</YStack>
<EmojiPickerDialog emojiStyle='TWITTER'/>
</PageWrapperShadow> </PageWrapperShadow>
<QuickStartBar /> <QuickStartBar />
</> </>

View File

@ -1,15 +1,15 @@
import { Separator, XStack, YStack } from 'tamagui' import { Separator, XStack, YStack } from 'tamagui'
import { useState } from 'react' import { useState } from 'react'
import { Button, Checkbox, Tag, Text } from '@status-im/components' import { Button, Checkbox, Text } from '@status-im/components'
import PageWrapperShadow from '../../components/PageWrappers/PageWrapperShadow' import PageWrapperShadow from '../../components/PageWrappers/PageWrapperShadow'
import SyncStatus from './SyncStatus' import SyncStatus from './SyncStatus'
import NimbusLogo from '../../components/Logos/NimbusLogo'
import Titles from '../../components/General/Titles' import Titles from '../../components/General/Titles'
import PairedSuccessfully from './PairedSuccessfully' import PairedSuccessfully from './PairedSuccessfully'
import CreateAvatar from './CreateAvatar' import CreateAvatar from './CreateAvatar'
import GenerateId from './GenerateId' import GenerateId from './GenerateId'
import { AddSmallIcon, NodeIcon, SwapIcon } from '@status-im/icons' import { NodeIcon } from '@status-im/icons'
import Header from '../../components/General/Header'
const PairDevice = () => { const PairDevice = () => {
const [autoChecked, setAutoChecked] = useState(false) const [autoChecked, setAutoChecked] = useState(false)
@ -22,20 +22,14 @@ const PairDevice = () => {
} }
return ( return (
<PageWrapperShadow rightImageSrc="./background-images/day-night-bg.png"> <PageWrapperShadow rightImageSrc="./background-images/day-night-bg.png" rightImageLogo={true}>
<YStack <YStack
space={'$3'} space={'$3'}
style={{ style={{
maxWidth: '100%', maxWidth: '100%',
}} }}
> >
<XStack style={{ justifyContent: 'space-between' }}> <Header selectedTag="pair" />
<NimbusLogo />
<XStack space={'$2'} style={{ alignItems: 'center' }}>
<Tag icon={SwapIcon} label="Pair" size={32} selected />
<Tag icon={AddSmallIcon} label="Create" size={32} />
</XStack>
</XStack>
<Titles title="Pair Device" subtitle="Pair your device to the Nimbus Node Manager" /> <Titles title="Pair Device" subtitle="Pair your device to the Nimbus Node Manager" />
{isPaired ? <PairedSuccessfully /> : <GenerateId isAwaitingPairing={isAwaitingPairing} />} {isPaired ? <PairedSuccessfully /> : <GenerateId isAwaitingPairing={isAwaitingPairing} />}
{!isPaired && ( {!isPaired && (