diff --git a/frontend/public/next.svg b/frontend/public/next.svg deleted file mode 100644 index 136c6145505c9c9b1457e0bb61a2406fe32f99f7_ZnJvbnRlbmQvcHVibGljL25leHQuc3Zn..0000000000000000000000000000000000000000 --- a/frontend/public/next.svg +++ /dev/null @@ -1,1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg> \ No newline at end of file diff --git a/frontend/public/rodolf.jpg b/frontend/public/rodolf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b52cc88f76e999cf3e5e1848930b62bf78eabd0 GIT binary patch literal 3000 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 F{~bE7jAj4; diff --git a/frontend/public/vercel.svg b/frontend/public/vercel.svg deleted file mode 100644 index 136c6145505c9c9b1457e0bb61a2406fe32f99f7_ZnJvbnRlbmQvcHVibGljL3ZlcmNlbC5zdmc=..0000000000000000000000000000000000000000 --- a/frontend/public/vercel.svg +++ /dev/null @@ -1,1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg> \ No newline at end of file diff --git a/frontend/src/app/favicon.ico b/frontend/src/app/favicon.ico index 718d6fea4835ec2d246af9800eddb7ffb276240c..363dd74afa299b5625f37d0bf4330e3057da04f9 GIT binary patch literal 28862 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 T|6{QKYya2&ul-;92e<zZGC>$n diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 136c6145505c9c9b1457e0bb61a2406fe32f99f7_ZnJvbnRlbmQvc3JjL2FwcC9sYXlvdXQudHN4..8abef47db9b1ec6fc12d6353f640573ac12af93d_ZnJvbnRlbmQvc3JjL2FwcC9sYXlvdXQudHN4 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,3 +1,4 @@ +import BaseLayout from "@/components/BaseLayout"; import type { Metadata } from "next"; export const metadata: Metadata = { @@ -12,7 +13,9 @@ }) { return ( <html lang="en"> - <body style={{ margin: 0 }}>{children}</body> + <body style={{ margin: 0 }}> + <BaseLayout>{children}</BaseLayout> + </body> </html> ); } diff --git a/frontend/src/components/BaseLayout.tsx b/frontend/src/components/BaseLayout.tsx new file mode 100644 index 0000000000000000000000000000000000000000..8abef47db9b1ec6fc12d6353f640573ac12af93d_ZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvQmFzZUxheW91dC50c3g= --- /dev/null +++ b/frontend/src/components/BaseLayout.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { PropsWithChildren } from "react"; +import { Header } from "./Header"; +import { CustomThemeProvider } from "@/context/DarkModeContext"; +import { Box, Paper } from "@mui/material"; + +export default function BaseLayout({ children }: PropsWithChildren) { + return ( + <CustomThemeProvider> + <Paper elevation={0} square sx={{ minHeight: "100vh" }}> + <Header /> + <Box paddingTop={1} paddingBottom={1}> + {children} + </Box> + </Paper> + </CustomThemeProvider> + ); +} diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx new file mode 100644 index 0000000000000000000000000000000000000000..8abef47db9b1ec6fc12d6353f640573ac12af93d_ZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvSGVhZGVyLnRzeA== --- /dev/null +++ b/frontend/src/components/Header.tsx @@ -0,0 +1,71 @@ +import { + AppBar, + Button, + IconButton, + Stack, + Toolbar, + Typography, + useTheme, +} from "@mui/material"; +import DarkMode from "@mui/icons-material/DarkMode"; +import LightMode from "@mui/icons-material/LightMode"; +import { useToggleDarkMode } from "@/context/DarkModeContext"; +import Link from "next/link"; +import Image from "next/image"; + +export function Header() { + const toggleDarkMode = useToggleDarkMode(); + const theme = useTheme(); + + const loggedIn = false; + + return ( + <AppBar position="static"> + <Toolbar> + <Link + href={"/"} + prefetch={false} + style={{ + textDecoration: "none", + color: "inherit", + flex: 1, + }} + > + <Stack + direction={"row"} + spacing={2} + flexGrow={1} + alignItems={"center"} + > + <Image + src={"/rodolf.jpg"} + alt={"Rodolf logo"} + width={50} + height={50} + /> + <Typography + variant="h6" + sx={{ + display: { xs: "none", sm: "none", md: "block" }, + }} + > + Rodolf + </Typography> + </Stack> + </Link> + <IconButton onClick={toggleDarkMode}> + {theme.palette.mode === "light" ? <LightMode /> : <DarkMode />} + </IconButton> + <Button + onClick={() => { + console.log("login"); + }} + variant={loggedIn ? "contained" : "text"} + color={loggedIn ? "error" : "primary"} + > + {loggedIn ? "Déconnexion" : "Connexion"} + </Button> + </Toolbar> + </AppBar> + ); +} diff --git a/frontend/src/context/DarkModeContext.tsx b/frontend/src/context/DarkModeContext.tsx new file mode 100644 index 0000000000000000000000000000000000000000..8abef47db9b1ec6fc12d6353f640573ac12af93d_ZnJvbnRlbmQvc3JjL2NvbnRleHQvRGFya01vZGVDb250ZXh0LnRzeA== --- /dev/null +++ b/frontend/src/context/DarkModeContext.tsx @@ -0,0 +1,65 @@ +import { ThemeProvider, createTheme, useMediaQuery } from "@mui/material"; +import React, { PropsWithChildren, useContext, useState } from "react"; + +export interface CustomThemeType { + toggleDarkMode?: () => void; +} + +const CustomThemeContext = React.createContext<CustomThemeType>({ + toggleDarkMode: () => undefined, +}); + +const DARK_MODE_KEY = "rodolf.theme.dark"; + +export function CustomThemeProvider({ children }: PropsWithChildren) { + const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); + const savedDarkMode = localStorage.getItem(DARK_MODE_KEY) === "1"; + const hasSavedDarkMode = localStorage.getItem(DARK_MODE_KEY) !== null; + + const initialDarkMode = hasSavedDarkMode ? savedDarkMode : prefersDarkMode; + + const [darkMode, setDarkMode] = useState(initialDarkMode); + + function toggleDarkMode() { + localStorage.setItem(DARK_MODE_KEY, darkMode ? "0" : "1"); + setDarkMode(!darkMode); + } + + const defaultTheme = React.useMemo( + () => + createTheme({ + palette: { + mode: darkMode ? "dark" : "light", + }, + }), + [darkMode], + ); + + const theme = React.useMemo( + () => + createTheme(defaultTheme, { + components: { + MuiAppBar: { + styleOverrides: { + colorPrimary: { + backgroundColor: defaultTheme.palette.background.paper, + color: defaultTheme.palette.text.primary, + }, + }, + }, + }, + }), + [defaultTheme], + ); + + return ( + <CustomThemeContext.Provider value={{ toggleDarkMode }}> + <ThemeProvider theme={theme}>{children}</ThemeProvider> + </CustomThemeContext.Provider> + ); +} + +export function useToggleDarkMode() { + const { toggleDarkMode } = useContext(CustomThemeContext); + return toggleDarkMode; +}