diff --git a/.gitignore b/.gitignore index 93b034fd6..2cfa84c0e 100644 --- a/.gitignore +++ b/.gitignore @@ -39,7 +39,7 @@ vendor-php .php-cs-fixer.cache suite-logs -# QA activity reports +# QA activity reports tests/qa-activity-report/reports/ # drone CI is in .drone.star, do not let someone accidentally commit a local .drone.yml @@ -60,3 +60,4 @@ go.work go.work.sum .env .envrc +.DS_Store diff --git a/services/idp/Makefile b/services/idp/Makefile index c20ccecc4..e3f4d94dc 100644 --- a/services/idp/Makefile +++ b/services/idp/Makefile @@ -32,7 +32,9 @@ ci-node-generate: assets .PHONY: assets assets: pnpm-build \ assets/identifier/static \ - assets/identifier/static/favicon.ico + assets/identifier/static/favicon.ico \ + assets/identifier/static/icon-lilac.svg + assets/identifier/static: mkdir -p assets/identifier/static @@ -41,6 +43,10 @@ assets/identifier/static: assets/identifier/static/favicon.ico: cp src/images/favicon.ico assets/identifier/static/favicon.ico +.PHONY: assets/identifier/static/icon-lilac.svg +assets/identifier/static/icon-lilac.svg: + cp src/images/icon-lilac.svg assets/identifier/static/icon-lilac.svg + .PHONY: pnpm-build pnpm-build: node_modules #pnpm lint #TODO: activate diff --git a/services/idp/src/App.jsx b/services/idp/src/App.jsx index a4da3a6dd..7aa7a8344 100644 --- a/services/idp/src/App.jsx +++ b/services/idp/src/App.jsx @@ -1,69 +1,75 @@ -import React, { ReactElement, Suspense, lazy, useState, useEffect } from 'react'; +import React, {ReactElement, Suspense, lazy, useState, useEffect} from 'react'; import PropTypes from 'prop-types'; -import { MuiThemeProvider } from '@material-ui/core/styles'; -import { defaultTheme } from 'kpop/es/theme'; +import {MuiThemeProvider} from '@material-ui/core/styles'; +import {defaultTheme} from 'kpop/es/theme'; import 'kpop/static/css/base.css'; import 'kpop/static/css/scrollbar.css'; import Spinner from './components/Spinner'; import * as version from './version'; -import { OpenCloudContext } from './openCloudContext'; +import {OpenCloudContext} from './openCloudContext'; const LazyMain = lazy(() => import(/* webpackChunkName: "identifier-main" */ './Main')); console.info(`Kopano Identifier build version: ${version.build}`); // eslint-disable-line no-console const App = ({ bgImg }): ReactElement => { - const [theme, setTheme] = useState(null); - const [config, setConfig] = useState(null); - const [loading, setLoading] = useState(true); + const [theme, setTheme] = useState(null); + const [config, setConfig] = useState(null); + const [loading, setLoading] = useState(true); - useEffect(() => { - const fetchData = async () => { - try { - const configResponse = await fetch('/config.json'); - const configData = await configResponse.json(); - setConfig(configData); + useEffect(() => { + const fetchData = async () => { + try { + const configResponse = await fetch('/config.json'); + const configData = await configResponse.json(); + setConfig(configData); - const themeResponse = await fetch(configData.theme); - const themeData = await themeResponse.json(); - setTheme(themeData); - } catch (error) { - console.error('Error fetching config/theme data:', error); - } finally { - setLoading(false); - } - }; + const themeResponse = await fetch(configData.theme); + const themeData = await themeResponse.json(); + setTheme(themeData); + } catch (error) { + console.error('Error fetching config/theme data:', error); + } finally { + setLoading(false); + } + }; - fetchData(); - }, []); + fetchData(); + }, []); - if (loading) { - return ; - } + if (loading) { + return ; + } - return ( - -
- - }> - - - -
-
- ); + return ( + +
+ + }> + + + + {!bgImg && + + } +
+
+ ); } App.propTypes = { - bgImg: PropTypes.string + bgImg: PropTypes.string }; export default App; diff --git a/services/idp/src/app.css b/services/idp/src/app.css index 77cced37e..74ba6bd75 100644 --- a/services/idp/src/app.css +++ b/services/idp/src/app.css @@ -1,151 +1,194 @@ /* additional css on top of kpop */ @font-face { - font-family: OpenCloud; - src: url('./fonts/OpenCloud500-Regular.woff2') format('woff2'); - font-weight: normal; - font-style: normal; + font-family: OpenCloud; + src: url('./fonts/OpenCloud500-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; } + @font-face { - font-family: OpenCloud; - src: url('./fonts/OpenCloud750-Bold.woff2') format('woff2'); - font-weight: bold; - font-style: normal; + font-family: OpenCloud; + src: url('./fonts/OpenCloud750-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; } html { - font-feature-settings: "cv11"; + font-feature-settings: "cv11"; + color: #20434f !important; } body { - font-family: OpenCloud, sans-serif; + font-family: OpenCloud, sans-serif; } strong { - font-weight: 600; + font-weight: 600; +} + +.oc-font-weight-light { + font-weight: 300; } .oc-login-bg { - background-image: url(./images/background.png); - background-size: cover; - background-repeat: no-repeat; - background-position: center; - z-index: 0; - display: flex; - width: 100%; + background: #20434F; + display: flex; + width: 100%; +} + +.oc-login-bg-icon { + position: fixed; + right: -3vw; + bottom: -3vh; + height: 50vh; + z-index: 0; +} + +.oc-login-bg-image { + background-size: cover; + background-repeat: no-repeat; + background-position: center; } #loader { - /* NOTE(longsleep): White here needed because of the background image */ - color: white; - text-shadow: #000 0 0 1px; + /* NOTE(longsleep): White here needed because of the background image */ + color: white; + text-shadow: #000 0 0 1px; } .oc-logo { - position: absolute; - top: -130px; - left: 50%; - height: 80px; - transform: translateX(-50%); + height: 80px; + z-index: 0; + margin-bottom: 40px; } .oc-progress { - /* Needs to be important to overwrite material-ui */ - background-color: rgba(78, 133, 200, 0.8) !important; - height: 4px; - width: 100px; + /* Needs to be important to overwrite material-ui */ + background-color: rgba(78, 133, 200, 0.8) !important; + height: 4px; + width: 100px; } .oc-progress > div { - /* Needs to be important to overwrite material-ui */ - background-color: #4a76ac !important; + /* Needs to be important to overwrite material-ui */ + background-color: #4a76ac !important; } .oc-input { - background-color: #fff; - border: 1px solid #fff; - border-radius: 3px; - height: 40px; - width: 300px; - padding: 16px; - box-sizing: border-box; - font-size: 1rem; + border: 1px solid #20434f; + border-radius: 4px; + height: 45px; + width: 100%; + padding: 16px; + box-sizing: border-box; + font-size: 1rem; } .oc-label { - color: #fff; - display: inline-block; - margin-bottom: 5px; + display: block; + margin-bottom: 12px; + font-weight: 700; } .oc-input.error { - outline: none; - border: 1px solid #fe4600; + outline: none; + border: 1px solid #fe4600; } .MuiTypography-colorError { - color: #fe4600 !important; + color: #fe4600 !important; } .oc-input:focus { - outline: none; - border: 1px solid #fff; + outline: 2px solid #e2baff; + border: 1px solid #fff; } .oc-input + .oc-input { - margin-top: 15px; + margin-top: 15px; } .MuiTouchRipple-root { - display: none !important; + display: none !important; +} + +.oc-card { + background: white; + display: inline-flex; + width: 500px; +} + +.oc-card-body { + padding: 40px; + width: 100%; } .oc-button { - /* Needs to be important to overwrite material-ui */ - font-size: 1.0625rem !important; + /* Needs to be important to overwrite material-ui */ + font-size: 1.0625rem !important; + border-radius: 100px !important; + box-shadow: none !important; + font-weight: 700 !important; } .oc-button-primary { - /* Needs to be important to overwrite material-ui */ - width: 100%; - background: #e2baff !important; - border: 1px solid transparent !important; - color: #19353f !important; + /* Needs to be important to overwrite material-ui */ + width: 100%; + background: #e2baff !important; + border-radius: 100px !important; + color: #20434f !important; + box-shadow: none !important; + font-weight: 700 !important; } -.oc-checkbox-dark svg { - /* Needs to be important to overwrite material-ui */ - fill: white !important; +.oc-button-secondary { + /* Needs to be important to overwrite material-ui */ + width: 100%; + border-radius: 100px !important; + background: #F1F3F4 !important; + color: #20434f !important; + box-shadow: none !important; } .oc-footer-message { - color: white; - padding: 10px; - font-size: 0.8rem; + color: white; + padding: 10px; + font-size: 0.8rem; } @media only screen and (max-width: 768px) { - .oc-logo { - height: 60px; - top: -90px; - } + .oc-logo { + height: 60px; + top: -90px; + } + + .oc-login-bg-icon { + display: none; + } + + .oc-card { + min-width: 50vw !important; + } +} + +@media only screen and (max-width: 600px) { + .oc-card { + width: 100vw !important; + } } /* Helpers */ .oc-mt-l { - margin-top: 24px !important; + margin-top: 24px !important; } .oc-mb-m { - margin-bottom: 20px !important; -} - -.oc-light { - color: #fff !important; + margin-bottom: 20px !important; } .oc-login-form div:not(:last-of-type) { - margin-bottom: 15px; + margin-bottom: 20px; } @@ -154,14 +197,14 @@ strong { * Used to hide an element visually, but keeping it accessible for accessibility tools. */ .oc-invisible-sr { - border: 0 !important; - clip: rect(1px, 1px, 1px, 1px) !important; - height: 1px !important; - overflow: hidden !important; - padding: 0 !important; - /* Need to make sure we override any existing styles. */ - position: absolute !important; - top: 0; - white-space: nowrap; - width: 1px !important; + border: 0 !important; + clip: rect(1px, 1px, 1px, 1px) !important; + height: 1px !important; + overflow: hidden !important; + padding: 0 !important; + /* Need to make sure we override any existing styles. */ + position: absolute !important; + top: 0; + white-space: nowrap; + width: 1px !important; } diff --git a/services/idp/src/components/Loading.jsx b/services/idp/src/components/Loading.jsx index 42f024115..cbd5f9bd1 100644 --- a/services/idp/src/components/Loading.jsx +++ b/services/idp/src/components/Loading.jsx @@ -24,7 +24,7 @@ class Loading extends React.PureComponent { ))} {renderIf(error !== null)(() => (
- + {t("konnect.loading.error.headline", "Failed to connect to server")} diff --git a/services/idp/src/components/ResponsiveScreen.jsx b/services/idp/src/components/ResponsiveScreen.jsx index 6be841775..cec79a7a3 100644 --- a/services/idp/src/components/ResponsiveScreen.jsx +++ b/services/idp/src/components/ResponsiveScreen.jsx @@ -15,10 +15,13 @@ const styles = theme => ({ root: { display: 'flex', flex: 1, + zIndex: 999 }, content: { - position: 'relative', - width: '100%' + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center' }, actions: { marginTop: -40, @@ -27,8 +30,6 @@ const styles = theme => ({ paddingRight: theme.spacing(3) }, wrapper: { - width: '100%', - maxWidth: 300, display: 'flex', flex: 1, alignItems: 'center' @@ -59,7 +60,11 @@ const ResponsiveScreen = (props) => {
{logo} - {content} +
+
+ {content} +
+