Styles: design update

This commit is contained in:
Amit Roy 2024-08-06 20:03:35 +05:30
parent 4fa26a55d2
commit 4709dab695
28 changed files with 8729 additions and 480 deletions

1010
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -9,16 +9,22 @@
"lint": "next lint" "lint": "next lint"
}, },
"dependencies": { "dependencies": {
"@emotion/cache": "^11.13.1",
"@emotion/react": "^11.13.0",
"@emotion/styled": "^11.13.0",
"@mui/icons-material": "^5.16.6",
"@mui/material-nextjs": "^5.16.6",
"next": "14.2.5",
"react": "^18", "react": "^18",
"react-dom": "^18", "react-dom": "^18",
"next": "14.2.5" "sass": "^1.77.8"
}, },
"devDependencies": { "devDependencies": {
"typescript": "^5",
"@types/node": "^20", "@types/node": "^20",
"@types/react": "^18", "@types/react": "^18",
"@types/react-dom": "^18", "@types/react-dom": "^18",
"eslint": "^8", "eslint": "^8",
"eslint-config-next": "14.2.5" "eslint-config-next": "14.2.5",
"typescript": "^5"
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 703 KiB

View File

@ -0,0 +1,8 @@
interface RootLayoutProps {
children: React.ReactNode;
}
export default function RootLayout(props: RootLayoutProps): JSX.Element {
const { children } = props;
return <>{children}</>;
}

View File

@ -0,0 +1,10 @@
.loginPage {
width: 100%;
height: 100%;
.images {
width: 100%;
max-width: 500px;
object-fit: contain;
margin-inline: auto;
}
}

View File

@ -0,0 +1,86 @@
import React from "react";
import styles from "./loginPage.module.scss";
import Box from "@mui/material/Box";
import Typography from "@mui/material/Typography";
import Grid from "@mui/material/Grid";
import { UTILITY_CONSTANT } from "@/utilities/utilityConstant";
import Link from "next/link";
import CustomizedInputsStyled from "@/ui/CustomizedInputsStyled";
import CustomizedButtons from "@/ui/customizedButtons";
export default function LoginPage() {
return (
<main className={styles.loginPage}>
<Grid container sx={{ height: "100%" }}>
<Grid item display={{ xs: "none", md: "block" }} md={7}>
<Box
height={"100%"}
sx={{ background: "var(--primary)" }}
display={"flex"}
alignItems={"center"}
justifyContent={"space-between"}
>
<img
src={UTILITY_CONSTANT.IMAGES.AUTH.LOGIN_BG}
alt=""
className={styles.images}
/>
</Box>
</Grid>
<Grid item xs={12} md={5}>
<Box
width={"100%"}
height={"100%"}
display={"flex"}
flexDirection={"column"}
justifyContent={"space-between"}
alignItems={"flex-start"}
gap={4}
paddingInline={5}
paddingBlock={5}
>
<img src={UTILITY_CONSTANT.IMAGES.AUTH.HEADER_LOG} alt="logo" />
<Box width={"100%"}>
<Typography variant="h4">Welcome to Convexsol</Typography>
<Typography variant="h4">Sign in to your account</Typography>
<Box
width={"100%"}
marginBlockStart={"40px"}
display={"flex"}
alignItems={"flex-start"}
flexDirection={"column"}
gap={3}
>
<CustomizedInputsStyled label="User Name" type="text" />
<CustomizedInputsStyled
label="Password"
type="password"
endAdornmentBoolean
/>
</Box>
<Box width={"100%"} marginBlockStart={"20px"}>
<CustomizedButtons label={"Sign In"} />
</Box>
</Box>
<Box
width={"100%"}
display={"flex"}
alignItems={"center"}
justifyContent={"space-between"}
flexWrap={"wrap"}
gap={2}
>
<Typography variant="caption">
© 2024 ConvexSol. Pvt.Ltd. All rights reserved.
</Typography>
<Typography variant="caption">
<Link href={"#"}>Privacy Policy</Link> |{" "}
<Link href={"#"}>Terms of Use</Link>
</Typography>
</Box>
</Box>
</Grid>
</Grid>
</main>
);
}

View File

@ -0,0 +1,7 @@
import React from "react";
const HomePage = () => {
return <div>Home page 1</div>;
};
export default HomePage;

View File

@ -0,0 +1,10 @@
import DashboardWrapper from "@/components/wrapper/dashboardWrapper";
interface RootLayoutProps {
children: React.ReactNode;
}
export default function RootLayout(props: RootLayoutProps): JSX.Element {
const { children } = props;
return <DashboardWrapper>{children}</DashboardWrapper>;
}

View File

@ -1,107 +0,0 @@
:root {
--max-width: 1100px;
--border-radius: 12px;
--font-mono: ui-monospace, Menlo, Monaco, "Cascadia Mono", "Segoe UI Mono",
"Roboto Mono", "Oxygen Mono", "Ubuntu Monospace", "Source Code Pro",
"Fira Mono", "Droid Sans Mono", "Courier New", monospace;
--foreground-rgb: 0, 0, 0;
--background-start-rgb: 214, 219, 220;
--background-end-rgb: 255, 255, 255;
--primary-glow: conic-gradient(
from 180deg at 50% 50%,
#16abff33 0deg,
#0885ff33 55deg,
#54d6ff33 120deg,
#0071ff33 160deg,
transparent 360deg
);
--secondary-glow: radial-gradient(
rgba(255, 255, 255, 1),
rgba(255, 255, 255, 0)
);
--tile-start-rgb: 239, 245, 249;
--tile-end-rgb: 228, 232, 233;
--tile-border: conic-gradient(
#00000080,
#00000040,
#00000030,
#00000020,
#00000010,
#00000010,
#00000080
);
--callout-rgb: 238, 240, 241;
--callout-border-rgb: 172, 175, 176;
--card-rgb: 180, 185, 188;
--card-border-rgb: 131, 134, 135;
}
@media (prefers-color-scheme: dark) {
:root {
--foreground-rgb: 255, 255, 255;
--background-start-rgb: 0, 0, 0;
--background-end-rgb: 0, 0, 0;
--primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0));
--secondary-glow: linear-gradient(
to bottom right,
rgba(1, 65, 255, 0),
rgba(1, 65, 255, 0),
rgba(1, 65, 255, 0.3)
);
--tile-start-rgb: 2, 13, 46;
--tile-end-rgb: 2, 5, 19;
--tile-border: conic-gradient(
#ffffff80,
#ffffff40,
#ffffff30,
#ffffff20,
#ffffff10,
#ffffff10,
#ffffff80
);
--callout-rgb: 20, 20, 20;
--callout-border-rgb: 108, 108, 108;
--card-rgb: 100, 100, 100;
--card-border-rgb: 200, 200, 200;
}
}
* {
box-sizing: border-box;
padding: 0;
margin: 0;
}
html,
body {
max-width: 100vw;
overflow-x: hidden;
}
body {
color: rgb(var(--foreground-rgb));
background: linear-gradient(
to bottom,
transparent,
rgb(var(--background-end-rgb))
)
rgb(var(--background-start-rgb));
}
a {
color: inherit;
text-decoration: none;
}
@media (prefers-color-scheme: dark) {
html {
color-scheme: dark;
}
}

