Refactor code style for consistency and readability

- Updated import statements to use double quotes instead of single quotes across multiple files.
- Reformatted JSX return statements for better alignment and readability.
- Added missing newlines at the end of files where necessary.
- Adjusted component structure for improved clarity in the Landing, Blog, BestPractices, and Projects pages.
- Enhanced error boundary component for better error handling.
- Updated theme overrides for Material-UI components to maintain consistent styling.
This commit is contained in:
Dan Dobos
2025-10-17 17:13:54 +02:00
parent 00324b9667
commit 4aa5040ef5
64 changed files with 20206 additions and 22302 deletions
+1 -1
View File
@@ -12,4 +12,4 @@
"webRoot": "${workspaceFolder}" "webRoot": "${workspaceFolder}"
} }
] ]
} }
+2 -1
View File
@@ -1,3 +1,4 @@
{ {
"typescript.validate.enable": false "typescript.validate.enable": false,
"editor.formatOnSave": true
} }
+3
View File
@@ -5,10 +5,13 @@ This project is build with React and Material UI, and it holds a collection of p
You can view it live [here](https://dadobos.github.io/me/). You can view it live [here](https://dadobos.github.io/me/).
## Installation ## Installation
#### First you have to clone the repository #### First you have to clone the repository
<code>git clone https://github.com/dadobos/me.git</code> <code>git clone https://github.com/dadobos/me.git</code>
#### In the project directory, you can run: #### In the project directory, you can run:
<code>npm run start</code> or just <code>npm start</code> <code>npm run start</code> or just <code>npm start</code>
Runs the app in the development mode.\ Runs the app in the development mode.\
+8 -7
View File
@@ -1,9 +1,10 @@
{ {
"compilerOptions": { "compilerOptions": {
"baseUrl": "src", "jsx": "react",
"module": "commonjs", "baseUrl": "src",
"target": "es6" "module": "commonjs",
}, "target": "es6"
"include": ["src"], },
"exclude": ["node_modules"] "include": ["src"],
"exclude": ["node_modules"]
} }
+18756 -20889
View File
File diff suppressed because it is too large Load Diff
+62 -62
View File
@@ -1,64 +1,64 @@
{ {
"name": "react-page", "name": "react-page",
"homepage": "https://dadobos.github.io/me/", "homepage": "https://dadobos.github.io/me/",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@emotion/react": "^11.14.0", "@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0", "@emotion/styled": "^11.14.0",
"@mui/icons-material": "^6.4.12", "@mui/icons-material": "^6.4.12",
"@mui/material": "^7.3.4", "@mui/material": "^7.3.4",
"@mui/styles": "^6.0.0", "@mui/styles": "^6.0.0",
"@testing-library/jest-dom": "^6.9.1", "@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0", "@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1", "@testing-library/user-event": "^14.6.1",
"react": "^19.2.0", "react": "^19.2.0",
"react-dom": "^19.2.0", "react-dom": "^19.2.0",
"react-router-dom": "^7.9.4", "react-router-dom": "^7.9.4",
"react-scripts": "^5.0.1", "react-scripts": "^5.0.1",
"react-spring": "^10.0.3", "react-spring": "^10.0.3",
"styled-components": "^6.1.11", "styled-components": "^6.1.11",
"vanilla-tilt": "^1.8.1", "vanilla-tilt": "^1.8.1",
"web-vitals": "^5.1.0" "web-vitals": "^5.1.0"
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",
"build": "react-scripts build", "build": "react-scripts build",
"test": "react-scripts test", "test": "react-scripts test",
"eject": "react-scripts eject", "eject": "react-scripts eject",
"predeploy": "npm run build", "predeploy": "npm run build",
"deploy": "gh-pages -d build" "deploy": "gh-pages -d build"
}, },
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [
"react-app", "react-app",
"react-app/jest" "react-app/jest"
] ]
}, },
"browserslist": { "browserslist": {
"production": [ "production": [
">0.2%", ">0.2%",
"not dead", "not dead",
"not op_mini all" "not op_mini all"
], ],
"development": [ "development": [
"last 1 chrome version", "last 1 chrome version",
"last 1 firefox version", "last 1 firefox version",
"last 1 safari version" "last 1 safari version"
] ]
}, },
"devDependencies": { "devDependencies": {
"gh-pages": "^6.1.1" "gh-pages": "^6.1.1"
}, },
"description": "This project is build with React and Material UI, and it holds a collection of projects, best practices, and technologies that I want to explore.", "description": "This project is build with React and Material UI, and it holds a collection of projects, best practices, and technologies that I want to explore.",
"main": "index.js", "main": "index.js",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/dadobos/me.git" "url": "git+https://github.com/dadobos/me.git"
}, },
"author": "Dan Andrei Dobos", "author": "Dan Andrei Dobos",
"license": "ISC", "license": "ISC",
"bugs": { "bugs": {
"url": "https://github.com/dadobos/me/issues" "url": "https://github.com/dadobos/me/issues"
} }
} }
+28 -28
View File
@@ -1,31 +1,31 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" style="scroll-behavior: smooth"> <html lang="en" style="scroll-behavior: smooth">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link <link
rel="icon" rel="icon"
href="https://res.cloudinary.com/dadobos/image/upload/v1642766520/web/favicon_ugvc88.ico" href="https://res.cloudinary.com/dadobos/image/upload/v1642766520/web/favicon_ugvc88.ico"
type="image/x-icon" type="image/x-icon"
/> />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" /> <meta name="theme-color" content="#000000" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link <link
href="https://fonts.googleapis.com/css2?family=Chilanka&family=Lato:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Nanum+Gothic+Coding:wght@400;700&family=Press+Start+2P&family=Roboto:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Yeon+Sung&display=swap" href="https://fonts.googleapis.com/css2?family=Chilanka&family=Lato:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Nanum+Gothic+Coding:wght@400;700&family=Press+Start+2P&family=Roboto:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Yeon+Sung&display=swap"
rel="stylesheet" rel="stylesheet"
/> />
<link <link
rel="stylesheet" rel="stylesheet"
href="https://fonts.googleapis.com/icon?family=Material+Icons" href="https://fonts.googleapis.com/icon?family=Material+Icons"
/> />
<title>DAD</title> <title>DAD</title>
</head> </head>
<body> <body>
<noscript>You need to enable JavaScript to run this app.</noscript> <noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div> <div id="root"></div>
<!-- <!--
This HTML file is a template. This HTML file is a template.
If you open it directly in the browser, you will see an empty page. If you open it directly in the browser, you will see an empty page.
@@ -35,5 +35,5 @@
To begin the development, run `npm start` or `yarn start`. To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`. To create a production bundle, use `npm run build` or `yarn build`.
--> -->
</body> </body>
</html> </html>
+30 -30
View File
@@ -1,41 +1,41 @@
import React, { useState, useMemo, createContext } from 'react'; import React, { useState, useMemo, createContext } from "react";
import { BrowserRouter as Router } from 'react-router-dom'; import { BrowserRouter as Router } from "react-router-dom";
import { import {
responsiveFontSizes, responsiveFontSizes,
ThemeProvider, ThemeProvider,
createTheme, createTheme,
} from '@mui/material/styles'; } from "@mui/material/styles";
import { MainTheme } from './themes/Theme'; import { MainTheme } from "./themes/Theme";
import { CustomRoutes } from './routes/Routes'; import { CustomRoutes } from "./routes/Routes";
export const ColorModeContext = createContext({ toggleColorMode: () => {} }); export const ColorModeContext = createContext({ toggleColorMode: () => {} });
const App = () => { const App = () => {
const [mode, setMode] = useState('dark'); const [mode, setMode] = useState("dark");
const colorMode = useMemo( const colorMode = useMemo(
() => ({ () => ({
toggleColorMode: () => { toggleColorMode: () => {
setMode((prevMode) => (prevMode === 'light' ? 'dark' : 'light')); setMode((prevMode) => (prevMode === "light" ? "dark" : "light"));
}, },
}), }),
[] [],
); );
const theme = useMemo( const theme = useMemo(
() => responsiveFontSizes(createTheme(MainTheme(mode))), () => responsiveFontSizes(createTheme(MainTheme(mode))),
[mode] [mode],
); );
return ( return (
<ColorModeContext.Provider value={colorMode}> <ColorModeContext.Provider value={colorMode}>
<ThemeProvider theme={theme}> <ThemeProvider theme={theme}>
<Router basename={process.env.PUBLIC_URL}> <Router basename={process.env.PUBLIC_URL}>
<CustomRoutes /> <CustomRoutes />
</Router> </Router>
</ThemeProvider> </ThemeProvider>
</ColorModeContext.Provider> </ColorModeContext.Provider>
); );
}; };
export default App; export default App;
+3 -3
View File
@@ -1,7 +1,7 @@
import { render, screen } from '@testing-library/react'; import { render, screen } from "@testing-library/react";
import App from './App'; import App from "./App";
test('renders learn react link', () => { test("renders learn react link", () => {
render(<App />); render(<App />);
const linkElement = screen.getByText(/learn react/i); const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument(); expect(linkElement).toBeInTheDocument();
+32 -30
View File
@@ -1,35 +1,37 @@
import React from 'react'; import React from "react";
import { import {
Accordion, Accordion,
AccordionSummary, AccordionSummary,
AccordionDetails, AccordionDetails,
Typography, Typography,
} from '@mui/material'; } from "@mui/material";
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
const BlogAccordion = ({blogContent}) => { const BlogAccordion = ({ blogContent }) => {
return ( return blogContent.map(({ title, description }) => (
blogContent.map(({title, description}) => ( <Accordion
<Accordion // defaultExpanded
// defaultExpanded // slotProps={{ unmountOnExit: true }}
// slotProps={{ unmountOnExit: true }} key={title}
key={title} sx={{ background: "transparent" }}
sx={{ background: 'transparent' }}> >
<AccordionSummary <AccordionSummary
expandIcon={<ExpandMoreIcon />} expandIcon={<ExpandMoreIcon />}
aria-controls='panel1a-content' aria-controls="panel1a-content"
id='panel1a-header'> id="panel1a-header"
<Typography variant='h5'>{ title }</Typography> >
</AccordionSummary> <Typography variant="h5">{title}</Typography>
<AccordionDetails> </AccordionSummary>
{description.map((lineContent, idx) => ( <AccordionDetails>
<Typography {description.map((lineContent, idx) => (
key={idx} paragraph>{lineContent}</Typography> <Typography key={idx} paragraph>
))} {lineContent}
</AccordionDetails> </Typography>
</Accordion> ))}
))); </AccordionDetails>
</Accordion>
));
}; };
export default BlogAccordion; export default BlogAccordion;
+52 -48
View File
@@ -1,53 +1,57 @@
import React from 'react'; import React from "react";
import { import {
Grid, Grid,
Accordion, Accordion,
AccordionSummary, AccordionSummary,
AccordionDetails, AccordionDetails,
Typography, Typography,
} from '@mui/material'; } from "@mui/material";
import MainCard from 'components/main-card/MainCard'; import MainCard from "components/main-card/MainCard";
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
const MainAccordion = ({items, title}) => { const MainAccordion = ({ items, title }) => {
return ( return (
<Accordion <Accordion
defaultExpanded defaultExpanded
TransitionProps={{ unmountOnExit: true }} TransitionProps={{ unmountOnExit: true }}
sx={{ background: 'transparent' }}> sx={{ background: "transparent" }}
<AccordionSummary >
expandIcon={<ExpandMoreIcon />} <AccordionSummary
aria-controls='panel1a-content' expandIcon={<ExpandMoreIcon />}
id='panel1a-header'> aria-controls="panel1a-content"
<Typography variant='h5'>{ title }</Typography> id="panel1a-header"
</AccordionSummary> >
<AccordionDetails> <Typography variant="h5">{title}</Typography>
<Grid </AccordionSummary>
container <AccordionDetails>
direction='row' <Grid
alignItems='flex-start' container
justifyContent='baseline' direction="row"
spacing={3}> alignItems="flex-start"
{items.map((project) => ( justifyContent="baseline"
<Grid spacing={3}
item >
xs={12} {items.map((project) => (
sm={6} <Grid
md={4} item
key={project.title} xs={12}
sx={{ alignItems: 'center', justifyContent: 'center' }}> sm={6}
<MainCard md={4}
imageURL={project.imageURL} key={project.title}
title={project.title} sx={{ alignItems: "center", justifyContent: "center" }}
description={project.description} >
url={project.url} <MainCard
/> imageURL={project.imageURL}
</Grid> title={project.title}
))} description={project.description}
</Grid> url={project.url}
</AccordionDetails> />
</Accordion> </Grid>
); ))}
</Grid>
</AccordionDetails>
</Accordion>
);
}; };
export default MainAccordion; export default MainAccordion;
+49 -47
View File
@@ -1,59 +1,61 @@
import React from 'react'; import React from "react";
import { import {
Card, Card,
CardContent, CardContent,
CardMedia, CardMedia,
CardActionArea, CardActionArea,
Typography, Typography,
} from '@mui/material'; } from "@mui/material";
import { useTheme } from '@mui/material/styles'; import { useTheme } from "@mui/material/styles";
import { Tilt } from './Tilt'; import { Tilt } from "./Tilt";
const MainCard = ({ imageURL, title, description, url }) => { const MainCard = ({ imageURL, title, description, url }) => {
const theme = useTheme(); const theme = useTheme();
const options = { const options = {
reverse: true, reverse: true,
speed: 1200, speed: 1200,
easing: 'cubic-bezier(.09,.67,.54,.76)', easing: "cubic-bezier(.09,.67,.54,.76)",
}; };
return ( return (
<Tilt <Tilt
// style={{ padding: 0, margin: 0 }} // style={{ padding: 0, margin: 0 }}
options={options} options={options}
children={ children={
<Card <Card
sx={{ sx={{
maxWidth: '320px', maxWidth: "320px",
mx: 'auto', mx: "auto",
color: theme.palette.text.secondary, color: theme.palette.text.secondary,
backgroundColor: theme.palette.background.paper, backgroundColor: theme.palette.background.paper,
}}> }}
<CardMedia >
component='img' <CardMedia
height='150' component="img"
image={imageURL} height="150"
alt={title} image={imageURL}
/> alt={title}
/>
<Typography variant='body2'>{description}</Typography> <Typography variant="body2">{description}</Typography>
<CardActionArea> <CardActionArea>
<CardContent <CardContent
color='white' color="white"
onClick={() => window.open(url, '_blank')}> onClick={() => window.open(url, "_blank")}
<Typography gutterBottom variant='h6' component='div'> >
{title} <Typography gutterBottom variant="h6" component="div">
</Typography> {title}
</CardContent> </Typography>
</CardActionArea> </CardContent>
</Card> </CardActionArea>
} </Card>
/> }
); />
);
}; };
export default MainCard; export default MainCard;
+8 -8
View File
@@ -1,14 +1,14 @@
import React, { useEffect, useRef } from 'react'; import React, { useEffect, useRef } from "react";
import VanillaTilt from 'vanilla-tilt'; import VanillaTilt from "vanilla-tilt";
export const Tilt = (props) => { export const Tilt = (props) => {
const { options, children } = props; const { options, children } = props;
const tilt = useRef(null); const tilt = useRef(null);
useEffect(() => { useEffect(() => {
VanillaTilt.init(tilt.current, options); VanillaTilt.init(tilt.current, options);
}, [options]); }, [options]);
return <div ref={tilt}>{children}</div>; return <div ref={tilt}>{children}</div>;
}; };
+1 -1
View File
@@ -1 +1 @@
export { default } from './MainCard'; export { default } from "./MainCard";
+94 -95
View File
@@ -1,116 +1,115 @@
export const ReactData = [ export const ReactData = [
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1673023170/web/uxfuyzap5kbs1si34g29.png', "https://res.cloudinary.com/dadobos/image/upload/v1673023170/web/uxfuyzap5kbs1si34g29.png",
title: 'React Shop', title: "React Shop",
description: '', description: "",
url: 'https://dadobos.github.io/react-shop/', url: "https://dadobos.github.io/react-shop/",
}, },
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1685729092/web/tzoxavfsfa44z2o9wrgi.png', "https://res.cloudinary.com/dadobos/image/upload/v1685729092/web/tzoxavfsfa44z2o9wrgi.png",
title: 'React Quiz App', title: "React Quiz App",
description: '', description: "",
url: 'https://dadobos.github.io/react-quiz-app/', url: "https://dadobos.github.io/react-quiz-app/",
}, },
]; ];
export const GoData = [ export const GoData = [
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1669538934/web/ng0ghejmlsmzhrgyuiz4.png', "https://res.cloudinary.com/dadobos/image/upload/v1669538934/web/ng0ghejmlsmzhrgyuiz4.png",
title: 'Pokemon GO Templates', title: "Pokemon GO Templates",
description: '', description: "",
url: 'https://github.com/dadobos/pokemongotemplates', url: "https://github.com/dadobos/pokemongotemplates",
}, },
]; ];
export const WebsitesData = [ export const WebsitesData = [
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1653850879/web/TheSquareProject_sgflcj.png', "https://res.cloudinary.com/dadobos/image/upload/v1653850879/web/TheSquareProject_sgflcj.png",
title: 'The Square Project', title: "The Square Project",
description: '', description: "",
url: 'https://dadobos.github.io/The-Square-Project/', url: "https://dadobos.github.io/The-Square-Project/",
}, },
]; ];
export const JavaData = [ export const JavaData = [
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1642766521/web/Restaurant_Billing_System_rgpsif.png', "https://res.cloudinary.com/dadobos/image/upload/v1642766521/web/Restaurant_Billing_System_rgpsif.png",
title: 'Restaurant Billing System', title: "Restaurant Billing System",
description: '', description: "",
url: 'https://github.com/dadobos/Restaurant', url: "https://github.com/dadobos/Restaurant",
}, },
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1642766521/web/Billing_System_bazap1.png', "https://res.cloudinary.com/dadobos/image/upload/v1642766521/web/Billing_System_bazap1.png",
title: 'Billing System', title: "Billing System",
description: '', description: "",
url: 'https://github.com/dadobos/Billing-System', url: "https://github.com/dadobos/Billing-System",
}, },
]; ];
export const VueData = [ export const VueData = [
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1654030260/web/WorldCountries_ekx2of.png', "https://res.cloudinary.com/dadobos/image/upload/v1654030260/web/WorldCountries_ekx2of.png",
title: 'World Countries', title: "World Countries",
description: '', description: "",
url: 'https://dadobos.github.io/worldcountries/', url: "https://dadobos.github.io/worldcountries/",
}, },
]; ];
export const CSSData = [ export const CSSData = [
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1673027279/web/msvc649ua0gahqegu31o.png', "https://res.cloudinary.com/dadobos/image/upload/v1673027279/web/msvc649ua0gahqegu31o.png",
title: 'Anchor Tag Hide Components', title: "Anchor Tag Hide Components",
description: '', description: "",
url: 'https://codepen.io/diaid/full/MWOOogX', url: "https://codepen.io/diaid/full/MWOOogX",
}, },
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1673027279/web/dprvsa15ocx3l34dxogo.png', "https://res.cloudinary.com/dadobos/image/upload/v1673027279/web/dprvsa15ocx3l34dxogo.png",
title: 'Radio Hide Components', title: "Radio Hide Components",
description: '', description: "",
url: 'https://codepen.io/diaid/full/qBVdgWW', url: "https://codepen.io/diaid/full/qBVdgWW",
}, },
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1673025125/web/anidcin5lbxo2hced5i4.png', "https://res.cloudinary.com/dadobos/image/upload/v1673025125/web/anidcin5lbxo2hced5i4.png",
title: 'Rounded Paragraph', title: "Rounded Paragraph",
description: '', description: "",
url: 'https://codepen.io/diaid/full/QWxOgVm', url: "https://codepen.io/diaid/full/QWxOgVm",
}, },
{ {
imageURL: imageURL:
'https://res.cloudinary.com/dadobos/image/upload/v1673027940/web/z9qn4wstdtzpr4cf5xtx.png', "https://res.cloudinary.com/dadobos/image/upload/v1673027940/web/z9qn4wstdtzpr4cf5xtx.png",
title: 'Responsive Table', title: "Responsive Table",
description: '', description: "",
url: 'https://codepen.io/diaid/full/xxJRGMB', url: "https://codepen.io/diaid/full/xxJRGMB",
}, },
]; ];
export const PantoneBlog = [
export const PantoneBlog = [`For 2025, the Pantone Color Institute selects PANTONE 17-1230 Mocha Mousse, `For 2025, the Pantone Color Institute selects PANTONE 17-1230 Mocha Mousse,
a warming, brown hue imbued with richness. It nurtures us with its suggestion of the delectable qualities a warming, brown hue imbued with richness. It nurtures us with its suggestion of the delectable qualities
of chocolate and coffee, answering our desire for comfort.`] of chocolate and coffee, answering our desire for comfort.`,
];
export const BlogContent = [
{
title: "Pantone color 2025",
description: [
"A Pantone color is a standardized, proprietary color created by the Pantone company, which assigns a unique code to each color. These colors are used in various industries to ensure color consistency across different materials and locations, as they provide a shared language for specifying and reproducing colors accurately. Pantone colors are often more vibrant and consistent than colors created with the standard CMYK or RGB color models.",
export const BlogContent = [ "For 2025, the Pantone Color Institute selects PANTONE 17-1230 Mocha Mousse, a warming, brown hue imbued with richness. It nurtures us with its suggestion of the delectable qualities of chocolate and coffee, answering our desire for comfort.",
{ ],
title: 'Pantone color 2025', },
description: [ {
'A Pantone color is a standardized, proprietary color created by the Pantone company, which assigns a unique code to each color. These colors are used in various industries to ensure color consistency across different materials and locations, as they provide a shared language for specifying and reproducing colors accurately. Pantone colors are often more vibrant and consistent than colors created with the standard CMYK or RGB color models.', title: "How I achieved 100% on Lighthouse Audit",
description: ["TBA"],
'For 2025, the Pantone Color Institute selects PANTONE 17-1230 Mocha Mousse, a warming, brown hue imbued with richness. It nurtures us with its suggestion of the delectable qualities of chocolate and coffee, answering our desire for comfort.' ] },
}, ];
{
title: 'How I achieved 100% on Lighthouse Audit',
description: [
'TBA' ]
},
];
+8 -9
View File
@@ -1,14 +1,13 @@
import React from 'react'; import React from "react";
import ReactDOM from 'react-dom/client'; import ReactDOM from "react-dom/client";
import App from './App'; import App from "./App";
import reportWebVitals from './reportWebVitals'; import reportWebVitals from "./reportWebVitals";
const root = ReactDOM.createRoot(document.getElementById("root"));
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render( root.render(
<React.StrictMode> <React.StrictMode>
<App /> <App />
</React.StrictMode> </React.StrictMode>,
); );
// If you want to start measuring performance in your app, pass a function // If you want to start measuring performance in your app, pass a function
+49 -48
View File
@@ -1,60 +1,61 @@
import React from 'react'; import React from "react";
import { Grid, Grow, useScrollTrigger } from '@mui/material'; import { Grid, Grow, useScrollTrigger } from "@mui/material";
import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'; import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp";
import { useTheme } from '@mui/material/styles'; import { useTheme } from "@mui/material/styles";
function ScrollTop(props) { function ScrollTop(props) {
const { children, window } = props; const { children, window } = props;
// Note that you normally won't need to set the window ref as useScrollTrigger // Note that you normally won't need to set the window ref as useScrollTrigger
// will default to window. // will default to window.
// This is only being set here because the demo is in an iframe. // This is only being set here because the demo is in an iframe.
const trigger = useScrollTrigger({ const trigger = useScrollTrigger({
target: window ? window() : undefined, target: window ? window() : undefined,
disableHysteresis: true, disableHysteresis: true,
threshold: 100, threshold: 100,
}); });
const handleClick = (event) => { const handleClick = (event) => {
const anchor = (event.target.ownerDocument || document).querySelector( const anchor = (event.target.ownerDocument || document).querySelector(
'#back-to-top-anchor' "#back-to-top-anchor",
); );
if (anchor) { if (anchor) {
anchor.scrollIntoView({ behavior: 'smooth', block: 'center' }); anchor.scrollIntoView({ behavior: "smooth", block: "center" });
} }
}; };
return ( return (
<Grow in={trigger}> <Grow in={trigger}>
<div onClick={handleClick} role='presentation'> <div onClick={handleClick} role="presentation">
{children} {children}
</div> </div>
</Grow> </Grow>
); );
} }
const BackToTop = (props) => { const BackToTop = (props) => {
const theme = useTheme(); const theme = useTheme();
return ( return (
<Grid <Grid
sx={{ sx={{
position: 'fixed', position: "fixed",
bottom: theme.spacing(2), bottom: theme.spacing(2),
left: theme.spacing(1), left: theme.spacing(1),
}} }}
id='footer'> id="footer"
<ScrollTop {...props}> >
<KeyboardArrowUpIcon <ScrollTop {...props}>
sx={{ <KeyboardArrowUpIcon
width: '5rem', sx={{
height: '5rem', width: "5rem",
[theme.breakpoints.down('md')]: { width: '3rem', height: '3rem' }, height: "5rem",
}} [theme.breakpoints.down("md")]: { width: "3rem", height: "3rem" },
/> }}
</ScrollTop> />
</Grid> </ScrollTop>
); </Grid>
);
}; };
export default BackToTop; export default BackToTop;
+1 -1
View File
@@ -1 +1 @@
export { default } from './BackToTop'; export { default } from "./BackToTop";
@@ -1,23 +1,26 @@
import React, { useContext } from 'react'; import React, { useContext } from "react";
import { IconButton } from '@mui/material'; import { IconButton } from "@mui/material";
import { useTheme } from '@mui/material/styles'; import { useTheme } from "@mui/material/styles";
import { ColorModeContext } from 'App'; import { ColorModeContext } from "App";
import WbSunnyOutlinedIcon from '@mui/icons-material/WbSunnyOutlined'; import WbSunnyOutlinedIcon from "@mui/icons-material/WbSunnyOutlined";
import NightsStayOutlinedIcon from '@mui/icons-material/NightsStayOutlined'; import NightsStayOutlinedIcon from "@mui/icons-material/NightsStayOutlined";
const DarkModeToggle = () => { const DarkModeToggle = () => {
const theme = useTheme(); const theme = useTheme();
const colorMode = useContext(ColorModeContext); const colorMode = useContext(ColorModeContext);
return ( return (
<IconButton onClick={colorMode.toggleColorMode} sx={{ color: theme.palette.text.secondary }} > <IconButton
{theme.palette.mode === 'dark' ? ( onClick={colorMode.toggleColorMode}
<WbSunnyOutlinedIcon /> sx={{ color: theme.palette.text.secondary }}
) : ( >
<NightsStayOutlinedIcon /> {theme.palette.mode === "dark" ? (
)} <WbSunnyOutlinedIcon />
</IconButton> ) : (
); <NightsStayOutlinedIcon />
)}
</IconButton>
);
}; };
export default DarkModeToggle; export default DarkModeToggle;
+1 -1
View File
@@ -1 +1 @@
export { default } from './DarkModeToggle'; export { default } from "./DarkModeToggle";
@@ -1,26 +1,27 @@
import React from 'react'; import React from "react";
import { Container } from '@mui/material'; import { Container } from "@mui/material";
const FullScreenContainer = (props) => { const FullScreenContainer = (props) => {
const { children } = props; const { children } = props;
// const theme = useTheme(); // const theme = useTheme();
return ( return (
<Container <Container
maxWidth='lg' maxWidth="lg"
sx={{ sx={{
minHeight: 'calc(100vh - 24px )', minHeight: "calc(100vh - 24px )",
paddingTop: '6rem', paddingTop: "6rem",
paddingBottom: '2rem', paddingBottom: "2rem",
flex: 1, flex: 1,
fallbacks: [ fallbacks: [
{ minHeight: '-moz-calc(100% - 24px)' }, { minHeight: "-moz-calc(100% - 24px)" },
{ minHeight: '-webkit-calc(100% - 24px)' }, { minHeight: "-webkit-calc(100% - 24px)" },
{ minHeight: '-o-calc(100% - 24px)' }, { minHeight: "-o-calc(100% - 24px)" },
], ],
}}> }}
{children} >
</Container> {children}
); </Container>
);
}; };
export default FullScreenContainer; export default FullScreenContainer;
@@ -1 +1 @@
export { default } from './FullScreenContainer'; export { default } from "./FullScreenContainer";
@@ -1,17 +1,17 @@
import React from 'react'; import React from "react";
import { useScrollTrigger, Slide } from '@mui/material'; import { useScrollTrigger, Slide } from "@mui/material";
const HideOnScroll = (props) => { const HideOnScroll = (props) => {
const { children, window } = props; const { children, window } = props;
const trigger = useScrollTrigger({ const trigger = useScrollTrigger({
target: window ? window() : undefined, target: window ? window() : undefined,
}); });
return ( return (
<Slide appear={false} direction='down' in={!trigger}> <Slide appear={false} direction="down" in={!trigger}>
{children} {children}
</Slide> </Slide>
); );
}; };
export default HideOnScroll; export default HideOnScroll;
+1 -1
View File
@@ -1 +1 @@
export { default } from './HideOnScroll.jsx'; export { default } from "./HideOnScroll.jsx";
+21 -21
View File
@@ -1,31 +1,31 @@
import React, { useContext } from 'react'; import React, { useContext } from "react";
import { ThemeProvider } from '@mui/material/styles'; import { ThemeProvider } from "@mui/material/styles";
import { ColorModeContext } from 'App'; import { ColorModeContext } from "App";
import { LandingWhite } from 'themes/Theme'; import { LandingWhite } from "themes/Theme";
import FullScreenContainer from 'layouts/common/fullScreenContainer'; import FullScreenContainer from "layouts/common/fullScreenContainer";
import BackToTop from '../common/backToTop'; import BackToTop from "../common/backToTop";
import Header from './components/header'; import Header from "./components/header";
const LandingLayout = (props) => { const LandingLayout = (props) => {
const { children } = props; const { children } = props;
const colorMode = useContext(ColorModeContext); const colorMode = useContext(ColorModeContext);
return ( return (
<ColorModeContext.Provider value={colorMode}> <ColorModeContext.Provider value={colorMode}>
<ThemeProvider theme={LandingWhite}> <ThemeProvider theme={LandingWhite}>
<div id='back-to-top-anchor' /> <div id="back-to-top-anchor" />
<Header /> <Header />
<FullScreenContainer> <FullScreenContainer>
{children} {children}
<BackToTop /> <BackToTop />
</FullScreenContainer> </FullScreenContainer>
</ThemeProvider> </ThemeProvider>
</ColorModeContext.Provider> </ColorModeContext.Provider>
); );
}; };
export default LandingLayout; export default LandingLayout;
@@ -1,76 +1,90 @@
import React from 'react'; import React from "react";
import { Link } from 'react-router-dom'; import { Link } from "react-router-dom";
import { import {
AppBar, AppBar,
Toolbar, Toolbar,
CssBaseline, CssBaseline,
Typography, Typography,
Breadcrumbs, Breadcrumbs,
Link as MaterialLink, Link as MaterialLink,
Grid, Grid,
IconButton, IconButton,
} from '@mui/material'; } from "@mui/material";
import { useTheme } from '@mui/material/styles'; import { useTheme } from "@mui/material/styles";
import ThreeSixtyOutlinedIcon from '@mui/icons-material/ThreeSixtyOutlined'; import ThreeSixtyOutlinedIcon from "@mui/icons-material/ThreeSixtyOutlined";
import DarkModeToggle from 'layouts/common/darkModeToggle'; import DarkModeToggle from "layouts/common/darkModeToggle";
import HideOnScroll from 'layouts/common/hideOnScroll'; import HideOnScroll from "layouts/common/hideOnScroll";
const Header = () => { const Header = () => {
const theme = useTheme(); const theme = useTheme();
return ( return (
<> <>
<CssBaseline /> <CssBaseline />
<HideOnScroll> <HideOnScroll>
<AppBar <AppBar
position='fixed' position="fixed"
sx={{ sx={{
background: 'transparent', background: "transparent",
zIndex: 1301, zIndex: 1301,
[theme.breakpoints.down('lg')]: { [theme.breakpoints.down("lg")]: {
backgroundColor: theme.palette.background.default, backgroundColor: theme.palette.background.default,
}, },
}} }}
elevation={0}> elevation={0}
<Toolbar> >
<Grid container justifyContent='space-between' alignItems='center'> <Toolbar>
<Grid item> <Grid
<Breadcrumbs aria-label='breadcrumb'> container
<Typography sx={{
variant='h5' width: "100%",
sx={{ justifyContent: "space-between",
textTransform: 'uppercase', alignItems: "center",
letterSpacing: '.2rem', }}
}}> >
Dan Dobos <Grid item>
</Typography> <Breadcrumbs aria-label="breadcrumb">
<Typography
<MaterialLink variant="h5"
color='textPrimary' sx={{
href='#about' textTransform: "uppercase",
style={{ cursor: 'pointer' }}> letterSpacing: ".2rem",
About }}
</MaterialLink> >
</Breadcrumbs> Dan Dobos
</Grid> </Typography>
<Grid item> {/*href="#about" is used to navigate within the page */}
<Grid container alignItems='center'> <MaterialLink
<Link to='/projects'> color="textPrimary"
<IconButton disableRipple sx={{ mr: 1 }}> href="#about"
<ThreeSixtyOutlinedIcon /> sx={{ cursor: "pointer" }}
</IconButton> >
</Link> About
<DarkModeToggle /> </MaterialLink>
</Grid> </Breadcrumbs>
</Grid> </Grid>
</Grid> <Grid item>
</Toolbar> <Grid container alignItems="center">
</AppBar> <Link to="/projects">
</HideOnScroll> <IconButton
</> aria-label="Projects"
); disableRipple
sx={{ mr: 1 }}
>
<ThreeSixtyOutlinedIcon />
</IconButton>
</Link>
<DarkModeToggle />
</Grid>
</Grid>
</Grid>
</Toolbar>
</AppBar>
</HideOnScroll>
</>
);
}; };
export default Header; export default Header;
@@ -1 +1 @@
export { default } from './Header'; export { default } from "./Header";
+1 -1
View File
@@ -1 +1 @@
export {default} from './LandingLayout.jsx' export { default } from "./LandingLayout.jsx";
+17 -17
View File
@@ -1,24 +1,24 @@
import React from 'react'; import React from "react";
import Header from './components/header'; import Header from "./components/header";
import Footer from './components/footer'; import Footer from "./components/footer";
import FullScreenContainer from 'layouts/common/fullScreenContainer'; import FullScreenContainer from "layouts/common/fullScreenContainer";
import BackToTop from '../common/backToTop'; import BackToTop from "../common/backToTop";
const MainLayout = (props) => { const MainLayout = (props) => {
const { children } = props; const { children } = props;
return ( return (
<> <>
<div id='back-to-top-anchor' /> <div id="back-to-top-anchor" />
<Header /> <Header />
<FullScreenContainer> <FullScreenContainer>
{children} {children}
<BackToTop /> <BackToTop />
</FullScreenContainer> </FullScreenContainer>
<Footer /> <Footer />
</> </>
); );
}; };
export default MainLayout; export default MainLayout;
+26 -24
View File
@@ -1,30 +1,32 @@
import React from 'react'; import React from "react";
import { Grid, Typography } from '@mui/material'; import { Grid, Typography } from "@mui/material";
const Footer = () => { const Footer = () => {
const getCurrentYear = () => { const getCurrentYear = () => {
return new Date().getFullYear(); return new Date().getFullYear();
}; };
return ( return (
<Grid <Grid
container container
sx={{ sx={{
marginTop: 'auto', marginTop: "auto",
zIndex: 1300, zIndex: 1300,
minHeight: '24px', minHeight: "24px",
}} }}
justifyContent='center'> justifyContent="center"
<Grid item> >
<Typography <Grid item>
inline='true' <Typography
variant='body1' inline="true"
fontFamily='Nanum Gothic Coding'> variant="body1"
Dan Dobos &copy; {getCurrentYear()} fontFamily="Nanum Gothic Coding"
</Typography> >
</Grid> Dan Dobos &copy; {getCurrentYear()}
</Grid> </Typography>
); </Grid>
</Grid>
);
}; };
export default Footer; export default Footer;
+1 -1
View File
@@ -1 +1 @@
export { default } from './Footer'; export { default } from "./Footer";
+20 -20
View File
@@ -1,26 +1,26 @@
import React from 'react'; import React from "react";
import { AppBar, Toolbar, CssBaseline, Box } from '@mui/material'; import { AppBar, Toolbar, CssBaseline, Box } from "@mui/material";
import DarkModeToggle from 'layouts/common/darkModeToggle'; import DarkModeToggle from "layouts/common/darkModeToggle";
import HideOnScroll from 'layouts/common/hideOnScroll'; import HideOnScroll from "layouts/common/hideOnScroll";
import Navigation from './navigation'; import Navigation from "./navigation";
const Header = () => { const Header = () => {
return ( return (
<> <>
<CssBaseline /> <CssBaseline />
<HideOnScroll> <HideOnScroll>
<AppBar sx={{ position: 'fixed', zIndex: 1301 }} elevation={0}> <AppBar sx={{ position: "fixed", zIndex: 1301 }} elevation={0}>
<Toolbar> <Toolbar>
<Navigation /> <Navigation />
<Box sx={{ display: { sm: 'block', xs: 'none' } }}> <Box sx={{ display: { sm: "block", xs: "none" } }}>
<DarkModeToggle /> <DarkModeToggle />
</Box> </Box>
</Toolbar> </Toolbar>
</AppBar> </AppBar>
</HideOnScroll> </HideOnScroll>
</> </>
); );
}; };
export default Header; export default Header;
+1 -1
View File
@@ -1 +1 @@
export { default } from './Header'; export { default } from "./Header";
@@ -1,199 +1,206 @@
import React, { useState, useEffect, createRef, useMemo, useRef } from 'react'; import React, { useState, useEffect, createRef, useMemo, useRef } from "react";
import { Link } from 'react-router-dom'; import { Link } from "react-router-dom";
import { import {
Container, Container,
Tabs, Tabs,
Tab, Tab,
useMediaQuery, useMediaQuery,
IconButton, IconButton,
SwipeableDrawer, SwipeableDrawer,
Paper, Paper,
ListItem, ListItem,
ListItemText, ListItemText,
List, List,
} from '@mui/material'; } from "@mui/material";
import { useTheme } from '@mui/material/styles'; import { useTheme } from "@mui/material/styles";
import MenuIcon from '@mui/icons-material/Menu'; import MenuIcon from "@mui/icons-material/Menu";
import MenuOpenIcon from '@mui/icons-material/MenuOpen'; import MenuOpenIcon from "@mui/icons-material/MenuOpen";
import DarkModeToggle from 'layouts/common/darkModeToggle'; import DarkModeToggle from "layouts/common/darkModeToggle";
const Navigation = () => { const Navigation = () => {
const theme = useTheme(); const theme = useTheme();
const matches = useMediaQuery(theme.breakpoints.down('sm')); const matches = useMediaQuery(theme.breakpoints.down("sm"));
const iOS = const iOS =
typeof navigator !== 'undefined' && typeof navigator !== "undefined" &&
/iPad|iPhone|iPod/.test(navigator.userAgent); /iPad|iPhone|iPod/.test(navigator.userAgent);
const [value, setValue] = useState(1); const [value, setValue] = useState(1);
const [openDrawer, setOpenDrawer] = useState(false); const [openDrawer, setOpenDrawer] = useState(false);
const tabsActions = useRef(null); const tabsActions = useRef(null);
const wrapper = createRef(); const wrapper = createRef();
const handleTabsChange = (e, newValue) => { const handleTabsChange = (e, newValue) => {
setValue(newValue); setValue(newValue);
}; };
const handleDrawerClose = () => { const handleDrawerClose = () => {
setTimeout(() => { setTimeout(() => {
setOpenDrawer(false); setOpenDrawer(false);
}, 100); }, 100);
}; };
const routes = useMemo( const routes = useMemo(
() => [ () => [
{ {
name: 'Home', name: "Home",
link: '/', link: "/",
activeIndex: 0, activeIndex: 0,
}, },
{ {
name: 'Projects', name: "Projects",
link: '/projects', link: "/projects",
activeIndex: 1, activeIndex: 1,
}, },
{ {
name: 'Best Practices', name: "Best Practices",
link: '/best-practices', link: "/best-practices",
activeIndex: 2, activeIndex: 2,
}, },
{ {
name: 'Blog', name: "Blog",
link: '/blog', link: "/blog",
activeIndex: 3, activeIndex: 3,
}, },
{ {
name: 'About', name: "About",
link: '/about', link: "/about",
activeIndex: 4, activeIndex: 4,
}, },
], ],
[] [],
); );
useEffect(() => { useEffect(() => {
routes.forEach((route) => { routes.forEach((route) => {
switch (window.location.pathname) { switch (window.location.pathname) {
case `${route.link}`: case `${route.link}`:
if (value !== route.activeIndex) { if (value !== route.activeIndex) {
setValue(route.activeIndex); setValue(route.activeIndex);
} }
break; break;
default: default:
return false; return false;
} }
}); });
}, [value, routes]); }, [value, routes]);
return ( return (
<Container ref={wrapper}> <Container ref={wrapper}>
<Paper <Paper
elevation={0} elevation={0}
sx={{ sx={{
display: { sm: 'none', xs: 'flex' }, display: { sm: "none", xs: "flex" },
justifyContent: 'space-between', justifyContent: "space-between",
alignItems: 'center', alignItems: "center",
backgroundColor: 'inherit', backgroundColor: "inherit",
color: theme.palette.secondary.contrastText, color: theme.palette.secondary.contrastText,
boxShadow: 'none', boxShadow: "none",
}}> }}
<IconButton >
size='large' <IconButton
onClick={() => setOpenDrawer(!openDrawer)} size="large"
color='inherit'> onClick={() => setOpenDrawer(!openDrawer)}
{openDrawer ? ( color="inherit"
<MenuOpenIcon fontSize='inherit' /> >
) : ( {openDrawer ? (
<MenuIcon fontSize='inherit' /> <MenuOpenIcon fontSize="inherit" />
)} ) : (
</IconButton> <MenuIcon fontSize="inherit" />
<DarkModeToggle style={{ alignSelf: 'right', color: 'inherit' }} /> )}
</Paper> </IconButton>
<DarkModeToggle style={{ alignSelf: "right", color: "inherit" }} />
</Paper>
{matches ? ( {matches ? (
<SwipeableDrawer <SwipeableDrawer
disableBackdropTransition={!iOS} disableBackdropTransition={!iOS}
disableDiscovery={iOS} disableDiscovery={iOS}
disableSwipeToOpen={false} disableSwipeToOpen={false}
open={openDrawer} open={openDrawer}
onOpen={() => setOpenDrawer(true)} onOpen={() => setOpenDrawer(true)}
onClose={() => setOpenDrawer(false)} onClose={() => setOpenDrawer(false)}
sx={{ sx={{
backgroundColor: 'transparent', backgroundColor: "transparent",
}}> }}
<List sx={{ paddingTop: '4rem' }}> >
{routes.map((route) => ( <List sx={{ paddingTop: "4rem" }}>
<ListItem {routes.map((route) => (
sx={{ <ListItem
padding: '1.5rem 2rem ', sx={{
color: theme.palette.text.secondary, padding: "1.5rem 2rem ",
width: '100%', color: theme.palette.text.secondary,
'&.Mui-selected': { width: "100%",
backgroundColor: theme.palette.background.paper, "&.Mui-selected": {
}, backgroundColor: theme.palette.background.paper,
}} },
key={`${route}${route.activeIndex}`} }}
button key={`${route}${route.activeIndex}`}
component={Link} button
to={route.link} component={Link}
value={route.activeIndex} to={route.link}
selected={value === route.activeIndex} value={route.activeIndex}
onClick={() => { selected={value === route.activeIndex}
setValue(route.activeIndex); onClick={() => {
setValue(route.activeIndex);
handleDrawerClose(); handleDrawerClose();
}}> }}
<ListItemText >
disableTypography <ListItemText
sx={{ disableTypography
alignItems: 'flex-start', sx={{
fontSize: '1.2rem', alignItems: "flex-start",
textTransform: 'capitalize', fontSize: "1.2rem",
}}> textTransform: "capitalize",
{route.name} }}
</ListItemText> >
</ListItem> {route.name}
))} </ListItemText>
</List> </ListItem>
</SwipeableDrawer> ))}
) : ( </List>
<Paper </SwipeableDrawer>
elevation={0} ) : (
sx={{ <Paper
display: { sm: 'block', xs: 'none' }, elevation={0}
}}> sx={{
<Tabs display: { sm: "block", xs: "none" },
action={tabsActions} }}
value={value} >
onChange={handleTabsChange} <Tabs
centered action={tabsActions}
TabIndicatorProps={{ value={value}
style: { onChange={handleTabsChange}
background: theme.palette.secondary.contrastText, centered
height: '3px', TabIndicatorProps={{
}, style: {
}}> background: theme.palette.secondary.contrastText,
{routes.map((route) => ( height: "3px",
<Tab },
disableRipple }}
key={`${route.activeIndex}`} >
label={route.name} {routes.map((route) => (
component={Link} <Tab
to={route.link} disableRipple
sx={{ key={`${route.activeIndex}`}
fontSize: '1.2rem', label={route.name}
'&.Mui-selected': { component={Link}
color: theme.palette.secondary.contrastText, to={route.link}
}, sx={{
}} fontSize: "1.2rem",
/> "&.Mui-selected": {
))} color: theme.palette.secondary.contrastText,
</Tabs> },
</Paper> }}
)} />
</Container> ))}
); </Tabs>
</Paper>
)}
</Container>
);
}; };
export default Navigation; export default Navigation;
@@ -1 +1 @@
export { default } from './Navigation'; export { default } from "./Navigation";
+1 -1
View File
@@ -1 +1 @@
export { default } from './MainLayout'; export { default } from "./MainLayout";
+75 -70
View File
@@ -1,77 +1,82 @@
import React from 'react'; import React from "react";
import { Container, Grid, Typography, Link } from '@mui/material'; import { Container, Grid, Typography, Link } from "@mui/material";
import { useTheme } from '@mui/material/styles'; import { useTheme } from "@mui/material/styles";
const About = () => { const About = () => {
const theme = useTheme(); const theme = useTheme();
return ( return (
<Container id='about'> <Container id="about">
<Grid <Grid
container container
direction='row' direction="row"
alignItems='stretch' alignItems="stretch"
justifyContent='flex-end'> justifyContent="flex-end"
<div >
style={{ <div
minHeight: '70vh', style={{
display: 'flex', minHeight: "70vh",
alignItems: 'flex-end', display: "flex",
}}> alignItems: "flex-end",
<Grid }}
container >
direction='column' <Grid
alignItems='flex-end' container
justifyContent='flex-end' direction="column"
spacing={3}> alignItems="flex-end"
<Grid item> justifyContent="flex-end"
<Typography variant='h4' align='right' inline='true'> spacing={3}
Software Developer >
</Typography> <Grid item>
</Grid> <Typography variant="h4" align="right" inline="true">
<Grid item> Software Developer
<Typography </Typography>
variant='h1' </Grid>
gutterBottom <Grid item>
inline='true' <Typography
sx={{ variant="h1"
fontFamily: 'Chilanka', gutterBottom
textTransform: 'uppercase', inline="true"
letterSpacing: '2rem', sx={{
textAlign: 'left', fontFamily: "Chilanka",
[theme.breakpoints.down('md')]: { textTransform: "uppercase",
textAlign: 'right', letterSpacing: "2rem",
letterSpacing: '1rem', textAlign: "left",
}, [theme.breakpoints.down("md")]: {
}}> textAlign: "right",
Dan Dobos letterSpacing: "1rem",
</Typography> },
</Grid> }}
>
Dan Dobos
</Typography>
</Grid>
<Grid item> <Grid item>
<Typography align='right' inline='true' variant='h6'> <Typography align="right" inline="true" variant="h6">
Characterized by the desire of understanding and implementing Characterized by the desire of understanding and implementing
technological innovations. technological innovations.
</Typography> </Typography>
</Grid> </Grid>
<Grid item> <Grid item>
<Typography align='right' inline='true'> <Typography align="right" inline="true">
Contact Contact
</Typography> </Typography>
<Link <Link
variant='h6' variant="h6"
href='mailto:danandreidobos@gmail.com' href="mailto:danandreidobos@gmail.com"
target='_blank' target="_blank"
color='inherit'> color="inherit"
danandreidobos@gmail.com >
</Link> danandreidobos@gmail.com
</Grid> </Link>
</Grid> </Grid>
</div> </Grid>
</Grid> </div>
</Container> </Grid>
); </Container>
);
}; };
export default About; export default About;
+1 -1
View File
@@ -1 +1 @@
export { default } from './About'; export { default } from "./About";
+4 -4
View File
@@ -1,9 +1,9 @@
import React from 'react'; import React from "react";
import { CSSData } from 'data/Data'; import { CSSData } from "data/Data";
import MainAccordion from 'components/main-accordion/MainAccordion'; import MainAccordion from "components/main-accordion/MainAccordion";
const BestPractices = () => { const BestPractices = () => {
return (<MainAccordion items={CSSData} title='CSS Only' />); return <MainAccordion items={CSSData} title="CSS Only" />;
}; };
export default BestPractices; export default BestPractices;
+1 -1
View File
@@ -1 +1 @@
export {default} from './BestPractices' export { default } from "./BestPractices";
+9 -13
View File
@@ -1,20 +1,16 @@
import React from 'react'; import React from "react";
import { BlogContent } from 'data/Data'; import { BlogContent } from "data/Data";
import BlogAccordion from 'components/blog-accordion/BlogAccordion';
import BlogAccordion from "components/blog-accordion/BlogAccordion";
const Blog = () => { const Blog = () => {
return ( return (
// <div style={{ minHeight: 'calc(100vh-128px)' }}>Blog ...in progress</div> // <div style={{ minHeight: 'calc(100vh-128px)' }}>Blog ...in progress</div>
<> <>
<BlogAccordion blogContent={BlogContent} /> <BlogAccordion blogContent={BlogContent} />
</>
</> );
);
}; };
export default Blog; export default Blog;
+1 -1
View File
@@ -1 +1 @@
export {default} from './Blog' export { default } from "./Blog";
+42 -42
View File
@@ -1,50 +1,50 @@
import React from 'react'; import React from "react";
import { Grid, Typography, Divider } from '@mui/material'; import { Grid, Typography, Divider } from "@mui/material";
import About from '../about'; import About from "../about";
import Blog from '../blog'; import Blog from "../blog";
import BestPractices from '../best-practices'; import BestPractices from "../best-practices";
import Projects from '../projects'; import Projects from "../projects";
const Home = () => { const Home = () => {
return ( return (
<Grid container direction='row' alignItems='stretch' spacing={3}> <Grid container direction="row" alignItems="stretch" spacing={3}>
<Grid item container direction='column'> <Grid item container direction="column">
<Grid item> <Grid item>
<Typography variant='h3'>Projects</Typography> <Typography variant="h3">Projects</Typography>
<Divider variant='inset' /> <Divider variant="inset" />
</Grid> </Grid>
<Grid item> <Grid item>
<Projects /> <Projects />
</Grid> </Grid>
</Grid> </Grid>
<Grid item container direction='column'> <Grid item container direction="column">
<Grid item> <Grid item>
<Typography variant='h3'>Best Practices</Typography> <Typography variant="h3">Best Practices</Typography>
<Divider variant='inset' /> <Divider variant="inset" />
</Grid> </Grid>
<Grid item> <Grid item>
<BestPractices /> <BestPractices />
</Grid> </Grid>
</Grid> </Grid>
<Grid item container direction='column'> <Grid item container direction="column">
<Grid item> <Grid item>
<Typography variant='h3'>Blog</Typography> <Typography variant="h3">Blog</Typography>
<Divider variant='inset' /> <Divider variant="inset" />
</Grid> </Grid>
<Grid item> <Grid item>
<Blog /> <Blog />
</Grid> </Grid>
</Grid> </Grid>
<Grid item container justifyContent='flex-end'> <Grid item container justifyContent="flex-end">
<Grid item> <Grid item>
<About /> <About />
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>
); );
}; };
export default Home; export default Home;
+1 -1
View File
@@ -1 +1 @@
export { default } from './Landing'; export { default } from "./Landing";
+19 -19
View File
@@ -1,25 +1,25 @@
import React from 'react'; import React from "react";
import { import {
// AngularData, // AngularData,
ReactData, ReactData,
WebsitesData, WebsitesData,
VueData, VueData,
GoData, GoData,
JavaData, JavaData,
} from 'data/Data'; } from "data/Data";
import MainAccordion from 'components/main-accordion/MainAccordion'; import MainAccordion from "components/main-accordion/MainAccordion";
const Projects = () => { const Projects = () => {
return ( return (
<> <>
{/* <MainAccordion items={AngularData} title='Angular' /> */} {/* <MainAccordion items={AngularData} title='Angular' /> */}
<MainAccordion items={ReactData} title='React' /> <MainAccordion items={ReactData} title="React" />
<MainAccordion items={WebsitesData} title='HTML' /> <MainAccordion items={WebsitesData} title="HTML" />
<MainAccordion items={VueData} title='Vue' /> <MainAccordion items={VueData} title="Vue" />
<MainAccordion items={GoData} title='Golang' /> <MainAccordion items={GoData} title="Golang" />
<MainAccordion items={JavaData} title='Java' /> <MainAccordion items={JavaData} title="Java" />
</> </>
); );
}; };
export default Projects; export default Projects;
+1 -1
View File
@@ -1 +1 @@
export {default} from './Projects' export { default } from "./Projects";
+2 -2
View File
@@ -1,6 +1,6 @@
const reportWebVitals = onPerfEntry => { const reportWebVitals = (onPerfEntry) => {
if (onPerfEntry && onPerfEntry instanceof Function) { if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry); getCLS(onPerfEntry);
getFID(onPerfEntry); getFID(onPerfEntry);
getFCP(onPerfEntry); getFCP(onPerfEntry);
+59 -59
View File
@@ -1,70 +1,70 @@
import React, { Suspense, lazy } from 'react'; import React, { Suspense, lazy } from "react";
import { Routes, Route } from 'react-router-dom'; import { Routes, Route } from "react-router-dom";
import CircularProgress from '@mui/material/CircularProgress'; import CircularProgress from "@mui/material/CircularProgress";
import ErrorBoundary from './components/errorBoundary'; import ErrorBoundary from "./components/errorBoundary";
import MainLayout from '../layouts/main'; import MainLayout from "../layouts/main";
import LandingLayout from '../layouts/landing'; import LandingLayout from "../layouts/landing";
const Home = lazy(() => import('../pages/landing')); const Home = lazy(() => import("../pages/landing"));
const About = lazy(() => import('../pages/about')); const About = lazy(() => import("../pages/about"));
const Projects = lazy(() => import('../pages/projects')); const Projects = lazy(() => import("../pages/projects"));
const Blog = lazy(() => import('../pages/blog')); const Blog = lazy(() => import("../pages/blog"));
const BestPractices = lazy(() => import('../pages/best-practices')); const BestPractices = lazy(() => import("../pages/best-practices"));
export const CustomRoutes = () => { export const CustomRoutes = () => {
return ( return (
<Suspense fallback={<CircularProgress color='secondary' />}> <Suspense fallback={<CircularProgress color="secondary" />}>
<ErrorBoundary> <ErrorBoundary>
<Routes> <Routes>
<Route <Route
path='/' path="/"
element={ element={
<LandingLayout> <LandingLayout>
<Home /> <Home />
</LandingLayout> </LandingLayout>
} }
/> />
<Route <Route
path='about' path="about"
element={ element={
<MainLayout> <MainLayout>
<About /> <About />
</MainLayout> </MainLayout>
} }
/> />
<Route <Route
path='projects' path="projects"
element={ element={
<MainLayout> <MainLayout>
<Projects /> <Projects />
</MainLayout> </MainLayout>
} }
/> />
<Route <Route
path='blog' path="blog"
element={ element={
<MainLayout> <MainLayout>
<Blog /> <Blog />
</MainLayout> </MainLayout>
} }
/> />
<Route <Route
path='best-practices' path="best-practices"
element={ element={
<MainLayout> <MainLayout>
<BestPractices /> <BestPractices />
</MainLayout> </MainLayout>
} }
/> />
</Routes> </Routes>
</ErrorBoundary> </ErrorBoundary>
</Suspense> </Suspense>
); );
}; };
// export default CustomRoutes; // export default CustomRoutes;
+1 -1
View File
@@ -1 +1 @@
export {default} from './CustomRoute' export { default } from "./CustomRoute";
@@ -1,37 +1,37 @@
import React, { Component } from 'react'; import React, { Component } from "react";
class ErrorBoundary extends Component { class ErrorBoundary extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { error: null, errorInfo: null }; this.state = { error: null, errorInfo: null };
} }
componentDidCatch(error, errorInfo) { componentDidCatch(error, errorInfo) {
// Catch errors in any components below and re-render with error message // Catch errors in any components below and re-render with error message
this.setState({ this.setState({
error: error, error: error,
errorInfo: errorInfo, errorInfo: errorInfo,
}); });
// You can also log error messages to an error reporting service here // You can also log error messages to an error reporting service here
} }
render() { render() {
if (this.state.errorInfo) { if (this.state.errorInfo) {
// Error path // Error path
return ( return (
<div> <div>
<h2>Something went wrong.</h2> <h2>Something went wrong.</h2>
<details sx={{ whiteSpace: 'pre-wrap' }}> <details sx={{ whiteSpace: "pre-wrap" }}>
{this.state.error && this.state.error.toString()} {this.state.error && this.state.error.toString()}
<br /> <br />
{this.state.errorInfo.componentStack} {this.state.errorInfo.componentStack}
</details> </details>
</div> </div>
); );
} }
// Normally, just render children // Normally, just render children
return this.props.children; return this.props.children;
} }
} }
export default ErrorBoundary; export default ErrorBoundary;
+1 -1
View File
@@ -1 +1 @@
export {default} from './ErrorBoundary' export { default } from "./ErrorBoundary";
+1 -1
View File
@@ -2,4 +2,4 @@
// allows you to do things like: // allows you to do things like:
// expect(element).toHaveTextContent(/react/i) // expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom // learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom'; import "@testing-library/jest-dom";
+57 -57
View File
@@ -1,58 +1,58 @@
export const AcidGreen = '#BDBF09'; export const AcidGreen = "#BDBF09";
export const AntiqueFuchsia = '#875C74'; export const AntiqueFuchsia = "#875C74";
export const Black = '#000000'; export const Black = "#000000";
export const BlueGreen = '#004d40'; export const BlueGreen = "#004d40";
export const BrandyPunch = '#ce8f28'; export const BrandyPunch = "#ce8f28";
export const BrownSugar = '#B4654A'; export const BrownSugar = "#B4654A";
export const Cadet = '#5A7881'; export const Cadet = "#5A7881";
export const Capri = '#5CC8FF'; export const Capri = "#5CC8FF";
export const Celeste = '#CDFFF9'; export const Celeste = "#CDFFF9";
export const Cerise = '#D1345B'; export const Cerise = "#D1345B";
export const Charcoal = '#37474f'; export const Charcoal = "#37474f";
export const ChartreuseTraditional = '#E4FF1A'; export const ChartreuseTraditional = "#E4FF1A";
export const Citron = '#9EA93F'; export const Citron = "#9EA93F";
export const Cultured = '#eceff1'; export const Cultured = "#eceff1";
export const DarkOrange = '#FF8811'; export const DarkOrange = "#FF8811";
export const DarkPurple = '#0F0326'; export const DarkPurple = "#0F0326";
export const DeepSpaceSparkle = '#335C67'; export const DeepSpaceSparkle = "#335C67";
export const Eggplant = '#75485E'; export const Eggplant = "#75485E";
export const EnglishVermillion = '#D64045'; export const EnglishVermillion = "#D64045";
export const Flame = '#cf5c36'; export const Flame = "#cf5c36";
export const FruitSalad = '#509f60'; export const FruitSalad = "#509f60";
export const GrannySmithApple = '#ADF6B1'; export const GrannySmithApple = "#ADF6B1";
export const Grullo = '#A69888'; export const Grullo = "#A69888";
export const IlluminatingEmerald = '#3E9276'; export const IlluminatingEmerald = "#3E9276";
export const ImperialRed = '#EF233C'; export const ImperialRed = "#EF233C";
export const InternationalGoldenGateBridge = '#BB4430'; export const InternationalGoldenGateBridge = "#BB4430";
export const Magnolia = '#F3EFF5'; export const Magnolia = "#F3EFF5";
export const MaizeCrayola = '#E8C547'; export const MaizeCrayola = "#E8C547";
export const Mango = '#F7B801'; export const Mango = "#F7B801";
export const MangoTango = '#F5853F'; export const MangoTango = "#F5853F";
export const MaximumBlue = '#42BFDD'; export const MaximumBlue = "#42BFDD";
export const MiddleRedPurple = '#AF5D63'; export const MiddleRedPurple = "#AF5D63";
export const OuterSpaceCrayola = '#22363C'; export const OuterSpaceCrayola = "#22363C";
export const PersianGreen = '#009688'; export const PersianGreen = "#009688";
export const Platinum = '#E5E5E5'; export const Platinum = "#E5E5E5";
export const Pomegranate = '#f44336'; export const Pomegranate = "#f44336";
export const RedRYB = '#FF220C'; export const RedRYB = "#FF220C";
export const Rosewood = '#5E0B15'; export const Rosewood = "#5E0B15";
export const Ruby = '#D81E5B'; export const Ruby = "#D81E5B";
export const RubyRed = '#A31621'; export const RubyRed = "#A31621";
export const RussianGreen = '#678D58'; export const RussianGreen = "#678D58";
export const Safron = '#EAC435'; export const Safron = "#EAC435";
export const SeaGreenCrayola = '#0FFFC1'; export const SeaGreenCrayola = "#0FFFC1";
export const SlimyGreen = '#2B9720'; export const SlimyGreen = "#2B9720";
export const SpanishGreen = '#058E3F'; export const SpanishGreen = "#058E3F";
export const Spectra = '#315460'; export const Spectra = "#315460";
export const TeaGreen = '#CAE7B9'; export const TeaGreen = "#CAE7B9";
export const TucanRed = '#754043'; export const TucanRed = "#754043";
export const TumbleWeed = '#CEA07E'; export const TumbleWeed = "#CEA07E";
export const TwilightLavander = '#754668'; export const TwilightLavander = "#754668";
export const UARed = '#E01A4F'; export const UARed = "#E01A4F";
export const VioletColorWheel = '#7E0FFF'; export const VioletColorWheel = "#7E0FFF";
export const White = '#ffffff'; export const White = "#ffffff";
export const WildBlueYonder = '#99B2DD'; export const WildBlueYonder = "#99B2DD";
export const DavysGray = '#565656'; export const DavysGray = "#565656";
export const Periwinkle = '#B7B5E4'; export const Periwinkle = "#B7B5E4";
//The Pantone Color of the Year 2025, PANTONE 17-1230 Mocha Mousse aka Chamoisee //The Pantone Color of the Year 2025, PANTONE 17-1230 Mocha Mousse aka Chamoisee
export const Chamoisee = '#A47864'; export const Chamoisee = "#A47864";
+75 -78
View File
@@ -1,88 +1,85 @@
import { createTheme, responsiveFontSizes } from '@mui/material/styles'; import { createTheme, responsiveFontSizes } from "@mui/material/styles";
import overrides from './overrides'; import overrides from "./overrides";
import { import {
AcidGreen, AcidGreen,
SeaGreenCrayola, SeaGreenCrayola,
UARed, UARed,
VioletColorWheel, VioletColorWheel,
DavysGray, DavysGray,
Chamoisee, Chamoisee,
White, White,
} from './Colors'; } from "./Colors";
// Main layout // Main layout
export const MainTheme = (mode) => ({ export const MainTheme = (mode) => ({
palette: { palette: {
mode, mode,
...(mode === 'light' ...(mode === "light"
? { ? {
// palette values for light mode // palette values for light mode
primary: {
main: Chamoisee,
contrastText: White,
},
secondary: {
main: UARed,
contrastText: White,
},
divider: Chamoisee,
background: {
default: Chamoisee,
paper: Chamoisee,
},
text: {
primary: White,
secondary: White,
},
}
: {
// palette values for dark mode
primary: {
main: DavysGray,
contrastText: AcidGreen,
},
secondary: {
main: UARed,
contrastText: AcidGreen,
},
divider: AcidGreen,
background: {
default: DavysGray,
paper: DavysGray,
},
text: {
primary: AcidGreen,
secondary: AcidGreen,
},
}), primary: {
lightAccent: { main: VioletColorWheel }, main: Chamoisee,
darkAccent: { main: SeaGreenCrayola }, contrastText: White,
contrastThreshold: 3, },
tonalOffset: 0.2, secondary: {
}, main: UARed,
components: { contrastText: White,
...overrides, },
}, divider: Chamoisee,
background: {
default: Chamoisee,
paper: Chamoisee,
},
text: {
primary: White,
secondary: White,
},
}
: {
// palette values for dark mode
primary: {
main: DavysGray,
contrastText: AcidGreen,
},
secondary: {
main: UARed,
contrastText: AcidGreen,
},
divider: AcidGreen,
background: {
default: DavysGray,
paper: DavysGray,
},
text: {
primary: AcidGreen,
secondary: AcidGreen,
},
}),
lightAccent: { main: VioletColorWheel },
darkAccent: { main: SeaGreenCrayola },
contrastThreshold: 3,
tonalOffset: 0.2,
},
components: {
...overrides,
},
}); });
// Landing page // Landing page
export const LandingWhite = (theme) => export const LandingWhite = (theme) =>
responsiveFontSizes( responsiveFontSizes(
createTheme({ createTheme({
typography: { typography: {
fontFamily: 'Yeon Sung', fontFamily: "Yeon Sung",
transform: 'matrix(1, 0, 0, 1, 0, 0)', transform: "matrix(1, 0, 0, 1, 0, 0)",
}, },
palette: { palette: {
mode: theme.palette.mode, mode: theme.palette.mode,
}, },
components: { components: {
...overrides, ...overrides,
}, },
}) }),
); );
+35 -35
View File
@@ -1,39 +1,39 @@
import { Pomegranate, BrandyPunch, White, Spectra, FruitSalad } from '../Theme'; import { Pomegranate, BrandyPunch, White, Spectra, FruitSalad } from "../Theme";
const MuiAlert = { const MuiAlert = {
root: { root: {
fontSize: '16px', fontSize: "16px",
borderRadius: 0, borderRadius: 0,
}, },
standardError: { standardError: {
color: White, color: White,
fontWeight: 300, fontWeight: 300,
backgroundColor: Pomegranate, backgroundColor: Pomegranate,
}, },
standardWarning: { standardWarning: {
color: White, color: White,
fontWeight: 300, fontWeight: 300,
backgroundColor: BrandyPunch, backgroundColor: BrandyPunch,
}, },
standardInfo: { standardInfo: {
color: White, color: White,
fontWeight: 300, fontWeight: 300,
backgroundColor: Spectra, backgroundColor: Spectra,
}, },
standardSuccess: { standardSuccess: {
color: White, color: White,
fontWeight: 300, fontWeight: 300,
backgroundColor: FruitSalad, backgroundColor: FruitSalad,
}, },
icon: { icon: {
display: 'flex', display: "flex",
opacity: 1, opacity: 1,
fontsize: '16px', fontsize: "16px",
marginLeft: '3rem', marginLeft: "3rem",
marginRight: '1rem', marginRight: "1rem",
}, },
message: { message: {
padding: '16px 0 8px 0', padding: "16px 0 8px 0",
}, },
}; };
export default MuiAlert; export default MuiAlert;
+4 -4
View File
@@ -1,8 +1,8 @@
const MuiButtonBase = { const MuiButtonBase = {
defaultProps: { defaultProps: {
// The props to change the default for. // The props to change the default for.
disableRipple: true, // No more ripple, on the whole application 💣! disableRipple: true, // No more ripple, on the whole application 💣!
}, },
}; };
export default MuiButtonBase; export default MuiButtonBase;
+11 -11
View File
@@ -1,15 +1,15 @@
const MuiCard = { const MuiCard = {
styleOverrides: { styleOverrides: {
root: { root: {
// maxWidth: '420px', // maxWidth: '420px',
// marginLeft: 'auto', // marginLeft: 'auto',
// marginRight: 'auto', // marginRight: 'auto',
// '&:hover': { // '&:hover': {
// transition: 'all .7s ease', // transition: 'all .7s ease',
// boxShadow: '1px 1px 20px 10px rgba(15,255,193,0.75)', // boxShadow: '1px 1px 20px 10px rgba(15,255,193,0.75)',
// }, // },
}, },
}, },
}; };
export default MuiCard; export default MuiCard;
+11 -11
View File
@@ -1,15 +1,15 @@
const MuiCardActionArea = { const MuiCardActionArea = {
styleOverrides: { styleOverrides: {
root: { root: {
'@media (min-width: 900px)': { "@media (min-width: 900px)": {
filter: 'grayscale(1);', filter: "grayscale(1);",
'&:hover': { "&:hover": {
filter: 'grayscale(0);', filter: "grayscale(0);",
transition: 'all .3s ease', transition: "all .3s ease",
}, },
}, },
}, },
}, },
}; };
export default MuiCardActionArea; export default MuiCardActionArea;
+8 -8
View File
@@ -1,12 +1,12 @@
import { Cultured, Charcoal } from '../Theme'; import { Cultured, Charcoal } from "../Theme";
const MuiInputBase = { const MuiInputBase = {
input: { input: {
height: '1.3rem', height: "1.3rem",
'&:disabled': { "&:disabled": {
background: Cultured, background: Cultured,
color: Charcoal, color: Charcoal,
}, },
}, },
}; };
export default MuiInputBase; export default MuiInputBase;
+9 -9
View File
@@ -1,13 +1,13 @@
import { RussianGreen } from '../Theme'; import { RussianGreen } from "../Theme";
const MuiMenuItem = { const MuiMenuItem = {
root: { root: {
// fontFamily: 'Poppins', // fontFamily: 'Poppins',
fontSize: '14px', fontSize: "14px",
lineHeight: '19px', lineHeight: "19px",
textAlign: 'left', textAlign: "left",
color: RussianGreen, color: RussianGreen,
padding: '.5rem', padding: ".5rem",
}, },
}; };
export default MuiMenuItem; export default MuiMenuItem;
+47 -47
View File
@@ -1,54 +1,54 @@
import { RussianGreen, Cultured, Charcoal, White, Platinum } from '../Theme'; import { RussianGreen, Cultured, Charcoal, White, Platinum } from "../Theme";
const MuiOutlinedInput = { const MuiOutlinedInput = {
root: { root: {
position: 'relative', position: "relative",
'&:hover:not($disabled):not($focused):not($error) $notchedOutline': { "&:hover:not($disabled):not($focused):not($error) $notchedOutline": {
border: `1px solid ${RussianGreen}`, border: `1px solid ${RussianGreen}`,
// Reset on touch devices, it doesn't add specificity // Reset on touch devices, it doesn't add specificity
'@media (hover: none)': { "@media (hover: none)": {
borderColor: RussianGreen, borderColor: RussianGreen,
}, },
}, },
// border focused // border focused
'&$focused $notchedOutline': { "&$focused $notchedOutline": {
borderColor: RussianGreen, borderColor: RussianGreen,
}, },
'&$disabled $notchedOutline': { "&$disabled $notchedOutline": {
background: Cultured, background: Cultured,
borderColor: Platinum, borderColor: Platinum,
opacity: 0.8, opacity: 0.8,
color: Charcoal, color: Charcoal,
}, },
}, },
//border before //border before
notchedOutline: { notchedOutline: {
borderColor: Cultured, borderColor: Cultured,
}, },
input: { input: {
background: White, background: White,
padding: '.5rem', padding: ".5rem",
borderRadius: '3px', borderRadius: "3px",
fontFamily: 'Poppins', fontFamily: "Poppins",
fontSize: ' 14px', fontSize: " 14px",
lineHeight: '19px', lineHeight: "19px",
color: Charcoal, color: Charcoal,
'&:disabled': { "&:disabled": {
background: Cultured, background: Cultured,
opacity: 0.8, opacity: 0.8,
color: Charcoal, color: Charcoal,
}, },
notchedOutline: { notchedOutline: {
border: 'transparent', border: "transparent",
}, },
}, },
multiline: { multiline: {
padding: '.5rem !important', padding: ".5rem !important",
border: '0px', border: "0px",
margin: 0, margin: 0,
}, },
}; };
export default MuiOutlinedInput; export default MuiOutlinedInput;
+56 -56
View File
@@ -1,63 +1,63 @@
import { BlueGreen, RussianGreen, Cultured, Charcoal, White } from '../Theme'; import { BlueGreen, RussianGreen, Cultured, Charcoal, White } from "../Theme";
const MuiSelect = { const MuiSelect = {
root: { root: {
background: White, background: White,
padding: '.5rem', padding: ".5rem",
borderRadius: '3px', borderRadius: "3px",
fontFamily: 'Poppins', fontFamily: "Poppins",
fontSize: '14px', fontSize: "14px",
lineHeight: '19px', lineHeight: "19px",
textAlign: 'left', textAlign: "left",
color: Charcoal, color: Charcoal,
border: `1px solid ${Cultured}`, border: `1px solid ${Cultured}`,
'&:focus': { "&:focus": {
borderRadius: '3px', borderRadius: "3px",
borderColor: 'transparent', borderColor: "transparent",
background: White, background: White,
}, },
}, },
select: { select: {
minWidth: '5.5rem', minWidth: "5.5rem",
borderRadius: '3px', borderRadius: "3px",
border: `1px solid ${RussianGreen}`, border: `1px solid ${RussianGreen}`,
fontSize: '16px', fontSize: "16px",
lineHeight: '19px', lineHeight: "19px",
'&:focus': { "&:focus": {
borderRadius: '3px', borderRadius: "3px",
borderColor: RussianGreen, borderColor: RussianGreen,
background: White, background: White,
}, },
}, },
selectMenu: { selectMenu: {
background: White, background: White,
color: RussianGreen, color: RussianGreen,
'&:notchedOutline': { "&:notchedOutline": {
borderColor: 'transparent !important', borderColor: "transparent !important",
}, },
}, },
outlined: { outlined: {
color: `${Charcoal} !important`, color: `${Charcoal} !important`,
borderColor: 'transparent', borderColor: "transparent",
fontSize: '14px', fontSize: "14px",
lineHeight: '19px', lineHeight: "19px",
'&:hover ': { "&:hover ": {
borderColor: 'transparent', borderColor: "transparent",
outline: 'none', outline: "none",
}, },
'&:focus': { "&:focus": {
background: White, background: White,
borderColor: 'transparent', borderColor: "transparent",
}, },
}, },
iconOutlined: { iconOutlined: {
color: BlueGreen, color: BlueGreen,
}, },
icon: { icon: {
color: RussianGreen, color: RussianGreen,
}, },
}; };
export default MuiSelect; export default MuiSelect;
+29 -29
View File
@@ -1,34 +1,34 @@
import { BlueGreen, Cultured, Charcoal } from '../Theme'; import { BlueGreen, Cultured, Charcoal } from "../Theme";
const MuiSwitch = { const MuiSwitch = {
root: { root: {
overflow: 'visible', overflow: "visible",
width: '4rem', width: "4rem",
}, },
switchBase: { switchBase: {
background: 'transparent', background: "transparent",
'&$checked': { "&$checked": {
transform: 'translateX(26px)', transform: "translateX(26px)",
'&$checked + $track': { "&$checked + $track": {
backgroundColor: Cultured, backgroundColor: Cultured,
border: 'none', border: "none",
boxShadow: 'none', boxShadow: "none",
width: 36, width: 36,
}, },
'& $thumb': { "& $thumb": {
backgroundColor: BlueGreen, backgroundColor: BlueGreen,
boxShadow: '0px 2px 5px rgba(0, 0, 0, 0.25)', boxShadow: "0px 2px 5px rgba(0, 0, 0, 0.25)",
}, },
}, },
}, },
thumb: { thumb: {
backgroundColor: Charcoal, backgroundColor: Charcoal,
boxShadow: '0px 2px 5px rgba(0, 0, 0, 0.25)', boxShadow: "0px 2px 5px rgba(0, 0, 0, 0.25)",
width: 20, width: 20,
height: 20, height: 20,
}, },
track: { backgroundColor: Cultured, width: 36 }, track: { backgroundColor: Cultured, width: 36 },
checked: {}, checked: {},
}; };
export default MuiSwitch; export default MuiSwitch;
+12 -12
View File
@@ -1,6 +1,6 @@
import MuiCard from './MuiCard'; import MuiCard from "./MuiCard";
import MuiCardActionArea from './MuiCardActionArea'; import MuiCardActionArea from "./MuiCardActionArea";
import MuiButtonBase from './MuiButtonBase'; import MuiButtonBase from "./MuiButtonBase";
// import MuiAlert from './MuiAlert'; // import MuiAlert from './MuiAlert';
// import MuiInputBase from './MuiInputBase'; // import MuiInputBase from './MuiInputBase';
// import MuiMenuItem from './MuiMenuItem'; // import MuiMenuItem from './MuiMenuItem';
@@ -10,13 +10,13 @@ import MuiButtonBase from './MuiButtonBase';
/* eslint import/no-anonymous-default-export: [2, {"allowObject": true}] */ /* eslint import/no-anonymous-default-export: [2, {"allowObject": true}] */
export default { export default {
MuiCard, MuiCard,
MuiCardActionArea, MuiCardActionArea,
MuiButtonBase, MuiButtonBase,
// MuiAlert, // MuiAlert,
// MuiInputBase, // MuiInputBase,
// MuiMenuItem, // MuiMenuItem,
// MuiOutlinedInput, // MuiOutlinedInput,
// MuiSelect, // MuiSelect,
// MuiSwitch, // MuiSwitch,
}; };