diff --git a/inertia/components/dashboard/collection/collection_container.tsx b/inertia/components/dashboard/collection/collection_container.tsx index c7dce39..48e7e7d 100644 --- a/inertia/components/dashboard/collection/collection_container.tsx +++ b/inertia/components/dashboard/collection/collection_container.tsx @@ -33,7 +33,7 @@ export default function CollectionContainer({ - + ); } diff --git a/inertia/components/footer/footer.tsx b/inertia/components/footer/footer.tsx index 3a07e71..9c2bc4c 100644 --- a/inertia/components/footer/footer.tsx +++ b/inertia/components/footer/footer.tsx @@ -1,26 +1,26 @@ import PATHS from '#constants/paths'; import styled from '@emotion/styled'; import { Link } from '@inertiajs/react'; +import { route } from '@izzyjs/route/client'; import { useTranslation } from 'react-i18next'; import ExternalLink from '~/components/common/external_link'; import packageJson from '../../../package.json'; -import { route } from '@izzyjs/route/client'; const FooterStyle = styled.footer(({ theme }) => ({ fontSize: '0.9em', color: theme.colors.grey, textAlign: 'center', - paddingTop: '0.75em', + paddingBlock: '0.75em', '& a:hover': { textDecoration: 'underline', }, })); -export default function Footer() { +export default function Footer({ className }: { className?: string }) { const { t } = useTranslation('common'); return ( - + {t('privacy')} {' • '} diff --git a/inertia/components/home/about/about_item.tsx b/inertia/components/home/about/about_item.tsx new file mode 100644 index 0000000..238c8d2 --- /dev/null +++ b/inertia/components/home/about/about_item.tsx @@ -0,0 +1,43 @@ +import styled from '@emotion/styled'; +import { IconType } from 'react-icons/lib'; + +const AboutItemStyle = styled.li(({ theme }) => ({ + width: '350px', + display: 'flex', + gap: '1em', + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'column', + + '& svg': { + color: theme.colors.blue, + }, + + '& div': { + fontSize: '1.25rem', + fontWeight: '500', + }, + + '& p': { + height: '65px', + color: theme.colors.grey, + }, +})); + +const AboutItem = ({ + title, + text, + icon: Icon, +}: { + title: string; + text: string; + icon: IconType; +}) => ( + + + {title} + {text} + +); + +export default AboutItem; diff --git a/inertia/components/home/about/about_list.tsx b/inertia/components/home/about/about_list.tsx new file mode 100644 index 0000000..bfe2b42 --- /dev/null +++ b/inertia/components/home/about/about_list.tsx @@ -0,0 +1,13 @@ +import styled from '@emotion/styled'; +import UnstyledList from '~/components/common/unstyled/unstyled_list'; + +const AboutList = styled(UnstyledList)({ + margin: '4em 0 !important', + display: 'flex', + gap: '2em', + alignItems: 'center', + justifyContent: 'center', + flexWrap: 'wrap', +}); + +export default AboutList; diff --git a/inertia/components/home/hero_header.tsx b/inertia/components/home/hero_header.tsx new file mode 100644 index 0000000..a5ec862 --- /dev/null +++ b/inertia/components/home/hero_header.tsx @@ -0,0 +1,54 @@ +import styled from '@emotion/styled'; +import { Link } from '@inertiajs/react'; +import { route } from '@izzyjs/route/client'; +import { useTranslation } from 'react-i18next'; +import Quotes from '~/components/quotes'; + +const HeroStyle = styled.header(({ theme }) => ({ + height: '250px', + minHeight: '250px', + width: '100%', + backgroundColor: theme.colors.darkestBlue, + marginTop: '0.5em', + borderRadius: theme.border.radius, + padding: '1em', + display: 'flex', + gap: '1em', + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'column', + + '& *': { + color: `${theme.colors.white} !important`, + textAlign: 'center', + }, +})); + +const HeroTitle = styled.h1({ + fontSize: '32px', +}); + +const HeroQuote = styled(Quotes)({ + fontSize: '20px', +}); + +const LinkButton = styled(Link)(({ theme }) => ({ + fontSize: '1rem', + width: 'fit-content', + backgroundColor: theme.colors.primary, + borderRadius: '5rem', + padding: '0.5em 1.5em', +})); + +export default function HeroHeader() { + const { t } = useTranslation(); + return ( + + {t('about:hero.title')} + {t('common:slogan')} + + {t('about:hero.cta')} + + + ); +} diff --git a/inertia/components/home/website_preview.tsx b/inertia/components/home/website_preview.tsx new file mode 100644 index 0000000..b8f9248 --- /dev/null +++ b/inertia/components/home/website_preview.tsx @@ -0,0 +1,34 @@ +import styled from '@emotion/styled'; +import { useTranslation } from 'react-i18next'; + +const ScreenshotWrapper = styled.div({ + position: 'relative', + height: '360px', + width: '640px', + maxWidth: '100%', + margin: '0 auto', +}); + +const Screenshot = styled.img(({ theme }) => ({ + height: 'auto !important', + width: '100%', + boxShadow: theme.colors.boxShadow, + borderRadius: theme.border.radius, + overflow: 'hidden', +})); + +export default function WebsitePreview() { + const { t } = useTranslation('about'); + return ( + <> + {t('look-title')} + + + + > + ); +} diff --git a/inertia/components/layouts/_theme_layout.tsx b/inertia/components/layouts/_theme_layout.tsx index 490850b..ab01375 100644 --- a/inertia/components/layouts/_theme_layout.tsx +++ b/inertia/components/layouts/_theme_layout.tsx @@ -75,7 +75,7 @@ function GlobalStyles() { const documentStyle = css({ 'html, body, #app': { height: '100svh', - width: '100svw', + width: '100%', fontFamily: "'Poppins', sans-serif", fontSize: '14px', color: localTheme.colors.font, @@ -83,7 +83,6 @@ function GlobalStyles() { display: 'flex', alignItems: 'center', flexDirection: 'column', - overflow: 'hidden', }, }); diff --git a/inertia/i18n/locales/en/about.json b/inertia/i18n/locales/en/about.json index 8293783..fc7ac29 100644 --- a/inertia/i18n/locales/en/about.json +++ b/inertia/i18n/locales/en/about.json @@ -19,6 +19,10 @@ "title": "Browser extension", "text": "Enhance your experience with the official MyLinks browser extension." }, + "share": { + "title": "Share your collections", + "text": "Share your collections with anyone" + }, "contribute": { "title": "Contribute to MyLinks", "text": "Suggest improvements you would like to see on MyLinks." diff --git a/inertia/i18n/locales/fr/about.json b/inertia/i18n/locales/fr/about.json index 0acd5af..c7f11af 100644 --- a/inertia/i18n/locales/fr/about.json +++ b/inertia/i18n/locales/fr/about.json @@ -19,6 +19,10 @@ "title": "Extension de navigateur", "text": "Améliorez votre expérience avec l'extension de navigateur officielle MyLinks." }, + "share": { + "title": "Partagez vos collections", + "text": "Partagez vos collections à n'importe qui" + }, "contribute": { "title": "Contribuer à MyLinks", "text": "Proposez des améliorations que vous souhaiteriez voir sur MyLinks." diff --git a/inertia/pages/home.tsx b/inertia/pages/home.tsx index 13036f4..07a94bf 100644 --- a/inertia/pages/home.tsx +++ b/inertia/pages/home.tsx @@ -1,7 +1,64 @@ -import type { InferPageProps } from '@adonisjs/inertia/types'; +import styled from '@emotion/styled'; +import { useTranslation } from 'react-i18next'; +import { AiFillFolderOpen } from 'react-icons/ai'; +import { FaUser } from 'react-icons/fa'; +import { IoIosLink, IoIosSearch, IoIosShareAlt } from 'react-icons/io'; +import { IoExtensionPuzzleOutline } from 'react-icons/io5'; +import AboutItem from '~/components/home/about/about_item'; +import AboutList from '~/components/home/about/about_list'; +import HeroHeader from '~/components/home/hero_header'; +import WebsitePreview from '~/components/home/website_preview'; import ContentLayout from '~/components/layouts/content_layout'; -import type AppsController from '../../app/controllers/apps_controller'; -export default function Home(_: InferPageProps) { - return blablabla welcome to MyLinks; +const PageContent = styled.div({ + marginBottom: '4em', + textAlign: 'center', + display: 'flex', + gap: '2em', + flex: 1, + flexDirection: 'column', +}); + +export default function Home() { + const { t } = useTranslation(); + return ( + + + + + + + + + + + + + + + ); } diff --git a/inertia/styles/theme.ts b/inertia/styles/theme.ts index 0343eb2..b932c29 100644 --- a/inertia/styles/theme.ts +++ b/inertia/styles/theme.ts @@ -7,6 +7,7 @@ export const primaryDarkColor = '#005aa5'; const lightestBlue = '#d3e8fa'; const lightBlue = '#82c5fede'; const darkBlue = primaryDarkColor; +const darkestBlue = '#1f2937'; const lightRed = '#FF5A5A'; @@ -44,6 +45,7 @@ export const lightTheme: Theme = { lightBlue, blue: primaryColor, darkBlue, + darkestBlue, lightRed, @@ -74,6 +76,7 @@ export const darkTheme: Theme = { lightBlue, blue: '#4fadfc', darkBlue, + darkestBlue, lightRed, diff --git a/inertia/types/emotion.d.ts b/inertia/types/emotion.d.ts index 151f289..38f226c 100644 --- a/inertia/types/emotion.d.ts +++ b/inertia/types/emotion.d.ts @@ -18,6 +18,7 @@ declare module '@emotion/react' { lightBlue: string; blue: string; darkBlue: string; + darkestBlue: string; lightRed: string; diff --git a/public/website-screenshot.png b/public/website-screenshot.png new file mode 100644 index 0000000..cf9863e Binary files /dev/null and b/public/website-screenshot.png differ
{text}