157
src/app/globals.scss Normal file
View File

@ -0,0 +1,157 @@
@use "../theme/global/index.scss" as *;
@use "../theme/sass/helper" as *;
:root {
--bg_white: 0 0% 100%;
--background: 232 95% 7%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%; /* #ffffff */
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%; /* #ffffff */
--popover-foreground: 222.2 84% 4.9%;
--primary: #6290cb; /* #6290CB */
--primary_light: #dae7f9; /* #DAE7F9 */
--primary_bg_03: 230 68% 16%; /* #0D1645 */
--inputPrimary: 227 49% 17%; /* #161F40 */
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 212, 100%, 62%; /* #3C96FF */
--secondary_bg_02: 219, 100%, 61%; /* #387eff */
--secondary_bg_03: 231 41% 21%; /* #20274D */
--secondary_bg_04: 224, 100%, 63%; /* #4175FF */
--input-border-default: #e0e3e7;
--input-border-hover: #b2bac2;
// ========== Font Family ==========
--font_primary: "roboto", sans-serif;
// ========== Font Weight ==========
--fw_light: 300;
--fw_regular: 400;
--fw_medium: 500;
--fw_semiBold: 600;
--fw_bold: 700;
--fw_extraBold: 800;
--fw_black: 900;
// xs, extra-small: 0px
// sm, small: 600px
// md, medium: 900px
// lg, large: 1200px
// xl, extra-large: 1536px
}
@media (prefers-color-scheme: dark) {
:root {
}
}
/* Apply to All Components */
*,
*::after,
*::before {
margin: 0;
margin-block: 0;
margin-inline: 0;
padding: 0;
padding-block: 0;
padding-inline: 0;
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
}
/* Body */
html,
body {
height: 100%;
padding: 0;
margin: 0;
}
:is(html, body, #__next) {
width: 100%;
scroll-behavior: smooth;
/* Keeps The Body Centered in Small Screens */
@media (max-width: 320px) {
width: rem(320);
margin: auto;
}
}
:is(button, input, select, option) {
border-color: transparent;
outline-color: transparent;
}
:is(h1, h2, h3, h4, h5, h6) {
text-wrap: balance;
}
:is(h1, h2, h3, h4, h5, h6, p, a, th, td) {
color: var(--clr_text_primary);
}
a {
text-decoration: none;
&:hover {
color: var(--primary);
}
}
button {
overflow: unset;
border: none;
background: transparent;
}
ul,
li {
margin: 0;
margin-block: 0;
margin-inline: 0;
padding: 0;
padding-block: 0;
padding-inline: 0;
list-style: none;
}
:is(html, body) {
/* width */
/* width */
::-webkit-scrollbar {
width: 7px;
height: 7px;
}
/* Track */
::-webkit-scrollbar-track {
background: #f1f1f1;
width: 7px;
height: 7px;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: #888;
width: 7px;
height: 7px;
}
/* Handle on hover */
::-webkit-scrollbar-thumb:hover {
background: #555;
width: 7px;
height: 7px;
}
:global(.MuiSnackbar-root) {
right: 24px;
left: auto;
}
}
@media (prefers-color-scheme: dark) {
html {
color-scheme: dark;
}
}

