@devvistatech/devvista-kit 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -12
- package/LICENSE +6 -6
- package/README.md +15 -15
- package/app/about/page.tsx +298 -298
- package/app/adRequest/page.tsx +549 -549
- package/app/analytics/page.tsx +346 -346
- package/app/api/about/route.ts +306 -306
- package/app/api/adRequest/route.ts +567 -567
- package/app/api/analytics/[reportType]/route.ts +337 -337
- package/app/api/bio/route.ts +313 -313
- package/app/api/blog/route.ts +306 -306
- package/app/api/chat/route.ts +14 -14
- package/app/api/contact/route.ts +409 -409
- package/app/api/contacts/route.ts +224 -224
- package/app/api/files/route.ts +429 -429
- package/app/api/gallery-data/route.ts +735 -735
- package/app/api/schedule/route.ts +455 -455
- package/app/api/sync-user/route.ts +131 -131
- package/app/api/trial-request/route.ts +297 -297
- package/app/blog/[id]/page.tsx +288 -288
- package/app/blog/page.tsx +216 -216
- package/app/contact/page.tsx +284 -284
- package/app/faq/page.tsx +191 -191
- package/app/gallery/page.tsx +315 -315
- package/app/globals.css +58 -58
- package/app/layout.tsx +110 -110
- package/app/not-found.tsx +20 -20
- package/app/page.tsx +338 -338
- package/app/schedule/page.tsx +660 -660
- package/bin/init.js +219 -219
- package/components/addOns/functional/BioEditor.tsx +446 -446
- package/components/addOns/functional/CalendlyWidget.tsx +107 -107
- package/components/addOns/functional/ClassList.tsx +145 -145
- package/components/addOns/functional/ClassPopup.tsx +398 -398
- package/components/addOns/functional/ContactForm.tsx +284 -284
- package/components/addOns/functional/FileUploader.tsx +294 -294
- package/components/addOns/functional/ImageDescCarousel.tsx +730 -730
- package/components/addOns/functional/NewUserAnalytics.tsx +100 -100
- package/components/addOns/functional/ScheduleCarousel.tsx +171 -171
- package/components/addOns/functional/aboutSections/AboutSection.tsx +544 -544
- package/components/addOns/functional/aboutSections/constants/aboutSection.ts +65 -65
- package/components/addOns/functional/blogSections/BlogDashboard.tsx +184 -184
- package/components/addOns/functional/blogSections/BlogFormPopUp.tsx +554 -554
- package/components/addOns/functional/blogSections/BlogList.tsx +148 -148
- package/components/addOns/functional/blogSections/BlogSidebar.tsx +58 -58
- package/components/addOns/functional/blogSections/constants/blogDashboard.ts +28 -28
- package/components/addOns/functional/blogSections/constants/blogFormPopUp.ts +97 -97
- package/components/addOns/functional/blogSections/constants/blogList.ts +22 -22
- package/components/addOns/functional/blogSections/constants/blogSidebar.ts +15 -15
- package/components/addOns/functional/contactsDashboard/ContactsDashboard.tsx +366 -366
- package/components/addOns/functional/contactsDashboard/constants/contactsDashboard.ts +70 -70
- package/components/addOns/functional/galleries/GalleryComplex.tsx +836 -836
- package/components/addOns/functional/galleries/GallerySimple.tsx +509 -509
- package/components/addOns/functional/galleries/constants/galleryComplex.ts +106 -106
- package/components/addOns/functional/galleries/constants/gallerySimple.ts +76 -76
- package/components/addOns/functional/schedules/ScheduleGridOne.tsx +262 -262
- package/components/addOns/functional/schedules/ScheduleGridTwo.tsx +294 -294
- package/components/addOns/functional/schedules/ScheduleGridTwoBasic.tsx +288 -288
- package/components/addOns/functional/schedules/SchedulerForm.tsx +428 -428
- package/components/addOns/functional/schedules/constants/ScheduleGridTwo.ts +40 -40
- package/components/addOns/functional/schedules/constants/ScheduleGridTwoBasic.ts +40 -40
- package/components/addOns/functional/schedules/constants/SchedulerForm.ts +65 -65
- package/components/addOns/functional/schedules/constants/scheduleGridOne.ts +54 -54
- package/components/addOns/non-functional/AnnouncementBanner.tsx +46 -46
- package/components/addOns/non-functional/FeaturesSection.tsx +62 -62
- package/components/addOns/non-functional/Heros/HeroSection.tsx +142 -142
- package/components/addOns/non-functional/IconBubble.tsx +49 -49
- package/components/addOns/non-functional/SampleCarousel.tsx +204 -204
- package/components/addOns/non-functional/Testimonials.tsx +334 -334
- package/components/addOns/non-functional/ThreeSetGallery.tsx +63 -63
- package/components/addOns/non-functional/aboutSections/AboutSection.tsx +62 -62
- package/components/addOns/non-functional/aboutSections/constants/aboutSection.ts +24 -24
- package/components/addOns/non-functional/imageCarousels/ProductSlider.tsx +117 -117
- package/components/addOns/non-functional/imageCarousels/ProgramCarousel.tsx +232 -232
- package/components/addOns/non-functional/imageCarousels/constants/programCarousel.ts +39 -39
- package/components/addOns/non-functional/imageCarousels/constants/programSlider.ts +36 -36
- package/components/addOns/non-functional/spinner.tsx +21 -21
- package/components/footers/footer.tsx +453 -453
- package/components/navBars/navbar.tsx +310 -310
- package/components/other/accordion.tsx +58 -58
- package/components/other/admin-menu.tsx +68 -68
- package/components/other/alert-dialog.tsx +141 -141
- package/components/other/alert.tsx +59 -59
- package/components/other/aspect-ratio.tsx +7 -7
- package/components/other/avatar.tsx +50 -50
- package/components/other/badge.tsx +36 -36
- package/components/other/breadcrumb.tsx +115 -115
- package/components/other/button.tsx +738 -738
- package/components/other/calendar.tsx +66 -66
- package/components/other/card.tsx +86 -86
- package/components/other/carousel.tsx +274 -274
- package/components/other/chart.tsx +363 -363
- package/components/other/checkbox.tsx +30 -30
- package/components/other/collapsible.tsx +11 -11
- package/components/other/command.tsx +155 -155
- package/components/other/context-menu.tsx +200 -200
- package/components/other/dialog.tsx +122 -122
- package/components/other/drawer.tsx +118 -118
- package/components/other/dropdown-menu.tsx +200 -200
- package/components/other/form.tsx +179 -179
- package/components/other/hover-card.tsx +29 -29
- package/components/other/input-otp.tsx +71 -71
- package/components/other/input.tsx +25 -25
- package/components/other/label.tsx +26 -26
- package/components/other/menubar.tsx +236 -236
- package/components/other/mobile-icon.tsx +21 -21
- package/components/other/navigation-menu.tsx +128 -128
- package/components/other/pagination.tsx +117 -117
- package/components/other/popover.tsx +31 -31
- package/components/other/progress.tsx +28 -28
- package/components/other/radio-group.tsx +44 -44
- package/components/other/resizable.tsx +45 -45
- package/components/other/scroll-area.tsx +48 -48
- package/components/other/select.tsx +160 -160
- package/components/other/separator.tsx +31 -31
- package/components/other/sheet.tsx +140 -140
- package/components/other/skeleton.tsx +15 -15
- package/components/other/slider.tsx +28 -28
- package/components/other/social-icons.tsx +39 -39
- package/components/other/sonner.tsx +31 -31
- package/components/other/switch.tsx +29 -29
- package/components/other/table.tsx +117 -117
- package/components/other/tabs.tsx +55 -55
- package/components/other/textarea.tsx +24 -24
- package/components/other/toast.tsx +122 -122
- package/components/other/toaster.tsx +35 -35
- package/components/other/toggle-group.tsx +61 -61
- package/components/other/toggle.tsx +45 -45
- package/components/other/tooltip.tsx +30 -30
- package/components/theme-provider.tsx +8 -8
- package/components/types.ts +49 -49
- package/dist/.next/types/app/api/about/route.js +52 -0
- package/dist/.next/types/app/api/blog/route.js +52 -0
- package/dist/.next/types/app/api/files/route.js +52 -0
- package/dist/.next/types/app/api/schedule/route.js +52 -0
- package/dist/.next/types/app/api/sync-user/route.js +52 -0
- package/dist/.next/types/app/layout.js +22 -0
- package/dist/.next/types/app/page.js +22 -0
- package/dist/app/about/page.jsx +258 -0
- package/dist/app/adRequest/page.jsx +531 -0
- package/dist/app/analytics/page.jsx +298 -0
- package/dist/app/api/about/route.js +285 -0
- package/dist/app/api/adRequest/route.js +440 -0
- package/dist/app/api/analytics/[reportType]/route.js +357 -0
- package/dist/app/api/bio/route.js +293 -0
- package/dist/app/api/blog/route.js +366 -0
- package/dist/app/api/chat/route.js +58 -0
- package/dist/app/api/contact/route.js +163 -0
- package/dist/app/api/contacts/route.js +234 -0
- package/dist/app/api/files/route.js +444 -0
- package/dist/app/api/gallery-data/route.js +719 -0
- package/dist/app/api/schedule/route.js +461 -0
- package/dist/app/api/sync-user/route.js +186 -0
- package/dist/app/api/trial-request/route.js +165 -0
- package/dist/app/blog/[id]/page.jsx +312 -0
- package/dist/app/blog/page.jsx +210 -0
- package/dist/app/constants/about.js +32 -0
- package/dist/app/constants/adRequest.js +113 -0
- package/dist/app/constants/contact.js +40 -0
- package/dist/app/constants/faq.js +36 -0
- package/dist/app/constants/gallery.js +42 -0
- package/dist/app/constants/page.js +69 -0
- package/dist/app/constants/schedule.js +71 -0
- package/dist/app/contact/page.jsx +119 -0
- package/dist/app/faq/page.jsx +97 -0
- package/dist/app/gallery/page.jsx +281 -0
- package/dist/app/layout.jsx +45 -0
- package/dist/app/not-found.jsx +14 -0
- package/dist/app/page.jsx +324 -0
- package/dist/app/schedule/page.jsx +500 -0
- package/dist/components/addOns/functional/BioEditor.jsx +187 -0
- package/dist/components/addOns/functional/CalendlyWidget.jsx +61 -0
- package/dist/components/addOns/functional/ClassList.jsx +158 -0
- package/dist/components/addOns/functional/ClassPopup.jsx +300 -0
- package/dist/components/addOns/functional/ContactForm.jsx +219 -0
- package/dist/components/addOns/functional/FileUploader.jsx +222 -0
- package/dist/components/addOns/functional/ImageDescCarousel.jsx +491 -0
- package/dist/components/addOns/functional/NewUserAnalytics.jsx +71 -0
- package/dist/components/addOns/functional/ScheduleCarousel.jsx +68 -0
- package/dist/components/addOns/functional/aboutSections/AboutSection.jsx +372 -0
- package/dist/components/addOns/functional/aboutSections/constants/aboutSection.js +65 -0
- package/dist/components/addOns/functional/blogSections/BlogDashboard.jsx +111 -0
- package/dist/components/addOns/functional/blogSections/BlogFormPopUp.jsx +465 -0
- package/dist/components/addOns/functional/blogSections/BlogList.jsx +170 -0
- package/dist/components/addOns/functional/blogSections/BlogSidebar.jsx +35 -0
- package/dist/components/addOns/functional/blogSections/constants/blogDashboard.js +28 -0
- package/dist/components/addOns/functional/blogSections/constants/blogFormPopUp.js +97 -0
- package/dist/components/addOns/functional/blogSections/constants/blogList.js +22 -0
- package/dist/components/addOns/functional/blogSections/constants/blogSidebar.js +15 -0
- package/dist/components/addOns/functional/contactsDashboard/ContactsDashboard.jsx +355 -0
- package/dist/components/addOns/functional/contactsDashboard/constants/contactsDashboard.js +70 -0
- package/dist/components/addOns/functional/galleries/GalleryComplex.jsx +605 -0
- package/dist/components/addOns/functional/galleries/GallerySimple.jsx +363 -0
- package/dist/components/addOns/functional/galleries/constants/galleryComplex.js +106 -0
- package/dist/components/addOns/functional/galleries/constants/gallerySimple.js +76 -0
- package/dist/components/addOns/functional/schedules/ScheduleGridOne.jsx +167 -0
- package/dist/components/addOns/functional/schedules/ScheduleGridTwo.jsx +100 -0
- package/dist/components/addOns/functional/schedules/ScheduleGridTwoBasic.jsx +97 -0
- package/dist/components/addOns/functional/schedules/SchedulerForm.jsx +188 -0
- package/dist/components/addOns/functional/schedules/constants/ScheduleGridTwo.js +40 -0
- package/dist/components/addOns/functional/schedules/constants/ScheduleGridTwoBasic.js +40 -0
- package/dist/components/addOns/functional/schedules/constants/SchedulerForm.js +65 -0
- package/dist/components/addOns/functional/schedules/constants/scheduleGridOne.js +54 -0
- package/dist/components/addOns/non-functional/AnnouncementBanner.jsx +24 -0
- package/dist/components/addOns/non-functional/FeaturesSection.jsx +38 -0
- package/dist/components/addOns/non-functional/HeroSection.jsx +71 -0
- package/dist/components/addOns/non-functional/Heros/HeroSection.jsx +71 -0
- package/dist/components/addOns/non-functional/IconBubble.jsx +36 -0
- package/dist/components/addOns/non-functional/SampleCarousel.jsx +114 -0
- package/dist/components/addOns/non-functional/Testimonials.jsx +177 -0
- package/dist/components/addOns/non-functional/ThreeSetGallery.jsx +40 -0
- package/dist/components/addOns/non-functional/aboutSections/AboutSection.jsx +35 -0
- package/dist/components/addOns/non-functional/aboutSections/constants/aboutSection.js +24 -0
- package/dist/components/addOns/non-functional/imageCarousels/ProductSlider.jsx +80 -0
- package/dist/components/addOns/non-functional/imageCarousels/ProgramCarousel.jsx +155 -0
- package/dist/components/addOns/non-functional/imageCarousels/constants/programCarousel.js +39 -0
- package/dist/components/addOns/non-functional/imageCarousels/constants/programSlider.js +36 -0
- package/dist/components/addOns/non-functional/spinner.jsx +13 -0
- package/dist/components/footers/footer.jsx +217 -0
- package/dist/components/navBars/navbar.jsx +159 -0
- package/dist/components/other/accordion.jsx +40 -0
- package/dist/components/other/admin-menu.jsx +34 -0
- package/dist/components/other/alert-dialog.jsx +64 -0
- package/dist/components/other/alert.jsx +41 -0
- package/dist/components/other/aspect-ratio.jsx +4 -0
- package/dist/components/other/avatar.jsx +31 -0
- package/dist/components/other/badge.jsx +32 -0
- package/dist/components/other/breadcrumb.jsx +57 -0
- package/dist/components/other/button.jsx +322 -0
- package/dist/components/other/calendar.jsx +43 -0
- package/dist/components/other/card.jsx +44 -0
- package/dist/components/other/carousel.jsx +140 -0
- package/dist/components/other/chart.jsx +182 -0
- package/dist/components/other/checkbox.jsx +26 -0
- package/dist/components/other/collapsible.jsx +6 -0
- package/dist/components/other/command.jsx +68 -0
- package/dist/components/other/context-menu.jsx +88 -0
- package/dist/components/other/dialog.jsx +60 -0
- package/dist/components/other/drawer.jsx +60 -0
- package/dist/components/other/dropdown-menu.jsx +90 -0
- package/dist/components/other/form.jsx +89 -0
- package/dist/components/other/hover-card.jsx +23 -0
- package/dist/components/other/input-otp.jsx +46 -0
- package/dist/components/other/input.jsx +19 -0
- package/dist/components/other/label.jsx +23 -0
- package/dist/components/other/login-popup.jsx +1 -0
- package/dist/components/other/menubar.jsx +96 -0
- package/dist/components/other/mobile-icon.jsx +11 -0
- package/dist/components/other/navigation-menu.jsx +62 -0
- package/dist/components/other/pagination.jsx +63 -0
- package/dist/components/other/popover.jsx +25 -0
- package/dist/components/other/progress.jsx +23 -0
- package/dist/components/other/radio-group.jsx +31 -0
- package/dist/components/other/resizable.jsx +29 -0
- package/dist/components/other/scroll-area.jsx +36 -0
- package/dist/components/other/select.jsx +83 -0
- package/dist/components/other/separator.jsx +21 -0
- package/dist/components/other/sheet.jsx +74 -0
- package/dist/components/other/signup-popup.jsx +1 -0
- package/dist/components/other/skeleton.jsx +17 -0
- package/dist/components/other/slider.jsx +26 -0
- package/dist/components/other/social-icons.jsx +15 -0
- package/dist/components/other/sonner.jsx +27 -0
- package/dist/components/other/switch.jsx +23 -0
- package/dist/components/other/table.jsx +56 -0
- package/dist/components/other/tabs.jsx +32 -0
- package/dist/components/other/textarea.jsx +19 -0
- package/dist/components/other/toast.jsx +58 -0
- package/dist/components/other/toaster.jsx +31 -0
- package/dist/components/other/toggle-group.jsx +41 -0
- package/dist/components/other/toggle.jsx +39 -0
- package/dist/components/other/tooltip.jsx +24 -0
- package/dist/components/theme-provider.jsx +18 -0
- package/dist/components/types.js +1 -0
- package/dist/hooks/use-toast.js +135 -0
- package/dist/lib/auth-context.jsx +144 -0
- package/dist/lib/constants/about.js +32 -0
- package/dist/lib/constants/adRequest.js +113 -0
- package/dist/lib/constants/contact.js +40 -0
- package/dist/lib/constants/faq.js +36 -0
- package/dist/lib/constants/gallery.js +42 -0
- package/dist/lib/constants/page.js +69 -0
- package/dist/lib/constants/schedule.js +71 -0
- package/dist/lib/google-analytics.jsx +148 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/verify-user.js +142 -0
- package/dist/middleware.js +37 -0
- package/dist/tailwind.config.js +86 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/hooks/use-toast.ts +188 -188
- package/lib/auth-context.tsx +130 -130
- package/lib/constants/about.ts +34 -34
- package/lib/constants/adRequest.ts +113 -113
- package/lib/constants/contact.ts +40 -40
- package/lib/constants/faq.ts +34 -21
- package/lib/constants/gallery.ts +42 -42
- package/lib/constants/page.ts +69 -69
- package/lib/constants/schedule.ts +71 -71
- package/lib/google-analytics.tsx +97 -97
- package/lib/verify-user.ts +117 -117
- package/middleware.ts +42 -42
- package/netlify.toml +5 -5
- package/next.config.js +10 -10
- package/package.json +115 -115
- package/tailwind.config.ts +89 -89
- package/tsconfig.json +23 -23
|
@@ -1,311 +1,311 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import Link from "next/link";
|
|
4
|
-
import Image from "next/image";
|
|
5
|
-
import { cn } from "@/lib/utils";
|
|
6
|
-
import { usePathname } from "next/navigation";
|
|
7
|
-
import { useState, useRef, useEffect } from "react";
|
|
8
|
-
import { AnimatePresence, motion } from "framer-motion";
|
|
9
|
-
import { Facebook } from "lucide-react";
|
|
10
|
-
|
|
11
|
-
const Navbar = () => {
|
|
12
|
-
const pathname = usePathname();
|
|
13
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
14
|
-
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
15
|
-
const menuRef = useRef(null);
|
|
16
|
-
|
|
17
|
-
const leftLinks = [
|
|
18
|
-
{ href: "/", label: "Home" },
|
|
19
|
-
{ href: "/about", label: "About" },
|
|
20
|
-
{ href: "/contact", label: "Contact" },
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
const rightLinks = [
|
|
24
|
-
{ href: "/gallery", label: "Gallery" },
|
|
25
|
-
{ href: "/schedule", label: "Schedule & Rates" },
|
|
26
|
-
//testing
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
const mobileLinks = [
|
|
30
|
-
...leftLinks,
|
|
31
|
-
...rightLinks,
|
|
32
|
-
{ href: "/faq", label: "FAQ" },
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
const menuVariants = {
|
|
36
|
-
closed: { x: "100%" },
|
|
37
|
-
open: {
|
|
38
|
-
x: 0,
|
|
39
|
-
transition: { type: "spring", stiffness: 100, damping: 20 },
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const hamburgerLine = `h-1 w-8 transition-all duration-300 ease-in-out`;
|
|
44
|
-
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
const handleModalStateChange = (e: Event) => {
|
|
47
|
-
const customEvent = e as CustomEvent<{ isOpen: boolean }>;
|
|
48
|
-
setIsModalOpen(customEvent.detail.isOpen);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
window.addEventListener("modalStateChange", handleModalStateChange);
|
|
52
|
-
|
|
53
|
-
return () => {
|
|
54
|
-
window.removeEventListener("modalStateChange", handleModalStateChange);
|
|
55
|
-
};
|
|
56
|
-
}, []);
|
|
57
|
-
|
|
58
|
-
useEffect(() => {
|
|
59
|
-
const handleClickOutside = (event: MouseEvent) => {
|
|
60
|
-
if (
|
|
61
|
-
menuRef.current &&
|
|
62
|
-
!(menuRef.current as HTMLElement).contains(event.target as Node)
|
|
63
|
-
) {
|
|
64
|
-
setIsOpen(false);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
if (isOpen) {
|
|
69
|
-
document.addEventListener("mousedown", handleClickOutside);
|
|
70
|
-
} else {
|
|
71
|
-
document.removeEventListener("mousedown", handleClickOutside);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return () => {
|
|
75
|
-
document.removeEventListener("mousedown", handleClickOutside);
|
|
76
|
-
};
|
|
77
|
-
}, [isOpen]);
|
|
78
|
-
|
|
79
|
-
return (
|
|
80
|
-
<nav
|
|
81
|
-
className="fixed top-0 z-[1100] w-full bg-[#2D2D2D]/80 border-b-2 border-gray-800/50 shadow-lg py-6 transition-transform duration-300 ease-in-out"
|
|
82
|
-
style={{
|
|
83
|
-
transform: isModalOpen && !isOpen ? "translateY(-100%)" : "translateY(0)",
|
|
84
|
-
}}
|
|
85
|
-
>
|
|
86
|
-
<style jsx>{`
|
|
87
|
-
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800;900&display=swap");
|
|
88
|
-
|
|
89
|
-
:root {
|
|
90
|
-
--jubilee: #F47C7C;
|
|
91
|
-
--natural-white: #F7F7F7;
|
|
92
|
-
--caviar: #2D2D2D;
|
|
93
|
-
--storm-cloud: #4A636E;
|
|
94
|
-
--exuberant-blue: #FF69B4;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
* {
|
|
98
|
-
font-family: "Inter", sans-serif;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.gradient-text {
|
|
102
|
-
background: linear-gradient(90deg, var(--jubilee), --exuberant-blue));
|
|
103
|
-
-webkit-background-clip: text;
|
|
104
|
-
background-clip: text;
|
|
105
|
-
color: transparent;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
@media (max-width: 360px) {
|
|
109
|
-
.mobile-menu-link {
|
|
110
|
-
font-size: 1.25rem;
|
|
111
|
-
}
|
|
112
|
-
.mobile-menu-button {
|
|
113
|
-
font-size: 1rem;
|
|
114
|
-
padding: 0.5rem 1rem;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
`}</style>
|
|
118
|
-
|
|
119
|
-
<div className="w-full px-8 relative">
|
|
120
|
-
{/* Desktop View */}
|
|
121
|
-
<div className="hidden 2xl:flex h-28 items-center justify-center gap-8">
|
|
122
|
-
<div className="flex items-center space-x-4">
|
|
123
|
-
{leftLinks.map((link) => (
|
|
124
|
-
<Link
|
|
125
|
-
key={link.href}
|
|
126
|
-
href={link.href}
|
|
127
|
-
className={cn(
|
|
128
|
-
"relative text-xl sm:text-2xl font-extrabold uppercase tracking-wider transition-all duration-300 px-4",
|
|
129
|
-
pathname === link.href
|
|
130
|
-
? "text-white"
|
|
131
|
-
: "text-gray-300 hover:text-blue-400 hover:scale-105",
|
|
132
|
-
"after:content-[''] after:absolute after:bottom-[-8px] after:left-0 after:h-1 after:bg-blue-500 after:transition-all after:duration-300",
|
|
133
|
-
pathname === link.href
|
|
134
|
-
? "after:w-full"
|
|
135
|
-
: "after:w-0 hover:after:w-full"
|
|
136
|
-
)}
|
|
137
|
-
>
|
|
138
|
-
{link.label}
|
|
139
|
-
</Link>
|
|
140
|
-
))}
|
|
141
|
-
</div>
|
|
142
|
-
|
|
143
|
-
<Link href="/" className="flex items-center relative group">
|
|
144
|
-
<Image
|
|
145
|
-
src="/images/test.png"
|
|
146
|
-
alt="DevVista Kit Logo"
|
|
147
|
-
width={192}
|
|
148
|
-
height={192}
|
|
149
|
-
className="h-40 w-40 rounded-full transition-transform group-hover:scale-110 shadow-2xl"
|
|
150
|
-
/>
|
|
151
|
-
<div className="absolute -inset-4 bg-blue-500/30 rounded-full blur-2xl opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
152
|
-
</Link>
|
|
153
|
-
|
|
154
|
-
<div className="flex items-center space-x-4">
|
|
155
|
-
{rightLinks.map((link) => (
|
|
156
|
-
<Link
|
|
157
|
-
key={link.href}
|
|
158
|
-
href={link.href}
|
|
159
|
-
className={cn(
|
|
160
|
-
"relative text-xl sm:text-2xl font-extrabold uppercase tracking-wider transition-all duration-300 px-4",
|
|
161
|
-
pathname === link.href
|
|
162
|
-
? "text-white"
|
|
163
|
-
: "text-gray-300 hover:text-blue-400 hover:scale-105",
|
|
164
|
-
"after:content-[''] after:absolute after:bottom-[-8px] after:left-0 after:h-1 after:bg-blue-500 after:transition-all after:duration-300",
|
|
165
|
-
pathname === link.href
|
|
166
|
-
? "after:w-full"
|
|
167
|
-
: "after:w-0 hover:after:w-full"
|
|
168
|
-
)}
|
|
169
|
-
>
|
|
170
|
-
{link.label}
|
|
171
|
-
</Link>
|
|
172
|
-
))}
|
|
173
|
-
</div>
|
|
174
|
-
</div>
|
|
175
|
-
|
|
176
|
-
{/* Mobile View */}
|
|
177
|
-
<div className="2xl:hidden flex h-20 items-center justify-between">
|
|
178
|
-
<Link href="/" className="flex items-center relative group">
|
|
179
|
-
<Image
|
|
180
|
-
src="/images/test.png"
|
|
181
|
-
alt="DevVista Kit Logo"
|
|
182
|
-
width={120}
|
|
183
|
-
height={120}
|
|
184
|
-
className="h-30 w-30 rounded-full transition-transform group-hover:scale-110 shadow-2xl"
|
|
185
|
-
/>
|
|
186
|
-
<div className="absolute -inset-4 bg-gray-500/30 rounded-full blur-2xl opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
187
|
-
</Link>
|
|
188
|
-
|
|
189
|
-
<button
|
|
190
|
-
className="flex flex-col space-y-2 p-4 relative z-[1200]"
|
|
191
|
-
onClick={() => setIsOpen(!isOpen)}
|
|
192
|
-
aria-label="Toggle menu"
|
|
193
|
-
>
|
|
194
|
-
<span
|
|
195
|
-
className={cn(
|
|
196
|
-
hamburgerLine,
|
|
197
|
-
isOpen ? "rotate-45 translate-y-3 bg-white" : "bg-blue-500"
|
|
198
|
-
)}
|
|
199
|
-
/>
|
|
200
|
-
<span
|
|
201
|
-
className={cn(hamburgerLine, isOpen ? "opacity-0" : "bg-blue-500")}
|
|
202
|
-
/>
|
|
203
|
-
<span
|
|
204
|
-
className={cn(
|
|
205
|
-
hamburgerLine,
|
|
206
|
-
isOpen ? "-rotate-45 -translate-y-3 bg-white" : "bg-blue-500"
|
|
207
|
-
)}
|
|
208
|
-
/>
|
|
209
|
-
</button>
|
|
210
|
-
</div>
|
|
211
|
-
|
|
212
|
-
{/* Social Links */}
|
|
213
|
-
<div className="absolute bottom-4 right-8 flex items-center space-x-6 pr-16">
|
|
214
|
-
<a
|
|
215
|
-
href="https://www.facebook.com/"
|
|
216
|
-
className="flex items-center justify-center text-gray-300 hover:text-blue-400 transition-all text-lg sm:text-xl font-bold uppercase hover:scale-105"
|
|
217
|
-
aria-label="Visit our Facebook page"
|
|
218
|
-
role="link"
|
|
219
|
-
target="_blank"
|
|
220
|
-
rel="noopener noreferrer"
|
|
221
|
-
>
|
|
222
|
-
<Facebook className="ml-3 h-6 w-6 max-[1535px]:hidden" />
|
|
223
|
-
</a>
|
|
224
|
-
<div className="hidden 2xl:block">
|
|
225
|
-
<Link
|
|
226
|
-
href="/faq"
|
|
227
|
-
className={cn(
|
|
228
|
-
"relative text-lg sm:text-xl font-bold uppercase tracking-wider transition-all",
|
|
229
|
-
pathname === "/faq"
|
|
230
|
-
? "text-white"
|
|
231
|
-
: "text-gray-300 hover:text-blue-400 hover:scale-105",
|
|
232
|
-
"after:content-[''] after:absolute after:bottom-[-8px] after:left-0 after:h-1 after:bg-blue-500 after:transition-all after:duration-300",
|
|
233
|
-
pathname === "/faq"
|
|
234
|
-
? "after:w-full"
|
|
235
|
-
: "after:w-0 hover:after:w-full"
|
|
236
|
-
)}
|
|
237
|
-
>
|
|
238
|
-
FAQ
|
|
239
|
-
</Link>
|
|
240
|
-
</div>
|
|
241
|
-
</div>
|
|
242
|
-
|
|
243
|
-
{/* Mobile Menu */}
|
|
244
|
-
<AnimatePresence>
|
|
245
|
-
{isOpen && (
|
|
246
|
-
<motion.div
|
|
247
|
-
ref={menuRef}
|
|
248
|
-
variants={menuVariants}
|
|
249
|
-
initial="closed"
|
|
250
|
-
animate="open"
|
|
251
|
-
exit="closed"
|
|
252
|
-
className="fixed top-0 right-0 h-screen w-3/4 max-w-[280px] min-w-[200px] 2xl:hidden pt-24 px-4 shadow-2xl border-l-2 border-gray-700 bg-[#2D2D2D] z-[1200] overflow-y-auto"
|
|
253
|
-
>
|
|
254
|
-
<button
|
|
255
|
-
className="absolute top-6 right-6 text-gray-300 hover:text-blue-400 transition-all z-[1210]"
|
|
256
|
-
onClick={() => setIsOpen(false)}
|
|
257
|
-
aria-label="Close menu"
|
|
258
|
-
>
|
|
259
|
-
<svg
|
|
260
|
-
className="w-8 h-8"
|
|
261
|
-
fill="none"
|
|
262
|
-
stroke="currentColor"
|
|
263
|
-
viewBox="0 0 24 24"
|
|
264
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
265
|
-
>
|
|
266
|
-
<path
|
|
267
|
-
strokeLinecap="round"
|
|
268
|
-
strokeLinejoin="round"
|
|
269
|
-
strokeWidth={2}
|
|
270
|
-
d="M6 18L18 6M6 6l12 12"
|
|
271
|
-
/>
|
|
272
|
-
</svg>
|
|
273
|
-
</button>
|
|
274
|
-
|
|
275
|
-
<div className="flex flex-col space-y-6">
|
|
276
|
-
{mobileLinks.map((link) => (
|
|
277
|
-
<Link
|
|
278
|
-
key={link.href}
|
|
279
|
-
href={link.href}
|
|
280
|
-
onClick={() => setIsOpen(false)}
|
|
281
|
-
className={cn(
|
|
282
|
-
"text-xl sm:text-2xl font-extrabold uppercase tracking-wider transition-all mobile-menu-link",
|
|
283
|
-
pathname === link.href
|
|
284
|
-
? "text-white"
|
|
285
|
-
: "text-gray-300 hover:text-blue-400 hover:scale-105"
|
|
286
|
-
)}
|
|
287
|
-
>
|
|
288
|
-
{link.label}
|
|
289
|
-
</Link>
|
|
290
|
-
))}
|
|
291
|
-
<Link
|
|
292
|
-
href="https://www.facebook.com/"
|
|
293
|
-
className="text-xl sm:text-2xl font-extrabold uppercase tracking-wider text-gray-300 hover:text-blue-400 transition-all hover:scale-105 mobile-menu-link"
|
|
294
|
-
aria-label="Visit our Facebook page"
|
|
295
|
-
role="link"
|
|
296
|
-
target="_blank"
|
|
297
|
-
rel="noopener noreferrer"
|
|
298
|
-
onClick={() => setIsOpen(false)}
|
|
299
|
-
>
|
|
300
|
-
Facebook
|
|
301
|
-
</Link>
|
|
302
|
-
</div>
|
|
303
|
-
</motion.div>
|
|
304
|
-
)}
|
|
305
|
-
</AnimatePresence>
|
|
306
|
-
</div>
|
|
307
|
-
</nav>
|
|
308
|
-
);
|
|
309
|
-
};
|
|
310
|
-
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import Link from "next/link";
|
|
4
|
+
import Image from "next/image";
|
|
5
|
+
import { cn } from "@/lib/utils";
|
|
6
|
+
import { usePathname } from "next/navigation";
|
|
7
|
+
import { useState, useRef, useEffect } from "react";
|
|
8
|
+
import { AnimatePresence, motion } from "framer-motion";
|
|
9
|
+
import { Facebook } from "lucide-react";
|
|
10
|
+
|
|
11
|
+
const Navbar = () => {
|
|
12
|
+
const pathname = usePathname();
|
|
13
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
14
|
+
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
15
|
+
const menuRef = useRef(null);
|
|
16
|
+
|
|
17
|
+
const leftLinks = [
|
|
18
|
+
{ href: "/", label: "Home" },
|
|
19
|
+
{ href: "/about", label: "About" },
|
|
20
|
+
{ href: "/contact", label: "Contact" },
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const rightLinks = [
|
|
24
|
+
{ href: "/gallery", label: "Gallery" },
|
|
25
|
+
{ href: "/schedule", label: "Schedule & Rates" },
|
|
26
|
+
//testing
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const mobileLinks = [
|
|
30
|
+
...leftLinks,
|
|
31
|
+
...rightLinks,
|
|
32
|
+
{ href: "/faq", label: "FAQ" },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const menuVariants = {
|
|
36
|
+
closed: { x: "100%" },
|
|
37
|
+
open: {
|
|
38
|
+
x: 0,
|
|
39
|
+
transition: { type: "spring", stiffness: 100, damping: 20 },
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const hamburgerLine = `h-1 w-8 transition-all duration-300 ease-in-out`;
|
|
44
|
+
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
const handleModalStateChange = (e: Event) => {
|
|
47
|
+
const customEvent = e as CustomEvent<{ isOpen: boolean }>;
|
|
48
|
+
setIsModalOpen(customEvent.detail.isOpen);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
window.addEventListener("modalStateChange", handleModalStateChange);
|
|
52
|
+
|
|
53
|
+
return () => {
|
|
54
|
+
window.removeEventListener("modalStateChange", handleModalStateChange);
|
|
55
|
+
};
|
|
56
|
+
}, []);
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
const handleClickOutside = (event: MouseEvent) => {
|
|
60
|
+
if (
|
|
61
|
+
menuRef.current &&
|
|
62
|
+
!(menuRef.current as HTMLElement).contains(event.target as Node)
|
|
63
|
+
) {
|
|
64
|
+
setIsOpen(false);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
if (isOpen) {
|
|
69
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
70
|
+
} else {
|
|
71
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return () => {
|
|
75
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
76
|
+
};
|
|
77
|
+
}, [isOpen]);
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<nav
|
|
81
|
+
className="fixed top-0 z-[1100] w-full bg-[#2D2D2D]/80 border-b-2 border-gray-800/50 shadow-lg py-6 transition-transform duration-300 ease-in-out"
|
|
82
|
+
style={{
|
|
83
|
+
transform: isModalOpen && !isOpen ? "translateY(-100%)" : "translateY(0)",
|
|
84
|
+
}}
|
|
85
|
+
>
|
|
86
|
+
<style jsx>{`
|
|
87
|
+
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800;900&display=swap");
|
|
88
|
+
|
|
89
|
+
:root {
|
|
90
|
+
--jubilee: #F47C7C;
|
|
91
|
+
--natural-white: #F7F7F7;
|
|
92
|
+
--caviar: #2D2D2D;
|
|
93
|
+
--storm-cloud: #4A636E;
|
|
94
|
+
--exuberant-blue: #FF69B4;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
* {
|
|
98
|
+
font-family: "Inter", sans-serif;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.gradient-text {
|
|
102
|
+
background: linear-gradient(90deg, var(--jubilee), --exuberant-blue));
|
|
103
|
+
-webkit-background-clip: text;
|
|
104
|
+
background-clip: text;
|
|
105
|
+
color: transparent;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@media (max-width: 360px) {
|
|
109
|
+
.mobile-menu-link {
|
|
110
|
+
font-size: 1.25rem;
|
|
111
|
+
}
|
|
112
|
+
.mobile-menu-button {
|
|
113
|
+
font-size: 1rem;
|
|
114
|
+
padding: 0.5rem 1rem;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
`}</style>
|
|
118
|
+
|
|
119
|
+
<div className="w-full px-8 relative">
|
|
120
|
+
{/* Desktop View */}
|
|
121
|
+
<div className="hidden 2xl:flex h-28 items-center justify-center gap-8">
|
|
122
|
+
<div className="flex items-center space-x-4">
|
|
123
|
+
{leftLinks.map((link) => (
|
|
124
|
+
<Link
|
|
125
|
+
key={link.href}
|
|
126
|
+
href={link.href}
|
|
127
|
+
className={cn(
|
|
128
|
+
"relative text-xl sm:text-2xl font-extrabold uppercase tracking-wider transition-all duration-300 px-4",
|
|
129
|
+
pathname === link.href
|
|
130
|
+
? "text-white"
|
|
131
|
+
: "text-gray-300 hover:text-blue-400 hover:scale-105",
|
|
132
|
+
"after:content-[''] after:absolute after:bottom-[-8px] after:left-0 after:h-1 after:bg-blue-500 after:transition-all after:duration-300",
|
|
133
|
+
pathname === link.href
|
|
134
|
+
? "after:w-full"
|
|
135
|
+
: "after:w-0 hover:after:w-full"
|
|
136
|
+
)}
|
|
137
|
+
>
|
|
138
|
+
{link.label}
|
|
139
|
+
</Link>
|
|
140
|
+
))}
|
|
141
|
+
</div>
|
|
142
|
+
|
|
143
|
+
<Link href="/" className="flex items-center relative group">
|
|
144
|
+
<Image
|
|
145
|
+
src="/images/test.png"
|
|
146
|
+
alt="DevVista Kit Logo"
|
|
147
|
+
width={192}
|
|
148
|
+
height={192}
|
|
149
|
+
className="h-40 w-40 rounded-full transition-transform group-hover:scale-110 shadow-2xl"
|
|
150
|
+
/>
|
|
151
|
+
<div className="absolute -inset-4 bg-blue-500/30 rounded-full blur-2xl opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
152
|
+
</Link>
|
|
153
|
+
|
|
154
|
+
<div className="flex items-center space-x-4">
|
|
155
|
+
{rightLinks.map((link) => (
|
|
156
|
+
<Link
|
|
157
|
+
key={link.href}
|
|
158
|
+
href={link.href}
|
|
159
|
+
className={cn(
|
|
160
|
+
"relative text-xl sm:text-2xl font-extrabold uppercase tracking-wider transition-all duration-300 px-4",
|
|
161
|
+
pathname === link.href
|
|
162
|
+
? "text-white"
|
|
163
|
+
: "text-gray-300 hover:text-blue-400 hover:scale-105",
|
|
164
|
+
"after:content-[''] after:absolute after:bottom-[-8px] after:left-0 after:h-1 after:bg-blue-500 after:transition-all after:duration-300",
|
|
165
|
+
pathname === link.href
|
|
166
|
+
? "after:w-full"
|
|
167
|
+
: "after:w-0 hover:after:w-full"
|
|
168
|
+
)}
|
|
169
|
+
>
|
|
170
|
+
{link.label}
|
|
171
|
+
</Link>
|
|
172
|
+
))}
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
{/* Mobile View */}
|
|
177
|
+
<div className="2xl:hidden flex h-20 items-center justify-between">
|
|
178
|
+
<Link href="/" className="flex items-center relative group">
|
|
179
|
+
<Image
|
|
180
|
+
src="/images/test.png"
|
|
181
|
+
alt="DevVista Kit Logo"
|
|
182
|
+
width={120}
|
|
183
|
+
height={120}
|
|
184
|
+
className="h-30 w-30 rounded-full transition-transform group-hover:scale-110 shadow-2xl"
|
|
185
|
+
/>
|
|
186
|
+
<div className="absolute -inset-4 bg-gray-500/30 rounded-full blur-2xl opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
187
|
+
</Link>
|
|
188
|
+
|
|
189
|
+
<button
|
|
190
|
+
className="flex flex-col space-y-2 p-4 relative z-[1200]"
|
|
191
|
+
onClick={() => setIsOpen(!isOpen)}
|
|
192
|
+
aria-label="Toggle menu"
|
|
193
|
+
>
|
|
194
|
+
<span
|
|
195
|
+
className={cn(
|
|
196
|
+
hamburgerLine,
|
|
197
|
+
isOpen ? "rotate-45 translate-y-3 bg-white" : "bg-blue-500"
|
|
198
|
+
)}
|
|
199
|
+
/>
|
|
200
|
+
<span
|
|
201
|
+
className={cn(hamburgerLine, isOpen ? "opacity-0" : "bg-blue-500")}
|
|
202
|
+
/>
|
|
203
|
+
<span
|
|
204
|
+
className={cn(
|
|
205
|
+
hamburgerLine,
|
|
206
|
+
isOpen ? "-rotate-45 -translate-y-3 bg-white" : "bg-blue-500"
|
|
207
|
+
)}
|
|
208
|
+
/>
|
|
209
|
+
</button>
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
{/* Social Links */}
|
|
213
|
+
<div className="absolute bottom-4 right-8 flex items-center space-x-6 pr-16">
|
|
214
|
+
<a
|
|
215
|
+
href="https://www.facebook.com/"
|
|
216
|
+
className="flex items-center justify-center text-gray-300 hover:text-blue-400 transition-all text-lg sm:text-xl font-bold uppercase hover:scale-105"
|
|
217
|
+
aria-label="Visit our Facebook page"
|
|
218
|
+
role="link"
|
|
219
|
+
target="_blank"
|
|
220
|
+
rel="noopener noreferrer"
|
|
221
|
+
>
|
|
222
|
+
<Facebook className="ml-3 h-6 w-6 max-[1535px]:hidden" />
|
|
223
|
+
</a>
|
|
224
|
+
<div className="hidden 2xl:block">
|
|
225
|
+
<Link
|
|
226
|
+
href="/faq"
|
|
227
|
+
className={cn(
|
|
228
|
+
"relative text-lg sm:text-xl font-bold uppercase tracking-wider transition-all",
|
|
229
|
+
pathname === "/faq"
|
|
230
|
+
? "text-white"
|
|
231
|
+
: "text-gray-300 hover:text-blue-400 hover:scale-105",
|
|
232
|
+
"after:content-[''] after:absolute after:bottom-[-8px] after:left-0 after:h-1 after:bg-blue-500 after:transition-all after:duration-300",
|
|
233
|
+
pathname === "/faq"
|
|
234
|
+
? "after:w-full"
|
|
235
|
+
: "after:w-0 hover:after:w-full"
|
|
236
|
+
)}
|
|
237
|
+
>
|
|
238
|
+
FAQ
|
|
239
|
+
</Link>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
|
|
243
|
+
{/* Mobile Menu */}
|
|
244
|
+
<AnimatePresence>
|
|
245
|
+
{isOpen && (
|
|
246
|
+
<motion.div
|
|
247
|
+
ref={menuRef}
|
|
248
|
+
variants={menuVariants}
|
|
249
|
+
initial="closed"
|
|
250
|
+
animate="open"
|
|
251
|
+
exit="closed"
|
|
252
|
+
className="fixed top-0 right-0 h-screen w-3/4 max-w-[280px] min-w-[200px] 2xl:hidden pt-24 px-4 shadow-2xl border-l-2 border-gray-700 bg-[#2D2D2D] z-[1200] overflow-y-auto"
|
|
253
|
+
>
|
|
254
|
+
<button
|
|
255
|
+
className="absolute top-6 right-6 text-gray-300 hover:text-blue-400 transition-all z-[1210]"
|
|
256
|
+
onClick={() => setIsOpen(false)}
|
|
257
|
+
aria-label="Close menu"
|
|
258
|
+
>
|
|
259
|
+
<svg
|
|
260
|
+
className="w-8 h-8"
|
|
261
|
+
fill="none"
|
|
262
|
+
stroke="currentColor"
|
|
263
|
+
viewBox="0 0 24 24"
|
|
264
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
265
|
+
>
|
|
266
|
+
<path
|
|
267
|
+
strokeLinecap="round"
|
|
268
|
+
strokeLinejoin="round"
|
|
269
|
+
strokeWidth={2}
|
|
270
|
+
d="M6 18L18 6M6 6l12 12"
|
|
271
|
+
/>
|
|
272
|
+
</svg>
|
|
273
|
+
</button>
|
|
274
|
+
|
|
275
|
+
<div className="flex flex-col space-y-6">
|
|
276
|
+
{mobileLinks.map((link) => (
|
|
277
|
+
<Link
|
|
278
|
+
key={link.href}
|
|
279
|
+
href={link.href}
|
|
280
|
+
onClick={() => setIsOpen(false)}
|
|
281
|
+
className={cn(
|
|
282
|
+
"text-xl sm:text-2xl font-extrabold uppercase tracking-wider transition-all mobile-menu-link",
|
|
283
|
+
pathname === link.href
|
|
284
|
+
? "text-white"
|
|
285
|
+
: "text-gray-300 hover:text-blue-400 hover:scale-105"
|
|
286
|
+
)}
|
|
287
|
+
>
|
|
288
|
+
{link.label}
|
|
289
|
+
</Link>
|
|
290
|
+
))}
|
|
291
|
+
<Link
|
|
292
|
+
href="https://www.facebook.com/"
|
|
293
|
+
className="text-xl sm:text-2xl font-extrabold uppercase tracking-wider text-gray-300 hover:text-blue-400 transition-all hover:scale-105 mobile-menu-link"
|
|
294
|
+
aria-label="Visit our Facebook page"
|
|
295
|
+
role="link"
|
|
296
|
+
target="_blank"
|
|
297
|
+
rel="noopener noreferrer"
|
|
298
|
+
onClick={() => setIsOpen(false)}
|
|
299
|
+
>
|
|
300
|
+
Facebook
|
|
301
|
+
</Link>
|
|
302
|
+
</div>
|
|
303
|
+
</motion.div>
|
|
304
|
+
)}
|
|
305
|
+
</AnimatePresence>
|
|
306
|
+
</div>
|
|
307
|
+
</nav>
|
|
308
|
+
);
|
|
309
|
+
};
|
|
310
|
+
|
|
311
311
|
export default Navbar;
|