+
+
+
diff --git a/src/components/molecules/MobileMenu/MobileMenu.tsx b/src/components/molecules/MobileMenu/MobileMenu.tsx
index 547211d..36f7bec 100644
--- a/src/components/molecules/MobileMenu/MobileMenu.tsx
+++ b/src/components/molecules/MobileMenu/MobileMenu.tsx
@@ -5,10 +5,13 @@ import { AnimatePresence, motion } from 'framer-motion';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
+import LanguageSwitcherMobile from '@/components/atoms/LanguageSwitcher/LanguageSwitcherMobile';
import { NavigationItem } from '@/components/atoms/NavigationItem';
import ModeToggleButton from '@/components/buttons/ModeToggleButton';
import { links } from '@/components/layout/Header';
+import languages from '@/locales/languages.json';
+
export interface MobileMenuProps {
isOpen: boolean;
}
@@ -66,6 +69,15 @@ export const MobileMenu = ({ isOpen }: MobileMenuProps) => {
>
+
+
+
diff --git a/src/components/organisms/about-work/Education.tsx b/src/components/organisms/about-work/Education.tsx
index 899b78c..7fa7119 100644
--- a/src/components/organisms/about-work/Education.tsx
+++ b/src/components/organisms/about-work/Education.tsx
@@ -4,7 +4,7 @@ import Image from 'next/image';
import * as React from 'react';
import ReactMarkdown from 'react-markdown';
-import SectionHeading from '@/components/atoms/SectionHeading';
+import SectionHeading from '@/components/atoms/headings/SectionHeading';
import { School } from '@/types/School';
diff --git a/src/components/organisms/about-work/Intro.tsx b/src/components/organisms/about-work/Intro.tsx
index e764300..9f06077 100644
--- a/src/components/organisms/about-work/Intro.tsx
+++ b/src/components/organisms/about-work/Intro.tsx
@@ -3,7 +3,7 @@
import * as React from 'react';
import ReactMarkdown from 'react-markdown';
-import SectionHeading from '@/components/atoms/SectionHeading';
+import SectionHeading from '@/components/atoms/headings/SectionHeading';
import { SoftwareDevIntro } from '@/types/ShortText';
diff --git a/src/components/organisms/about-work/Languages.tsx b/src/components/organisms/about-work/Languages.tsx
index 918b3c9..960f90c 100644
--- a/src/components/organisms/about-work/Languages.tsx
+++ b/src/components/organisms/about-work/Languages.tsx
@@ -3,7 +3,7 @@
import Image from 'next/image';
import * as React from 'react';
-import SectionHeading from '@/components/atoms/SectionHeading';
+import SectionHeading from '@/components/atoms/headings/SectionHeading';
import { Language } from '@/types/Language';
diff --git a/src/components/organisms/about-work/Publications.tsx b/src/components/organisms/about-work/Publications.tsx
index 9f68fdf..289f553 100644
--- a/src/components/organisms/about-work/Publications.tsx
+++ b/src/components/organisms/about-work/Publications.tsx
@@ -3,7 +3,7 @@
import * as React from 'react';
import { AiOutlineFilePdf } from 'react-icons/ai';
-import SectionHeading from '@/components/atoms/SectionHeading';
+import SectionHeading from '@/components/atoms/headings/SectionHeading';
import UnstyledLink from '@/components/links/UnstyledLink';
import { Publication } from '@/types/Publication';
diff --git a/src/components/organisms/about-work/WorkExperience.tsx b/src/components/organisms/about-work/WorkExperience.tsx
index 665eed8..89d3ddd 100644
--- a/src/components/organisms/about-work/WorkExperience.tsx
+++ b/src/components/organisms/about-work/WorkExperience.tsx
@@ -5,7 +5,7 @@ import { useTheme } from 'next-themes';
import * as React from 'react';
import ReactMarkdown from 'react-markdown';
-import SectionHeading from '@/components/atoms/SectionHeading';
+import SectionHeading from '@/components/atoms/headings/SectionHeading';
import { Job } from '@/types/Job';
diff --git a/src/locales/en.json b/src/locales/en.json
index 42353a9..5cb0389 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -2,9 +2,9 @@
"headerMenu": {
"about": "About",
"aboutWork": "Work & Career",
- "aboutWorkMobile": "About - Work & Career",
+ "aboutWorkMobile": "About ~ Work & Career",
"aboutFreeTime": "Free Time",
- "aboutFreeTimeMobile": "About - Free Time",
+ "aboutFreeTimeMobile": "About ~ Free Time",
"projects": "Projects",
"cv": "CV",
"uses": "Uses",
diff --git a/src/locales/it.json b/src/locales/it.json
index 41b9707..ac89960 100644
--- a/src/locales/it.json
+++ b/src/locales/it.json
@@ -1,13 +1,13 @@
{
"headerMenu": {
- "about": "Su di me",
- "aboutWork": "Carriera Lavorativa",
- "aboutWorkMobile": "Su di me - Carriera Lavorativa",
+ "about": "About",
+ "aboutWork": "Lavoro",
+ "aboutWorkMobile": "About ~ Lavoro",
"aboutFreeTime": "Tempo Libero",
- "aboutFreeTimeMobile": "Su di me - Tempo Libero",
+ "aboutFreeTimeMobile": "About ~ Tempo Libero",
"projects": "Progetti",
"cv": "CV",
- "uses": "Uses",
+ "uses": "Cose che uso",
"contact": "Contatti"
},
"footerMenu": {
diff --git a/src/locales/languages.json b/src/locales/languages.json
new file mode 100644
index 0000000..0894826
--- /dev/null
+++ b/src/locales/languages.json
@@ -0,0 +1,18 @@
+[
+ {
+ "label": "🇬🇧 EN",
+ "flag": "https://res.cloudinary.com/dwrurydlt/image/upload/v1692716604/uk_657deb6132.svg",
+ "value": "en"
+ },
+ {
+ "label": "🇮🇹 IT",
+ "flag": "https://res.cloudinary.com/dwrurydlt/image/upload/v1692716604/it_00c57db1fb.svg",
+ "value": "it"
+ },
+ {
+ "label": "🇩🇪 DE",
+ "flag": "https://res.cloudinary.com/dwrurydlt/image/upload/v1692716604/de_9c5221adfa.svg",
+ "value": "de",
+ "disabled": true
+ }
+]
diff --git a/src/theme/createEmotionCache.ts b/src/theme/createEmotionCache.ts
new file mode 100644
index 0000000..4bc81ec
--- /dev/null
+++ b/src/theme/createEmotionCache.ts
@@ -0,0 +1,7 @@
+import createCache from '@emotion/cache';
+
+// prepend: true moves MUI styles to the top of the so they're loaded first.
+// It allows developers to easily override MUI styles with other styling solutions, like CSS modules.
+export default function createEmotionCache() {
+ return createCache({ key: 'css', prepend: true });
+}
diff --git a/src/theme/index.ts b/src/theme/index.ts
new file mode 100644
index 0000000..4c9ec0e
--- /dev/null
+++ b/src/theme/index.ts
@@ -0,0 +1,29 @@
+import { createTheme, css, PaletteOptions } from '@mui/material/styles';
+
+export type AllowedTheme = NonNullable
;
+
+export const DEFAULT_THEME: AllowedTheme = 'light';
+
+export const lightTheme = createTheme({
+ palette: {
+ primary: { main: '#2152CE' },
+ secondary: { main: '#2a48f3' },
+ text: {
+ primary: '#000',
+ },
+ mode: 'light',
+ },
+});
+
+export const darkTheme = createTheme({
+ palette: {
+ primary: { main: '#2152CE' },
+ secondary: { main: '#2a48f3' },
+ text: {
+ primary: '#FFFFFF',
+ },
+ mode: 'dark',
+ },
+});
+
+export const globalStyles = css``;
diff --git a/yarn.lock b/yarn.lock
index 332b238..d319c2e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1709,6 +1709,11 @@
resolved "https://verdaccio.mein-recycling.de/@graphql-typed-document-node%2fcore/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861"
integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==
+"@heroicons/react@^2.0.18":
+ version "2.0.18"
+ resolved "https://verdaccio.mein-recycling.de/@heroicons%2freact/-/react-2.0.18.tgz#f80301907c243df03c7e9fd76c0286e95361f7c1"
+ integrity sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw==
+
"@humanwhocodes/config-array@^0.11.10":
version "0.11.10"
resolved "https://verdaccio.mein-recycling.de/@humanwhocodes%2fconfig-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
@@ -7482,7 +7487,7 @@ fraction.js@^4.2.0:
resolved "https://verdaccio.mein-recycling.de/fraction.js/-/fraction.js-4.2.1.tgz#14b4cc886575a5684f8d5fd5759c5db376bb7bb8"
integrity sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==
-framer-motion@^10.12.18:
+framer-motion@^10.16.1:
version "10.16.1"
resolved "https://verdaccio.mein-recycling.de/framer-motion/-/framer-motion-10.16.1.tgz#0ff5de554bbb35ee6605357d80f92b27d0271a94"
integrity sha512-K6TXr5mZtitC/dxQCBdg7xzdN0d5IAIrlaqCPKtIQVdzVPGC0qBuJKXggHX1vjnP5gPOFwB1KbCCTWcnFc3kWg==