View File

@ -1,22 +1,21 @@
import type { Metadata } from "next"; import { AppRouterCacheProvider } from "@mui/material-nextjs/v13-appRouter";
import { Inter } from "next/font/google"; import { ThemeProvider } from "@mui/material/styles";
import "./globals.css"; import theme from "../theme";
import "./globals.scss";
const inter = Inter({ subsets: ["latin"] }); interface RootLayoutProps {
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode; children: React.ReactNode;
}>) { }
export default function RootLayout(props: RootLayoutProps): JSX.Element {
const { children } = props;
return ( return (
<html lang="en"> <html lang="en">
<body className={inter.className}>{children}</body> <body>
<AppRouterCacheProvider>
<ThemeProvider theme={theme}>{children}</ThemeProvider>
</AppRouterCacheProvider>
</body>
</html> </html>
); );
} }

View File

@ -1,230 +0,0 @@
.main {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
padding: 6rem;
min-height: 100vh;
}
.description {
display: inherit;
justify-content: inherit;
align-items: inherit;
font-size: 0.85rem;
max-width: var(--max-width);
width: 100%;
z-index: 2;
font-family: var(--font-mono);
}
.description a {
display: flex;
justify-content: center;
align-items: center;
gap: 0.5rem;
}
.description p {
position: relative;
margin: 0;
padding: 1rem;
background-color: rgba(var(--callout-rgb), 0.5);
border: 1px solid rgba(var(--callout-border-rgb), 0.3);
border-radius: var(--border-radius);
}
.code {
font-weight: 700;
font-family: var(--font-mono);
}
.grid {
display: grid;
grid-template-columns: repeat(4, minmax(25%, auto));
max-width: 100%;
width: var(--max-width);
}
.card {
padding: 1rem 1.2rem;
border-radius: var(--border-radius);
background: rgba(var(--card-rgb), 0);
border: 1px solid rgba(var(--card-border-rgb), 0);
transition: background 200ms, border 200ms;
}
.card span {
display: inline-block;
transition: transform 200ms;
}
.card h2 {
font-weight: 600;
margin-bottom: 0.7rem;
}
.card p {
margin: 0;
opacity: 0.6;
font-size: 0.9rem;
line-height: 1.5;
max-width: 30ch;
text-wrap: balance;
}
.center {
display: flex;
justify-content: center;
align-items: center;
position: relative;
padding: 4rem 0;
}
.center::before {
background: var(--secondary-glow);
border-radius: 50%;
width: 480px;
height: 360px;
margin-left: -400px;
}
.center::after {
background: var(--primary-glow);
width: 240px;
height: 180px;
z-index: -1;
}
.center::before,
.center::after {
content: "";
left: 50%;
position: absolute;
filter: blur(45px);
transform: translateZ(0);
}
.logo {
position: relative;
}
/* Enable hover only on non-touch devices */
@media (hover: hover) and (pointer: fine) {
.card:hover {
background: rgba(var(--card-rgb), 0.1);
border: 1px solid rgba(var(--card-border-rgb), 0.15);
}
.card:hover span {
transform: translateX(4px);
}
}
@media (prefers-reduced-motion) {
.card:hover span {
transform: none;
}
}
/* Mobile */
@media (max-width: 700px) {
.content {
padding: 4rem;
}
.grid {
grid-template-columns: 1fr;
margin-bottom: 120px;
max-width: 320px;
text-align: center;
}
.card {
padding: 1rem 2.5rem;
}
.card h2 {
margin-bottom: 0.5rem;
}
.center {
padding: 8rem 0 6rem;
}
.center::before {
transform: none;
height: 300px;
}
.description {
font-size: 0.8rem;
}
.description a {
padding: 1rem;
}
.description p,
.description div {
display: flex;
justify-content: center;
position: fixed;
width: 100%;
}
.description p {
align-items: center;
inset: 0 0 auto;
padding: 2rem 1rem 1.4rem;
border-radius: 0;
border: none;
border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
background: linear-gradient(
to bottom,
rgba(var(--background-start-rgb), 1),
rgba(var(--callout-rgb), 0.5)
);
background-clip: padding-box;
backdrop-filter: blur(24px);
}
.description div {
align-items: flex-end;
pointer-events: none;
inset: auto 0 0;
padding: 2rem;
height: 200px;
background: linear-gradient(
to bottom,
transparent 0%,
rgb(var(--background-end-rgb)) 40%
);
z-index: 1;
}
}
/* Tablet and Smaller Desktop */
@media (min-width: 701px) and (max-width: 1120px) {
.grid {
grid-template-columns: repeat(2, 50%);
}
}
@media (prefers-color-scheme: dark) {
.vercelLogo {
filter: invert(1);
}
.logo {
filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
}
}
@keyframes rotate {
from {
transform: rotate(360deg);
}
to {
transform: rotate(0deg);
}
}

