diff --git a/config.js b/config.js
index 30ef220cc..d772ed8d3 100644
--- a/config.js
+++ b/config.js
@@ -28,6 +28,7 @@ const config = {
OG_IMAGE_URL: process.env.OG_IMAGE_URL,
YRBL_HAPPY_IMG_URL: process.env.YRBL_HAPPY_IMG_URL,
YRBL_SAD_IMG_URL: process.env.YRBL_SAD_IMG_URL,
+ LOGIN_IMG_URL: process.env.LOGIN_IMG_URL,
SITE_CANONICAL_URL: process.env.SITE_CANONICAL_URL,
DEFAULT_LANGUAGE: process.env.DEFAULT_LANGUAGE,
AUTO_FOLLOW_CHANNELS: process.env.AUTO_FOLLOW_CHANNELS,
diff --git a/static/app-strings.json b/static/app-strings.json
index 1091131cf..4bf0f105d 100644
--- a/static/app-strings.json
+++ b/static/app-strings.json
@@ -1910,5 +1910,6 @@
"Now": "Now",
"Set to current date and time": "Set to current date and time",
"Remove custom release date": "Remove custom release date",
+ "%SITE_NAME% login image": "%SITE_NAME% login image",
"--end--": "--end--"
}
diff --git a/ui/component/common/card.jsx b/ui/component/common/card.jsx
index 0185ab0dd..5a1a75186 100644
--- a/ui/component/common/card.jsx
+++ b/ui/component/common/card.jsx
@@ -22,6 +22,7 @@ type Props = {
smallTitle?: boolean,
onClick?: () => void,
children?: Node,
+ secondPane?: Node,
};
export default function Card(props: Props) {
@@ -41,6 +42,7 @@ export default function Card(props: Props) {
nag,
onClick,
children,
+ secondPane,
} = props;
const [expanded, setExpanded] = useState(defaultExpand);
const expandable = defaultExpand !== undefined;
@@ -48,7 +50,9 @@ export default function Card(props: Props) {
return (
{
if (onClick) {
onClick();
@@ -56,69 +60,71 @@ export default function Card(props: Props) {
}
}}
>
- {(title || subtitle) && (
-
+
+ {(title || subtitle) && (
- {icon &&
}
-
- {isPageTitle &&
{title}
}
- {!isPageTitle && (
-
{title}
- )}
- {subtitle &&
{subtitle}
}
-
-
-
- {titleActions && (
-
- {titleActions}
-
- )}
- {expandable && (
-
-
- )}
-
-
- )}
- {(!expandable || (expandable && expanded)) && (
- <>
- {body && (
- {body}
+ {icon &&
}
+
+ {isPageTitle &&
{title}
}
+ {!isPageTitle && (
+
{title}
+ )}
+ {subtitle &&
{subtitle}
}
+
- )}
- {actions &&
{actions}
}
- {children &&
{children}
}
- >
- )}
-
- {nag}
+
+ {titleActions && (
+
+ {titleActions}
+
+ )}
+ {expandable && (
+
+
+ )}
+
+
+ )}
+ {(!expandable || (expandable && expanded)) && (
+ <>
+ {body && (
+
+ {body}
+
+ )}
+ {actions && {actions}
}
+ {children && {children}
}
+ >
+ )}
+ {nag}
+
+ {secondPane && {secondPane}
}
);
}
diff --git a/ui/component/loginGraphic/index.jsx b/ui/component/loginGraphic/index.jsx
new file mode 100644
index 000000000..7b5f888da
--- /dev/null
+++ b/ui/component/loginGraphic/index.jsx
@@ -0,0 +1,16 @@
+// @flow
+import React from 'react';
+import { SITE_NAME, LOGIN_IMG_URL } from 'config';
+
+function LoginGraphic(props: any) {
+ const [error, setError] = React.useState(false);
+ const src = LOGIN_IMG_URL;
+
+ return error || !src ? null : (
+
+

setError(true)} />
+
+ );
+}
+
+export default LoginGraphic;
diff --git a/ui/component/userEmailNew/view.jsx b/ui/component/userEmailNew/view.jsx
index 916f89723..e225c0ee4 100644
--- a/ui/component/userEmailNew/view.jsx
+++ b/ui/component/userEmailNew/view.jsx
@@ -1,6 +1,6 @@
// @flow
import * as PAGES from 'constants/pages';
-import { SITE_NAME, DOMAIN } from 'config';
+import { SITE_NAME, DOMAIN, SIMPLE_SITE } from 'config';
import React, { useState } from 'react';
import { FormField, Form } from 'component/common/form';
import Button from 'component/button';
@@ -14,6 +14,7 @@ import Nag from 'component/common/nag';
import classnames from 'classnames';
import OdyseeLogoWithWhiteText from 'component/header/odysee_white.png';
import OdyseeLogoWithText from 'component/header/odysee.png';
+import LoginGraphic from 'component/loginGraphic';
type Props = {
errorMessage: ?string,
@@ -96,7 +97,11 @@ function UserEmailNew(props: Props) {
}, [emailExists]);
return (
-
+
{errorMessage}} />}
>
}
+ secondPane={SIMPLE_SITE && }
/>
{IS_WEB && DOMAIN === 'lbry.tv' && (
diff --git a/ui/component/userEmailReturning/view.jsx b/ui/component/userEmailReturning/view.jsx
index 07ad69efd..06c651217 100644
--- a/ui/component/userEmailReturning/view.jsx
+++ b/ui/component/userEmailReturning/view.jsx
@@ -1,5 +1,5 @@
// @flow
-import { SITE_NAME } from 'config';
+import { SITE_NAME, SIMPLE_SITE } from 'config';
import * as PAGES from 'constants/pages';
import React, { useState } from 'react';
import { FormField, Form } from 'component/common/form';
@@ -9,6 +9,8 @@ import { useHistory } from 'react-router-dom';
import UserEmailVerify from 'component/userEmailVerify';
import Card from 'component/common/card';
import Nag from 'component/common/nag';
+import classnames from 'classnames';
+import LoginGraphic from 'component/loginGraphic';
type Props = {
user: ?User,
@@ -69,7 +71,11 @@ function UserEmailReturning(props: Props) {
}
return (
-
+
{showEmailVerification ? (
) : (
@@ -136,6 +142,7 @@ function UserEmailReturning(props: Props) {
)}
>
}
+ secondPane={SIMPLE_SITE && }
/>
)}
diff --git a/ui/scss/component/_card.scss b/ui/scss/component/_card.scss
index 5924dd989..c84a37cb9 100644
--- a/ui/scss/component/_card.scss
+++ b/ui/scss/component/_card.scss
@@ -356,3 +356,25 @@
justify-content: space-between;
align-items: center;
}
+
+.card__multi-pane {
+ display: flex;
+
+ @media (max-width: $breakpoint-small) {
+ flex-direction: column;
+ }
+
+ .card__main-actions {
+ height: unset;
+ }
+
+ .card__second-pane {
+ border-left: 1px solid var(--color-border);
+ max-width: 50%;
+
+ @media (max-width: $breakpoint-small) {
+ border-top: 1px solid var(--color-border);
+ max-width: 100%;
+ }
+ }
+}
diff --git a/ui/scss/component/_main.scss b/ui/scss/component/_main.scss
index 23507aded..af73b85ff 100644
--- a/ui/scss/component/_main.scss
+++ b/ui/scss/component/_main.scss
@@ -332,6 +332,33 @@
margin-right: auto;
}
+.main__sign-up--graphic {
+ max-width: 47rem;
+
+ .card__second-pane {
+ border: none;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: var(--color-login-graphic-background);
+
+ .signup-image {
+ @media (max-width: $breakpoint-small) {
+ width: 50%;
+ }
+ }
+ }
+
+ .card__title {
+ font-size: var(--font-heading);
+ font-weight: var(--font-weight-bold);
+ }
+
+ .card__main-actions {
+ border: none;
+ }
+}
+
.main__channel-creation {
margin-left: auto;
margin-right: auto;
diff --git a/ui/scss/init/_base-theme.scss b/ui/scss/init/_base-theme.scss
index 36fa7ccc3..65363e5c1 100644
--- a/ui/scss/init/_base-theme.scss
+++ b/ui/scss/init/_base-theme.scss
@@ -188,6 +188,7 @@
--color-tabs-background: var(--color-card-background);
--color-tab-divider: var(--color-primary);
--color-modal-background: var(--color-card-background);
+ --color-login-graphic-background: var(--color-primary-alt);
// Ads
--color-ads-background: #fae5ff;
diff --git a/ui/scss/themes/dark.scss b/ui/scss/themes/dark.scss
index 8914cf47a..145815a47 100644
--- a/ui/scss/themes/dark.scss
+++ b/ui/scss/themes/dark.scss
@@ -131,6 +131,7 @@
--color-placeholder-background: #4e5862;
--color-spinner-light: #5a6570;
--color-spinner-dark: #212529;
+ --color-login-graphic-background: var(--color-background);
// Editor
--color-editor-cursor: var(--color-text);