Merge pull request 'header and footer enhancements' (#2) from feature/new_UI into main
continuous-integration/drone/push Build is passing Details

Reviewed-on: #2
This commit is contained in:
Mihir Motiyani 2025-07-07 17:10:36 +05:30
commit b5642f7bad
2 changed files with 190 additions and 71 deletions

View File

@ -1,44 +1,95 @@
import React from 'react'; import React from 'react';
import { Box, Container, Grid, Link, Typography } from '@mui/material'; import {
Box, Container, Grid, Typography, Link, Divider, Stack, useMediaQuery, useTheme
} from '@mui/material';
import {
Instagram, YouTube, Facebook, LinkedIn
} from '@mui/icons-material';
import { motion } from 'framer-motion';
export default function Footer() { export default function Footer() {
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
return ( return (
<Box sx={{ py: 6, backgroundColor: '#0F111A', color: '#fff' }}> <Box sx={{ backgroundColor: '#0F111A', color: '#fff', pt: 6, pb: 2 }}>
<Container maxWidth="lg"> <Container maxWidth="lg">
<motion.div
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8 }}
>
<Grid container spacing={4}> <Grid container spacing={4}>
<Grid item xs={12} md={3}> {/* Column 1: Explore Links */}
<Typography fontWeight={700} mb={2}> <Grid item xs={12} sm={6} md={3}>
QUADRA EDGE <Stack spacing={1}>
</Typography> <Link href="#" color="inherit" underline="hover">About Us</Link>
<Link href="#" color="inherit" underline="hover">Portfolio</Link>
<Link href="#" color="inherit" underline="hover">Blogs</Link>
<Link href="#" color="inherit" underline="hover">Services</Link>
</Stack>
</Grid> </Grid>
<Grid item xs={12} md={3}>
<Typography fontWeight={600} gutterBottom> {/* Column 2: Support Links */}
About Us <Grid item xs={12} sm={6} md={3}>
</Typography> <Stack spacing={1}>
<Link href="#" underline="hover" color="inherit" display="block">Portfolio</Link> <Link href="#" color="inherit" underline="hover">FAQs</Link>
<Link href="#" underline="hover" color="inherit" display="block">Blogs</Link> <Link href="#" color="inherit" underline="hover">Terms & Conditions</Link>
<Link href="#" color="inherit" underline="hover">Privacy Policy</Link>
</Stack>
</Grid> </Grid>
<Grid item xs={12} md={3}>
<Typography fontWeight={600} gutterBottom> {/* Column 3: Logo (only visible on md+) */}
Services {!isMobile && (
</Typography> <Grid item xs={12} sm={6} md={3}>
<Link href="#" underline="hover" color="inherit" display="block">Marketing</Link> <Box sx={{ display: 'flex', justifyContent: { sm: 'center', md: 'flex-end' }, mb: 2 }}>
<Link href="#" underline="hover" color="inherit" display="block">Dev</Link> <img
<Link href="#" underline="hover" color="inherit" display="block">Design</Link> src="/logo.png" // Replace with actual logo
alt="Quadra Edge"
style={{ maxWidth: '180px', height: 'auto' }}
/>
</Box>
</Grid> </Grid>
<Grid item xs={12} md={3}> )}
<Typography fontWeight={600} gutterBottom>
Contact Us {/* Column 4: Contact Info + Socials */}
</Typography> <Grid item xs={12} sm={6} md={3}>
<Typography variant="body2">Number</Typography> {/* Mobile: show logo here instead */}
{isMobile && (
<Box sx={{ display: 'flex', justifyContent: 'flex-end', mb: 2 }}>
<img
src="/logo.png" // Replace with actual logo
alt="Quadra Edge"
style={{ maxWidth: '180px', height: 'auto' }}
/>
</Box>
)}
<Typography fontWeight={600} gutterBottom>Contact Us</Typography>
<Typography variant="body2" mb={1}>Number</Typography>
<Typography variant="body2">Address</Typography> <Typography variant="body2">Address</Typography>
<Stack
direction="row"
spacing={2}
sx={{ mt: 2 }}
>
<Link href="#"><Instagram sx={{ color: '#00E0FF' }} /></Link>
<Link href="#"><YouTube sx={{ color: '#00E0FF' }} /></Link>
<Link href="#"><Facebook sx={{ color: '#00E0FF' }} /></Link>
<Link href="#"><LinkedIn sx={{ color: '#00E0FF' }} /></Link>
</Stack>
</Grid> </Grid>
</Grid> </Grid>
<Box textAlign="center" mt={4}>
<Typography variant="body2" color="gray"> <Divider sx={{ my: 4, borderColor: '#00E0FF' }} />
Copyright © 2025 QuadraEdge.
<Box textAlign="center">
<Typography variant="body2" sx={{ color: '#00E0FF' }}>
Copyright © 2025 QuadraEdge
</Typography> </Typography>
</Box> </Box>
</motion.div>
</Container> </Container>
</Box> </Box>
); );

View File

@ -1,36 +1,100 @@
import React from 'react'; import React, { useState } from 'react';
import { AppBar, Box, Button, Container, Toolbar, Typography, Link } from '@mui/material'; import {
AppBar,
Toolbar,
Typography,
IconButton,
Drawer,
List,
ListItem,
ListItemText,
Button,
useMediaQuery,
useTheme,
Box,
Container,
ListItemButton,
} from '@mui/material';
import MenuIcon from '@mui/icons-material/Menu';
import { motion } from 'framer-motion';
const navItems = ['Home', 'Services', 'Portfolio', 'About Us', 'Blog']; const navItems = ['Home', 'Services', 'Portfolio', 'About Us', 'Blog'];
export default function Header() { const Header = () => {
const [mobileOpen, setMobileOpen] = useState(false);
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
const toggleDrawer = () => {
setMobileOpen(!mobileOpen);
};
const drawer = (
<Box sx={{ width: 250 }} onClick={toggleDrawer}>
<List>
{navItems.map((item) => (
<ListItemButton component="a" href="#" key={item}>
<ListItemText primary={item} />
</ListItemButton>
))}
<ListItem disablePadding>
<Button
variant="outlined"
fullWidth
sx={{ borderColor: '#00E0FF', color: '#00E0FF', m: 2 }}
>
Contact Us
</Button>
</ListItem>
</List>
</Box>
);
return ( return (
<AppBar position="static" sx={{ backgroundColor: '#0F111A', boxShadow: 'none' }}> <AppBar position="sticky" sx={{ backgroundColor: '#0F111A', boxShadow: 'none' }}>
<Container maxWidth="lg"> <Container maxWidth="lg">
<Toolbar disableGutters sx={{ justifyContent: 'space-between' }}> <Toolbar sx={{ justifyContent: 'space-between' }}>
<motion.div initial={{ opacity: 0, y: -10 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.6 }}>
<Typography variant="h6" sx={{ fontWeight: 700 }}> <Typography variant="h6" sx={{ fontWeight: 700 }}>
QUADRA EDGE QUADRA EDGE
</Typography> </Typography>
<Box sx={{ display: 'flex', gap: 3 }}> </motion.div>
{navItems.map((item) => (
<Link {isMobile ? (
<>
<IconButton color="inherit" edge="end" onClick={toggleDrawer}>
<MenuIcon />
</IconButton>
<Drawer anchor="right" open={mobileOpen} onClose={toggleDrawer}>
{drawer}
</Drawer>
</>
) : (
<Box sx={{ display: 'flex', gap: 3, alignItems: 'center' }}>
{navItems.map((item, index) => (
<motion.div
key={item} key={item}
href="#" initial={{ opacity: 0, y: -5 }}
underline="none" animate={{ opacity: 1, y: 0 }}
sx={{ color: 'white', fontWeight: 500, fontSize: 14 }} transition={{ delay: 0.1 * index }}
> >
<Typography variant="body1" component="a" href="#" sx={{ color: '#fff', textDecoration: 'none' }}>
{item} {item}
</Link> </Typography>
</motion.div>
))} ))}
<motion.div
initial={{ opacity: 0, y: -5 }}
animate={{ opacity: 1, y: 0 }}
transition={{ delay: 0.5 }}
>
<Button <Button
variant="outlined" variant="outlined"
size="small"
sx={{ sx={{
borderColor: '#00E0FF', borderColor: '#00E0FF',
color: '#00E0FF', color: '#00E0FF',
fontWeight: 'bold',
textTransform: 'none', textTransform: 'none',
ml: 2,
'&:hover': { '&:hover': {
backgroundColor: '#00E0FF', backgroundColor: '#00E0FF',
color: '#000', color: '#000',
@ -39,9 +103,13 @@ export default function Header() {
> >
Contact Us Contact Us
</Button> </Button>
</motion.div>
</Box> </Box>
)}
</Toolbar> </Toolbar>
</Container> </Container>
</AppBar> </AppBar>
); );
} };
export default Header;