6
src/app/page.module.scss Normal file
View File

@ -0,0 +1,6 @@
@use "@/theme/sass/helper" as *;
.main {
padding: 0;
min-height: 100vh;
}

View File

@ -1,95 +1,7 @@
import Image from "next/image"; import Image from "next/image";
import styles from "./page.module.css"; import styles from "./page.module.scss";
import ResponsiveDrawer from "@/components/wrapper/dashboardWrapper";
export default function Home() { export default function Home() {
return ( return <main className={styles.main}>fdhdhfh</main>;
<main className={styles.main}>
<div className={styles.description}>
<p>
Get started by editing&nbsp;
<code className={styles.code}>src/app/page.tsx</code>
</p>
<div>
<a
href="https://vercel.com?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
By{" "}
<Image
src="/vercel.svg"
alt="Vercel Logo"
className={styles.vercelLogo}
width={100}
height={24}
priority
/>
</a>
</div>
</div>
<div className={styles.center}>
<Image
className={styles.logo}
src="/next.svg"
alt="Next.js Logo"
width={180}
height={37}
priority
/>
</div>
<div className={styles.grid}>
<a
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
className={styles.card}
target="_blank"
rel="noopener noreferrer"
>
<h2>
Docs <span>-&gt;</span>
</h2>
<p>Find in-depth information about Next.js features and API.</p>
</a>
<a
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
className={styles.card}
target="_blank"
rel="noopener noreferrer"
>
<h2>
Learn <span>-&gt;</span>
</h2>
<p>Learn about Next.js in an interactive course with&nbsp;quizzes!</p>
</a>
<a
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
className={styles.card}
target="_blank"
rel="noopener noreferrer"
>
<h2>
Templates <span>-&gt;</span>
</h2>
<p>Explore starter templates for Next.js.</p>
</a>
<a
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
className={styles.card}
target="_blank"
rel="noopener noreferrer"
>
<h2>
Deploy <span>-&gt;</span>
</h2>
<p>
Instantly deploy your Next.js site to a shareable URL with Vercel.
</p>
</a>
</div>
</main>
);
} }

View File

