-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4c4a0f6
commit 2e9abd0
Showing
11 changed files
with
3,019 additions
and
217 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"extends": "next/core-web-vitals" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,4 +27,4 @@ yarn-error.log* | |
.env.local | ||
.env.development.local | ||
.env.test.local | ||
.env.production.local | ||
.env.production.local |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
import * as React from "react"; | ||
import { styled } from "@mui/system"; | ||
import TabsListUnstyled from "@mui/base/TabsListUnstyled"; | ||
import TabPanelUnstyled from "@mui/base/TabPanelUnstyled"; | ||
import { buttonUnstyledClasses } from "@mui/base/ButtonUnstyled"; | ||
import TabUnstyled, { tabUnstyledClasses } from "@mui/base/TabUnstyled"; | ||
|
||
const blue = { | ||
50: "#F0F7FF", | ||
100: "#C2E0FF", | ||
200: "#80BFFF", | ||
300: "#66B2FF", | ||
400: "#3399FF", | ||
500: "#007FFF", | ||
600: "#0072E5", | ||
700: "#0059B2", | ||
800: "#004C99", | ||
900: "#003A75", | ||
}; | ||
|
||
export const CustomTab = styled(TabUnstyled)` | ||
font-family: IBM Plex Sans, sans-serif; | ||
color: white; | ||
cursor: pointer; | ||
font-size: 0.875rem; | ||
font-weight: bold; | ||
background-color: transparent; | ||
width: 100%; | ||
padding: 12px 16px; | ||
margin: 6px 6px; | ||
border: none; | ||
border-radius: 5px; | ||
display: flex; | ||
justify-content: center; | ||
&:hover { | ||
background-color: ${blue[400]}; | ||
} | ||
&:focus { | ||
color: #fff; | ||
border-radius: 3px; | ||
outline: 2px solid ${blue[200]}; | ||
outline-offset: 2px; | ||
} | ||
&.${tabUnstyledClasses.selected} { | ||
background-color: ${blue[50]}; | ||
color: ${blue[600]}; | ||
} | ||
&.${buttonUnstyledClasses.disabled} { | ||
opacity: 0.5; | ||
cursor: not-allowed; | ||
} | ||
`; | ||
|
||
export const CustomTabPanel = styled(TabPanelUnstyled)` | ||
width: 100%; | ||
font-family: IBM Plex Sans, sans-serif; | ||
font-size: 0.875rem; | ||
`; | ||
|
||
export const CustomTabsList = styled(TabsListUnstyled)` | ||
min-width: 320px; | ||
background-color: ${blue[500]}; | ||
border-radius: 8px; | ||
margin-bottom: 16px; | ||
display: flex; | ||
align-items: center; | ||
justify-content: center; | ||
align-content: space-between; | ||
`; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
import * as React from 'react'; | ||
import PropTypes from 'prop-types'; | ||
import clsx from 'clsx'; | ||
import { useRouter } from 'next/router'; | ||
import NextLink from 'next/link'; | ||
import MuiLink from '@mui/material/Link'; | ||
import { styled } from '@mui/material/styles'; | ||
|
||
// Add support for the sx prop for consistency with the other branches. | ||
const Anchor = styled('a')({}); | ||
|
||
export const NextLinkComposed = React.forwardRef(function NextLinkComposed(props, ref) { | ||
const { to, linkAs, href, replace, scroll, shallow, prefetch, locale, ...other } = props; | ||
|
||
return ( | ||
<NextLink | ||
href={to} | ||
prefetch={prefetch} | ||
as={linkAs} | ||
replace={replace} | ||
scroll={scroll} | ||
shallow={shallow} | ||
passHref | ||
locale={locale} | ||
> | ||
<Anchor ref={ref} {...other} /> | ||
</NextLink> | ||
); | ||
}); | ||
|
||
NextLinkComposed.propTypes = { | ||
href: PropTypes.any, | ||
linkAs: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), | ||
locale: PropTypes.string, | ||
passHref: PropTypes.bool, | ||
prefetch: PropTypes.bool, | ||
replace: PropTypes.bool, | ||
scroll: PropTypes.bool, | ||
shallow: PropTypes.bool, | ||
to: PropTypes.oneOfType([PropTypes.object, PropTypes.string]).isRequired, | ||
}; | ||
|
||
// A styled version of the Next.js Link component: | ||
// https://nextjs.org/docs/api-reference/next/link | ||
const Link = React.forwardRef(function Link(props, ref) { | ||
const { | ||
activeClassName = 'active', | ||
as: linkAs, | ||
className: classNameProps, | ||
href, | ||
noLinkStyle, | ||
role, // Link don't have roles. | ||
...other | ||
} = props; | ||
|
||
const router = useRouter(); | ||
const pathname = typeof href === 'string' ? href : href.pathname; | ||
const className = clsx(classNameProps, { | ||
[activeClassName]: router.pathname === pathname && activeClassName, | ||
}); | ||
|
||
const isExternal = | ||
typeof href === 'string' && (href.indexOf('http') === 0 || href.indexOf('mailto:') === 0); | ||
|
||
if (isExternal) { | ||
if (noLinkStyle) { | ||
return <Anchor className={className} href={href} ref={ref} {...other} />; | ||
} | ||
|
||
return <MuiLink className={className} href={href} ref={ref} {...other} />; | ||
} | ||
|
||
if (noLinkStyle) { | ||
return <NextLinkComposed className={className} ref={ref} to={href} {...other} />; | ||
} | ||
|
||
return ( | ||
<MuiLink | ||
component={NextLinkComposed} | ||
linkAs={linkAs} | ||
className={className} | ||
ref={ref} | ||
to={href} | ||
{...other} | ||
/> | ||
); | ||
}); | ||
|
||
Link.propTypes = { | ||
activeClassName: PropTypes.string, | ||
as: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), | ||
className: PropTypes.string, | ||
href: PropTypes.any, | ||
linkAs: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), | ||
noLinkStyle: PropTypes.bool, | ||
role: PropTypes.string, | ||
}; | ||
|
||
export default Link; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
import * as React from "react"; | ||
import Avatar from "@mui/material/Avatar"; | ||
import Button from "@mui/material/Button"; | ||
import CssBaseline from "@mui/material/CssBaseline"; | ||
import TextField from "@mui/material/TextField"; | ||
import FormControlLabel from "@mui/material/FormControlLabel"; | ||
import Checkbox from "@mui/material/Checkbox"; | ||
import Link from "@mui/material/Link"; | ||
import Grid from "@mui/material/Grid"; | ||
import Box from "@mui/material/Box"; | ||
import LockOutlinedIcon from "@mui/icons-material/LockOutlined"; | ||
import Typography from "@mui/material/Typography"; | ||
import Container from "@mui/material/Container"; | ||
import { createTheme, ThemeProvider } from "@mui/material/styles"; | ||
|
||
function Copyright(props) { | ||
return ( | ||
<Typography | ||
variant="body2" | ||
color="text.secondary" | ||
align="center" | ||
{...props} | ||
> | ||
{"Copyright © "} | ||
<Link color="inherit" href="https://mui.com/"> | ||
Your Website | ||
</Link>{" "} | ||
{new Date().getFullYear()} | ||
{"."} | ||
</Typography> | ||
); | ||
} | ||
|
||
const theme = createTheme(); | ||
|
||
export default function SignIn() { | ||
const handleSubmit = (event) => { | ||
event.preventDefault(); | ||
const data = new FormData(event.currentTarget); | ||
// eslint-disable-next-line no-console | ||
console.log({ | ||
email: data.get("email"), | ||
password: data.get("password"), | ||
}); | ||
}; | ||
|
||
return ( | ||
<ThemeProvider theme={theme}> | ||
<Container component="main" maxWidth="xs"> | ||
<CssBaseline /> | ||
<Box | ||
sx={{ | ||
marginTop: 8, | ||
display: "flex", | ||
flexDirection: "column", | ||
alignItems: "center", | ||
}} | ||
> | ||
<Avatar sx={{ m: 1, bgcolor: "secondary.main" }}> | ||
<LockOutlinedIcon /> | ||
</Avatar> | ||
<Typography component="h1" variant="h5"> | ||
Sign in | ||
</Typography> | ||
<Box | ||
component="form" | ||
onSubmit={handleSubmit} | ||
noValidate | ||
sx={{ mt: 1 }} | ||
> | ||
<TextField | ||
margin="normal" | ||
required | ||
fullWidth | ||
id="email" | ||
label="Email Address" | ||
name="email" | ||
autoComplete="email" | ||
autoFocus | ||
/> | ||
<TextField | ||
margin="normal" | ||
required | ||
fullWidth | ||
name="password" | ||
label="Password" | ||
type="password" | ||
id="password" | ||
autoComplete="current-password" | ||
/> | ||
<FormControlLabel | ||
control={ | ||
<Checkbox value="remember" color="primary" /> | ||
} | ||
label="Remember me" | ||
/> | ||
<Button | ||
type="submit" | ||
fullWidth | ||
variant="contained" | ||
sx={{ mt: 3, mb: 2 }} | ||
> | ||
Sign In | ||
</Button> | ||
<Grid container> | ||
<Grid item xs> | ||
<Link href="#" variant="body2"> | ||
Forgot password? | ||
</Link> | ||
</Grid> | ||
<Grid item> | ||
<Link href="#" variant="body2"> | ||
{"Don't have an account? Sign Up"} | ||
</Link> | ||
</Grid> | ||
</Grid> | ||
</Box> | ||
</Box> | ||
<Copyright sx={{ mt: 8, mb: 4 }} /> | ||
</Container> | ||
</ThemeProvider> | ||
); | ||
} |
Oops, something went wrong.