├── public
├── robots.txt
├── favicon.ico
├── logo192.png
├── logo512.png
├── manifest.json
└── index.html
├── screenshots
├── s1.png
├── s2.png
├── s3.png
├── s4.png
└── s5.png
├── src
├── images
│ └── logo.png
├── components
│ ├── utils
│ │ ├── ToolTag.js
│ │ ├── CustomSkillTag.js
│ │ └── FrameworkTag.js
│ ├── Footer.js
│ ├── Freelancer.js
│ ├── CTA.js
│ ├── SkillsProjects.js
│ ├── Banner.js
│ ├── Education.js
│ ├── Projects.js
│ └── Header.js
├── index.js
├── index.css
├── data
│ └── skill.js
└── App.js
├── README.md
├── .gitignore
└── package.json
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/public/logo512.png
--------------------------------------------------------------------------------
/screenshots/s1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/screenshots/s1.png
--------------------------------------------------------------------------------
/screenshots/s2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/screenshots/s2.png
--------------------------------------------------------------------------------
/screenshots/s3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/screenshots/s3.png
--------------------------------------------------------------------------------
/screenshots/s4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/screenshots/s4.png
--------------------------------------------------------------------------------
/screenshots/s5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/screenshots/s5.png
--------------------------------------------------------------------------------
/src/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/princepatelcodes/react_chakra_portfolio/HEAD/src/images/logo.png
--------------------------------------------------------------------------------
/src/components/utils/ToolTag.js:
--------------------------------------------------------------------------------
1 | import { Tag } from '@chakra-ui/react'
2 | import React from 'react'
3 |
4 | export default function ToolTag({ skill }) {
5 | return (
6 | {skill}
7 | )
8 | }
9 |
--------------------------------------------------------------------------------
/src/components/utils/CustomSkillTag.js:
--------------------------------------------------------------------------------
1 | import { Tag } from '@chakra-ui/react'
2 | import React from 'react'
3 |
4 | export default function CustomSkillTag({ skill }) {
5 | return (
6 | {skill}
7 | )
8 | }
9 |
--------------------------------------------------------------------------------
/src/components/utils/FrameworkTag.js:
--------------------------------------------------------------------------------
1 | import { Tag } from '@chakra-ui/react'
2 | import React from 'react'
3 |
4 | export default function FrameworkTag({ skill }) {
5 | return (
6 | {skill}
7 | )
8 | }
9 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import './index.css';
4 | import App from './App';
5 |
6 | const root = ReactDOM.createRoot(document.getElementById('root'));
7 | root.render(
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Portfolio
2 |
3 | Trying to get better with chakra UI by making a portfolio kind of website with aos.
4 |
5 | ## Devicons
6 |
7 | Add more devicons from [here](https://www.npmjs.com/package/devicon-react-svg).
8 |
9 | ## Screenshots
10 |
11 | 
12 | 
13 | 
14 | 
15 | 
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
25 | package.lock-json
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&display=swap');
2 |
3 | html {
4 | scroll-behavior: smooth;
5 | }
6 |
7 | body {
8 | margin: 0;
9 | font-family: 'DM Sans' !important;
10 | -webkit-font-smoothing: antialiased;
11 | -moz-osx-font-smoothing: grayscale;
12 | scroll-behavior: smooth;
13 | }
14 |
15 | code {
16 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
17 | monospace;
18 | }
--------------------------------------------------------------------------------
/src/data/skill.js:
--------------------------------------------------------------------------------
1 | import { DiAndroid, DiDart, DiNodejs, DiReact } from "react-icons/di";
2 |
3 | const data = [
4 | { icon: DiAndroid, title: "Android", },
5 | { icon: DiDart, title: "Dart", },
6 | { icon: DiNodejs, title: "Node ", },
7 | { icon: DiReact, title: "React Js", },
8 | { icon: DiAndroid, title: "Android", },
9 | { icon: DiDart, title: "Dart", },
10 | { icon: DiNodejs, title: "Node ", },
11 | { icon: DiReact, title: "React Js", },
12 | ];
13 |
14 | export default data;
15 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
14 | Prince Patel | Portfolio
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react_charka_portfolio",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@chakra-ui/icons": "^2.0.4",
7 | "@chakra-ui/react": "^2.2.4",
8 | "@emotion/react": "^11.9.3",
9 | "@emotion/styled": "^11.9.3",
10 | "@testing-library/jest-dom": "^5.16.4",
11 | "@testing-library/react": "^13.3.0",
12 | "@testing-library/user-event": "^13.5.0",
13 | "aos": "^2.3.4",
14 | "devicon-react-svg": "^0.2.3",
15 | "framer-motion": "^6.5.1",
16 | "react": "^18.2.0",
17 | "react-dom": "^18.2.0",
18 | "react-icons": "^4.4.0",
19 | "react-scripts": "5.0.1",
20 | "web-vitals": "^2.1.4"
21 | },
22 | "scripts": {
23 | "start": "react-scripts start",
24 | "build": "react-scripts build",
25 | "test": "react-scripts test",
26 | "eject": "react-scripts eject"
27 | },
28 | "eslintConfig": {
29 | "extends": [
30 | "react-app",
31 | "react-app/jest"
32 | ]
33 | },
34 | "browserslist": {
35 | "production": [
36 | ">0.2%",
37 | "not dead",
38 | "not op_mini all"
39 | ],
40 | "development": [
41 | "last 1 chrome version",
42 | "last 1 firefox version",
43 | "last 1 safari version"
44 | ]
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/components/Footer.js:
--------------------------------------------------------------------------------
1 | import { ButtonGroup, Container, IconButton, Stack, Text } from '@chakra-ui/react'
2 | import * as React from 'react'
3 | import { FaFacebook, FaInstagram, FaTwitter } from 'react-icons/fa'
4 |
5 |
6 | export const Footer = () => (
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Prince Patel
17 |
18 |
19 | )
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 |
2 | import { useEffect } from 'react';
3 | import { ChakraProvider, extendTheme } from '@chakra-ui/react';
4 | import Header from './components/Header';
5 | import Aos from 'aos';
6 | import 'aos/dist/aos.css';
7 | import CTA from './components/CTA';
8 | import { Footer } from './components/Footer';
9 | import Banner from './components/Banner';
10 | import SkillsProjects from './components/SkillsProjects';
11 |
12 |
13 | function App() {
14 | const theme = extendTheme({
15 | styles: {
16 | global: {
17 | // styles for the `body`
18 | body: {
19 | bg: '#dbd6e7',
20 | color: 'white',
21 | },
22 | // styles for the `a`
23 | a: {
24 | color: 'teal.500',
25 | _hover: {
26 | textDecoration: 'underline',
27 | },
28 | },
29 | },
30 | },
31 | colors: {
32 | primary : {
33 | "50": "#f5f7fe",
34 | "100": "#d9dffa",
35 | "200": "#b8c4f5",
36 | "300": "#8fa2ef",
37 | "400": "#788fec",
38 | "500": "#5874e7",
39 | "600": "#3a5ce3",
40 | "700": "#163ede",
41 | "800": "#002ad2",
42 | "900": "#001f9b"
43 | }
44 | },
45 | fonts: {
46 | heading: `'DM Sans', sans-serif`,
47 | body: `'DM Sans', sans-serif`,
48 | },
49 | })
50 |
51 | useEffect(() => {
52 | Aos.init({
53 | duration: 300,
54 | once: true,
55 | });
56 | }, []);
57 |
58 | return (
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | );
67 | }
68 |
69 | export default App;
70 |
--------------------------------------------------------------------------------
/src/components/Freelancer.js:
--------------------------------------------------------------------------------
1 | import { Box, Button, Container, Heading, Stack, Text, useBreakpointValue } from '@chakra-ui/react'
2 | import * as React from 'react'
3 |
4 | export default function Freelancer() {
5 | return (
6 |
7 |
8 |
9 |
10 |
11 | Looking For Freelancer ?
12 |
13 | I have spent enough time with simple and complex full fleged projects. I have created apps, website, scripts and have also coded and deployed admin panels and database/backend on cloud.I love to take on new challenges and work on experimental projects.
14 |
15 | Let us discuss more about your work.
16 |
17 |
18 |
19 |
20 |
27 |
28 |
29 |
30 |
31 | );
32 | }
--------------------------------------------------------------------------------
/src/components/CTA.js:
--------------------------------------------------------------------------------
1 | import { Button, Container, Heading, Stack, Text, useBreakpointValue } from '@chakra-ui/react'
2 | import * as React from 'react'
3 |
4 | export default function CTA() {
5 | return (
6 |
7 |
8 |
9 |
10 | Looking For Freelancer ?
11 |
12 | I have spent enough time with simple and complex full fleged projects. I have created apps, website, scripts and have also coded and deployed admin panels and database/backend on cloud.I love to take on new challenges and work on experimental projects.
13 |
14 | Let us discuss more about your work.
15 |
16 |
17 |
18 |
29 |
30 |
31 |
32 |
33 | );
34 | }
--------------------------------------------------------------------------------
/src/components/SkillsProjects.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Box, Container, Flex, Heading, Text, Wrap } from '@chakra-ui/react'
3 | import Projects from './Projects'
4 | import CustomSkillTag from './utils/CustomSkillTag'
5 | import FrameworkTag from './utils/FrameworkTag'
6 | import ToolTag from './utils/ToolTag'
7 |
8 | export default function SkillsProjects() {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 | Projects
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Skills
25 |
26 |
27 | My skills, which I constantly keep improving.
28 |
29 |
30 |
31 | Programming Languages
32 |
33 |
34 | {/* Icons */}
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | Frameworks
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | Other Tools
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | )
77 | }
78 |
--------------------------------------------------------------------------------
/src/components/Banner.js:
--------------------------------------------------------------------------------
1 | import { Box, ButtonGroup, Container, Flex, Heading, HStack, IconButton, Image, Tag, Text, VStack } from '@chakra-ui/react'
2 | import React from 'react'
3 | import { FaEnvelope, FaFacebook, FaGithub, FaInstagram, FaLinkedin, FaPhone, FaTwitter } from 'react-icons/fa'
4 | import Education from './Education'
5 |
6 |
7 | export default function Banner() {
8 | return (
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Prince Patel
18 |
19 |
20 | I am currently pursuing MCA form College of Engineering, Anna university, Tamil Nadu. I am looking for internship and
Job Opportunities
(Degree Completion in 2023).
21 |
22 |
23 |
24 | Full Stack Developer
25 | App Developer
26 |
27 |
28 | {/* Icons */}
29 |
30 |
31 |
32 |
33 |
34 |
35 | Email
36 | princepatelcodes
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | Phone
47 | princepatelcodes
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | Github
58 | princepatelcodes
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | Linkedin
68 | princepatell
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 | Twitter
78 | princepatelt
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 | Education
94 |
95 |
96 |
97 |
98 |
99 | )
100 | }
101 |
--------------------------------------------------------------------------------
/src/components/Education.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | Box,
4 | chakra,
5 | Container,
6 | Text,
7 | HStack,
8 | VStack,
9 | Flex,
10 | useColorModeValue,
11 | useBreakpointValue
12 | } from '@chakra-ui/react';
13 |
14 | const milestones = [
15 | {
16 | id: 1,
17 | date: 'MARCH, 2015',
18 | title: 'Completed 10th',
19 | description: `fames ac turpis egestas sed tempus urna et pharetra pharetra massa massa ultricies mi quis hendrerit dolor magna eget est.`
20 | },
21 | {
22 | id: 2,
23 | date: 'Feb, 2017',
24 | title: 'Completed 12th',
25 | description: `fames ac turpis egestas sed tempus urna et pharetra pharetra massa massa ultricies mi quis hendrerit dolor magna eget est.`
26 | },
27 | {
28 | id: 3,
29 | date: 'July 30, 2020',
30 | title: 'Completed Graduation',
31 | description:
32 | 'fames ac turpis egestas sed tempus urna et pharetra pharetra massa massa ultricies mi quis hendrerit dolor magna eget est.'
33 | },
34 | {
35 | id: 4,
36 | date: 'July 30, 2022',
37 | title: 'Post Grad Ongoing',
38 | description:
39 | 'fames ac turpis egestas sed tempus urna et pharetra pharetra massa massa ultricies mi quis hendrerit dolor magna eget est.'
40 | }
41 | ];
42 |
43 | const Education = () => {
44 | const isMobile = useBreakpointValue({ base: true, md: false });
45 | const isDesktop = useBreakpointValue({ base: false, md: true });
46 |
47 | return (
48 |
68 |
69 | {milestones.map((milestone) => (
70 |
71 | {/* Desktop view(left card) */}
72 | {isDesktop && milestone.id % 2 === 0 && (
73 | <>
74 |
75 |
76 |
77 | >
78 | )}
79 |
80 | {/* Mobile view */}
81 | {isMobile && (
82 | <>
83 |
84 |
85 | >
86 | )}
87 |
88 | {/* Desktop view(right card) */}
89 | {isDesktop && milestone.id % 2 !== 0 && (
90 | <>
91 |
92 |
93 |
94 |
95 | >
96 | )}
97 |
98 | ))}
99 |
100 | );
101 | };
102 |
103 |
104 |
105 | const Card = ({ id, title, description, date }) => {
106 | // For even id show card on left side
107 | // For odd id show card on right side
108 | const isEvenId = id % 2 === 0;
109 | let borderWidthValue = isEvenId ? '15px 15px 15px 0' : '15px 0 15px 15px';
110 | let leftValue = isEvenId ? '-15px' : 'unset';
111 | let rightValue = isEvenId ? 'unset' : '-15px';
112 |
113 | const isMobile = useBreakpointValue({ base: true, md: false });
114 | if (isMobile) {
115 | leftValue = '-15px';
116 | rightValue = 'unset';
117 | borderWidthValue = '15px 15px 15px 0';
118 | }
119 |
120 | return (
121 |
142 |
143 |
144 | {date}
145 |
146 |
147 |
148 |
149 | {title}
150 |
151 | {description}
152 |
153 |
154 |
155 | );
156 | };
157 |
158 | const LineWithDot = () => {
159 | return (
160 |
166 |
174 |
175 |
191 |
192 |
193 | );
194 | };
195 |
196 | const EmptyCard = () => {
197 | return ;
198 | };
199 |
200 | export default Education;
--------------------------------------------------------------------------------
/src/components/Projects.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | Box,
4 | chakra,
5 | Container,
6 | Text,
7 | HStack,
8 | VStack,
9 | Flex,
10 | useColorModeValue,
11 | useBreakpointValue,
12 | Tag
13 | } from '@chakra-ui/react';
14 |
15 | const milestones = [
16 | {
17 | id: 1,
18 | date: '2020',
19 | title: 'Simple e-Commerce Website',
20 | description: `There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour.`
21 | },
22 | {
23 | id: 2,
24 | date: 'Feb, 2021',
25 | title: 'A React Medical Application',
26 | description: `There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour.`
27 | },
28 | {
29 | id: 3,
30 | date: '2022',
31 | title: 'E-Learning App (Ongoing)',
32 | description:
33 | 'There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour.'
34 | }
35 | ];
36 |
37 | const Projects = () => {
38 | const isMobile = useBreakpointValue({ base: true, md: false });
39 | const isDesktop = useBreakpointValue({ base: false, md: true });
40 |
41 | return (
42 |
62 |
63 | {milestones.map((milestone) => (
64 |
65 | {/* Desktop view(left card) */}
66 | {isDesktop && milestone.id % 2 === 0 && (
67 | <>
68 |
69 |
70 |
71 | >
72 | )}
73 |
74 | {/* Mobile view */}
75 | {isMobile && (
76 | <>
77 |
78 |
79 | >
80 | )}
81 |
82 | {/* Desktop view(right card) */}
83 | {isDesktop && milestone.id % 2 !== 0 && (
84 | <>
85 |
86 |
87 |
88 |
89 | >
90 | )}
91 |
92 | ))}
93 |
94 | );
95 | };
96 |
97 |
98 |
99 | const Card = ({ id, title, description, date }) => {
100 | // For even id show card on left side
101 | // For odd id show card on right side
102 | const isEvenId = id % 2 === 0;
103 | let borderWidthValue = isEvenId ? '15px 15px 15px 0' : '15px 0 15px 15px';
104 | let leftValue = isEvenId ? '-15px' : 'unset';
105 | let rightValue = isEvenId ? 'unset' : '-15px';
106 |
107 | const isMobile = useBreakpointValue({ base: true, md: false });
108 | if (isMobile) {
109 | leftValue = '-15px';
110 | rightValue = 'unset';
111 | borderWidthValue = '15px 15px 15px 0';
112 | }
113 |
114 | return (
115 |
136 |
137 |
138 | {date}
139 |
140 |
141 |
142 |
143 | {title}
144 |
145 | {description}
146 |
147 |
148 |
149 | Flutter
150 | React
151 |
152 |
153 |
154 | );
155 | };
156 |
157 | const LineWithDot = () => {
158 | return (
159 |
165 |
173 |
174 |
190 |
191 |
192 | );
193 | };
194 |
195 | const EmptyCard = () => {
196 | return ;
197 | };
198 |
199 | export default Projects;
--------------------------------------------------------------------------------
/src/components/Header.js:
--------------------------------------------------------------------------------
1 | import {
2 | Box,
3 | Flex,
4 | Text,
5 | IconButton,
6 | Button,
7 | Stack,
8 | Collapse,
9 | Icon,
10 | Link,
11 | Popover,
12 | PopoverTrigger,
13 | PopoverContent,
14 | useColorModeValue,
15 | useDisclosure,
16 | Image,
17 | } from "@chakra-ui/react";
18 | import {
19 | HamburgerIcon,
20 | CloseIcon,
21 | ChevronDownIcon,
22 | ChevronRightIcon,
23 | } from "@chakra-ui/icons";
24 | import logo from '../images/logo.png'
25 |
26 | export default function Header() {
27 | const { isOpen, onToggle } = useDisclosure();
28 |
29 | return (
30 |
31 |
42 |
47 | :
51 | }
52 | variant={"ghost"}
53 | aria-label={"Toggle Navigation"}
54 | />
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
70 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | );
91 | }
92 |
93 | const DesktopNav = () => {
94 | const linkColor = useColorModeValue("gray.600", "gray.200");
95 | const linkHoverColor = useColorModeValue("gray.800", "white");
96 | const popoverContentBgColor = useColorModeValue("white", "gray.800");
97 |
98 | return (
99 |
100 | {NAV_ITEMS.map((navItem) => (
101 |
102 |
103 |
104 |
118 | {navItem.label}
119 |
120 |
121 |
122 | {navItem.children && (
123 |
131 |
132 | {navItem.children.map((child) => (
133 |
134 | ))}
135 |
136 |
137 | )}
138 |
139 |
140 | ))}
141 |
142 | );
143 | };
144 |
145 | const DesktopSubNav = ({ label, href, subLabel }) => {
146 | return (
147 |
158 |
159 |
160 |
168 | {label}
169 |
170 |
171 | {subLabel}
172 |
173 |
174 |
183 |
184 |
185 |
186 |
187 | );
188 | };
189 |
190 | const MobileNav = () => {
191 | return (
192 |
197 | {NAV_ITEMS.map((navItem) => (
198 |
199 | ))}
200 |
201 | );
202 | };
203 |
204 | const MobileNavItem = ({ label, children, href }) => {
205 | const { isOpen, onToggle } = useDisclosure();
206 |
207 | return (
208 |
209 |
219 |
223 | {label}
224 |
225 | {children && (
226 |
233 | )}
234 |
235 |
236 |
237 |
245 | {children &&
246 | children.map((child) => (
247 |
248 | {child.label}
249 |
250 | ))}
251 |
252 |
253 |
254 | );
255 | };
256 |
257 | const NAV_ITEMS = [
258 | // {
259 | // label: "Find Work",
260 | // children: [
261 | // {
262 | // label: "Job Board",
263 | // subLabel: "Find your dream design job",
264 | // href: "#",
265 | // },
266 | // {
267 | // label: "Freelance Projects",
268 | // subLabel: "An exclusive list for contract work",
269 | // href: "#",
270 | // },
271 | // ],
272 | // },
273 | {
274 | label: "Skills",
275 | href: "#skills",
276 | },
277 | {
278 | label: "Projects",
279 | href: "#",
280 | },
281 | {
282 | label: "Freelance",
283 | href: "#freelance",
284 | },
285 | ];
286 |
--------------------------------------------------------------------------------