@ -0,0 +1,149 @@
"use client"; // This ensures the file is a client component
import * as React from "react";
import AppBar from "@mui/material/AppBar";
import Box from "@mui/material/Box";
import CssBaseline from "@mui/material/CssBaseline";
import Divider from "@mui/material/Divider";
import Drawer from "@mui/material/Drawer";
import IconButton from "@mui/material/IconButton";
import InboxIcon from "@mui/icons-material/MoveToInbox";
import List from "@mui/material/List";
import ListItem from "@mui/material/ListItem";
import ListItemButton from "@mui/material/ListItemButton";
import ListItemIcon from "@mui/material/ListItemIcon";
import ListItemText from "@mui/material/ListItemText";
import MailIcon from "@mui/icons-material/Mail";
import MenuIcon from "@mui/icons-material/Menu";
import Toolbar from "@mui/material/Toolbar";
import Typography from "@mui/material/Typography";
import { useState } from "react";
const drawerWidth = 240;
interface Props {
window?: () => Window;
children: React.ReactNode;
}
export default function DashboardWrapper(props: Props) {
const { window } = props;
const { children: Children } = props;
const [mobileOpen, setMobileOpen] = useState(false);
const [isClosing, setIsClosing] = useState(false);
const handleDrawerClose = () => {
setIsClosing(true);
setMobileOpen(false);
};
const handleDrawerTransitionEnd = () => {
setIsClosing(false);
};
const handleDrawerToggle = () => {
if (!isClosing) {
setMobileOpen(!mobileOpen);
}
};
const drawer = (
<>
<Toolbar />
{/* <Divider /> */}
<List>
{["Project Table"].map((text, index) => (
<ListItem key={text} disablePadding>
<ListItemButton>
<ListItemIcon>
{index % 2 === 0 ? <InboxIcon /> : <MailIcon />}
</ListItemIcon>
<ListItemText primary={text} />
</ListItemButton>
</ListItem>
))}
</List>
</>
);
const container =
window !== undefined ? () => window().document.body : undefined;
return (
<Box sx={{ display: "flex" }} width={"100%"} height={"100%"}>
<CssBaseline />
<AppBar
position="fixed"
sx={{
width: { md: `calc(100% - ${drawerWidth}px)` },
ml: { md: `${drawerWidth}px` },
}}
>
<Toolbar>
<IconButton
color="inherit"
aria-label="open drawer"
edge="start"
onClick={handleDrawerToggle}
sx={{ mr: 2 }}
>
<MenuIcon />
</IconButton>
<Typography variant="h6" noWrap component="div">
Responsive drawer
</Typography>
</Toolbar>
</AppBar>
<Box
component="nav"
sx={{ width: { md: drawerWidth }, flexShrink: { md: 0 } }}
aria-label="mailbox folders"
>
<Drawer
container={container}
variant="temporary"
open={mobileOpen}
onTransitionEnd={handleDrawerTransitionEnd}
onClose={handleDrawerClose}
ModalProps={{
keepMounted: true, // Better open performance on mobile.
}}
sx={{
display: { xs: "block", md: "none" },
"& .MuiDrawer-paper": {
boxSizing: "border-box",
width: drawerWidth,
},
}}
>
{drawer}
</Drawer>
<Drawer
variant="permanent"
sx={{
display: { xs: "none", md: "block" },
"& .MuiDrawer-paper": {
boxSizing: "border-box",
width: drawerWidth,
},
}}
open
>
{drawer}
</Drawer>
</Box>
<Box
component="main"
sx={{
flexGrow: 1,
p: 3,
width: { md: `calc(100% - ${drawerWidth}px)` },
}}
>
<Toolbar />
{Children}
</Box>
</Box>
);
}

27
src/theme.ts Normal file
View File

@ -0,0 +1,27 @@
"use client";
import { Roboto } from "next/font/google";
import { createTheme } from "@mui/material/styles";
const roboto = Roboto({
weight: ["300", "400", "500", "700"],
subsets: ["latin"],
display: "swap",
});
const getCssVariableValue = (variable: string): string => {
return getComputedStyle(document.documentElement).getPropertyValue(variable);
};
const theme = createTheme({
typography: {
fontFamily: roboto.style.fontFamily,
},
palette: {
primary: {
main: getCssVariableValue("--primary").trim() || "#6290cb", // Fallback to default color
light: getCssVariableValue("--primary_light").trim() || "#dae7f9", // Fallback to default color
},
},
});
export default theme;

View File

@ -0,0 +1,96 @@
@use "../sass" as *;
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@200;300;400;500;600;700;800;900&display=swap");
// Headings
html {
.extra1 {
font-size: scaleValue(26px, 46px);
line-height: scaleValue(35px, 52px);
font-weight: var(--fw_semiBold);
}
.heading1 {
font-size: scaleValue(26px, 44px);
line-height: scaleValue(43px, 68px);
font-weight: var(--fw_semiBold);
}
.heading2 {
font-size: scaleValue(20px, 37px);
line-height: scaleValue(36px, 46px);
font-weight: var(--fw_bold);
font-family: var(--fn_accent);
}
.heading3 {
font-size: scaleValue(16px, 22px);
line-height: scaleValue(28px, 30px);
font-weight: var(--fw_semiBold);
}
.heading4 {
font-size: 16px;
line-height: 24px;
font-weight: var(--fw_medium);
}
.heading5 {
font-size: scaleValue(16px, 24px);
line-height: scaleValue(24px, 30px);
font-weight: var(--fw_semiBold);
}
.heading6 {
font-size: scaleValue(18px, 20px);
line-height: scaleValue(26px, 28px);
font-weight: var(--fw_semiBold);
}
.heading7 {
font-size: scaleValue(22px, 32px);
line-height: scaleValue(38px, 48px);
font-weight: var(--fw_semiBold);
}
.heading9 {
font-size: scaleValue(12px, 28px);
line-height: scaleValue(20px, 36px);
font-weight: var(--fw_semiBold);
}
.heading10 {
font-size: scaleValue(20px, 30px);
line-height: scaleValue(30px, 36px);
font-weight: var(--fw_semiBold);
}
.head4 {
font-size: 26px;
line-height: 32px;
font-weight: var(--fw_regular);
}
.details1 {
font-size: 18px;
line-height: 28px;
font-weight: var(--fw_regular);
}
.body1 {
font-size: 16px;
line-height: 20px;
font-weight: var(--fw_regular);
}
.body2 {
font-size: 14px;
line-height: 20px;
font-weight: var(--fw_regular);
}
.body3 {
font-size: 12px !important;
line-height: 18px;
font-weight: var(--fw_regular) !important;
}
.caption {
font-size: 12px !important;
line-height: 18px;
font-weight: var(--fw_regular) !important;
}
}

View File

@ -0,0 +1,24 @@
@use "../sass" as *;
@use "../sass/helper" as *;
@forward "./fonts";
.container {
width: 100%;
max-width: 1240px;
margin-inline: auto;
}
.section_padding {
padding-inline: 36px;
@include max(576px) {
padding-inline: 30px;
}
@include max(480px) {
padding-inline: 20px;
}
}
.padding_block {
padding-block: scaleValue(40px, 100px);
}

View File

@ -0,0 +1,2 @@
@use "../sass" as *;
@forward "./fonts";

View File

@ -0,0 +1,57 @@
// ===== Mixins & Functions =====
// Scale Size According to Width
@use "sass:math";
@function rem($pixel) {
@if math.is-unitless($pixel) {
@return math.div($pixel, 16) + rem;
} @else {
@error 'Don\'t use units when using the rem() function; only numbers.';
}
}
@function scaleValue($min, $max) {
$viewportRange: 1440px - 350px;
$contentSizeRange: $max - $min;
$idealSize: calc($min + (100vw * $contentSizeRange / $viewportRange));
@return clamp($min, $idealSize, $max);
}
// Flexbox
@mixin displayFlex($dir, $align, $justify) {
display: flex;
flex-direction: $dir;
align-items: $align;
justify-content: $justify;
}
// card Wrapper
@mixin cardWrapper() {
background: linear-gradient(0deg, rgba(7, 18, 58, 0.1), rgba(7, 18, 58, 0.1)),
linear-gradient(
201.08deg,
rgba(113, 169, 235, 0.1) 3.22%,
rgba(0, 0, 0, 0) 125.98%
);
backdrop-filter: blur(16px);
border: 1px solid rgba(113, 169, 235, 0.4);
}
@mixin textGradient($clr) {
background: $clr;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
@mixin min($minWidth) {
@media (min-width: $minWidth) {
@content;
}
}
@mixin max($maxWidth) {
@media (max-width: $maxWidth) {
@content;
}
}

View File

@ -0,0 +1,2 @@
// Custom Functions
@forward './helper';

View File

@ -0,0 +1,53 @@
"use client"; // Ensure this is at the top of your file
import * as React from "react";
import { styled } from "@mui/material/styles";
import TextField from "@mui/material/TextField";
import Visibility from "@mui/icons-material/Visibility";
import VisibilityOff from "@mui/icons-material/VisibilityOff";
// Define your styled component
const CssTextField = styled(TextField)({
width: "100%",
"& label.Mui-focused": {
color: "var(--primary)",
},
"& .MuiInputBase-root": {
borderRadius: 8,
},
"& .MuiOutlinedInput-root": {
"& fieldset": {
borderColor: "var(--input-border-default)",
},
"&:hover fieldset": {
borderColor: "var(--input-border-hover)",
},
"&.Mui-focused fieldset": {
borderColor: "var(--primary)",
},
},
});
type InputType = {
label: string;
type: string;
endAdornmentBoolean?: React.ReactNode;
};
// Client component
export default function CustomizedInputsStyled({
label,
type,
endAdornmentBoolean,
}: InputType) {
return (
<>
<CssTextField
label={label}
type={type}
id="custom-css-outlined-input"
InputProps={{ endAdornment: endAdornmentBoolean && <VisibilityOff /> }}
/>
</>
);
}

View File

@ -0,0 +1,30 @@
"use client";
import * as React from "react";
import { styled } from "@mui/material/styles";
import Button, { ButtonProps } from "@mui/material/Button";
const ColorButton = styled(Button)<ButtonProps>(() => ({
textTransform: "capitalize",
paddingInline: "30px",
borderRadius: "6px",
boxShadow: "none",
minHeight: "40px",
fontSize: "18px",
fontWeight: "400",
}));
type InputType = {
label: string;
statIcon?: React.ReactNode;
};
export default function CustomizedButtons({ label, statIcon }: InputType) {
return (
<>
<ColorButton variant="contained">
{statIcon && statIcon}
{label}
</ColorButton>
</>
);
}

1
src/utilities/pathUrl.ts Normal file
View File

@ -0,0 +1 @@
export const AuthUrl = ["/signin", "/signup"];

View File

@ -0,0 +1,17 @@
import exp from "constants";
export const EYE_SLASH = () => {
return (
<>
<svg width="19" height="19" viewBox="0 0 19 19" fill="none">
<path
d="M13.7408 5.25904L16.6248 2.375M13.7408 5.25904C15.2275 6.20904 16.3232 7.48362 16.981 8.38692C17.1964 8.68221 17.304 8.83025 17.3785 9.11525C17.4295 9.36894 17.4295 9.63027 17.3785 9.88396C17.304 10.1697 17.1964 10.3178 16.981 10.6123C15.8023 12.2313 13.2183 15.0417 9.49979 15.0417C7.85709 15.0417 6.43604 14.493 5.25884 13.741M13.7408 5.25904L10.6192 8.38058M5.25884 13.741L2.37479 16.625M5.25884 13.741L8.38038 10.6194M10.6192 8.38058C10.9076 8.6792 11.0672 9.07916 11.0636 9.4943C11.06 9.90945 10.8935 10.3066 10.5999 10.6001C10.3064 10.8937 9.90924 11.0602 9.4941 11.0638C9.07895 11.0674 8.679 10.9078 8.38038 10.6194M10.6192 8.38058L8.38038 10.6194M3.05563 11.875C2.68529 11.475 2.33873 11.0537 2.01775 10.6131C1.80242 10.3178 1.69475 10.1698 1.62034 9.88475C1.56926 9.63106 1.56926 9.36973 1.62034 9.11604C1.69475 8.83025 1.80242 8.68221 2.01775 8.38771C3.19734 6.76875 5.78134 3.95833 9.49979 3.95833C9.96688 3.95833 10.4165 4.00267 10.848 4.08342"
stroke="#7E90B0"
strokeWidth="1.35714"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
</>
);
};

View File

@ -0,0 +1,8 @@
export const UTILITY_CONSTANT = {
IMAGES: {
AUTH: {
HEADER_LOG: "/assets/images/auth/headerLogo.webp",
LOGIN_BG: "/assets/images/auth/loginbg.svg",
},
},
};

View File

@ -19,7 +19,8 @@
], ],
"paths": { "paths": {
"@/*": ["./src/*"] "@/*": ["./src/*"]
} },
"baseUrl": ""
}, },
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"] "exclude": ["node_modules"]