From 61f4e66ee019f423831dd71bb3c27b79c5e67c37 Mon Sep 17 00:00:00 2001 From: rohanpatel2002 Date: Thu, 14 May 2026 11:16:51 +0530 Subject: [PATCH] feat: 3D depth with creative bento grid layout and a fullscreen contact experience --- src/components/ContactModal.tsx | 128 ++++++++++++++++++++++++++++++++ src/components/Motion.tsx | 33 ++++++++ src/components/SiteHeader.tsx | 19 +++-- src/hooks/use-contact-modal.ts | 27 +++++++ src/routes/__root.tsx | 7 ++ src/routes/index.tsx | 99 ++++++++++++++++++------ 6 files changed, 281 insertions(+), 32 deletions(-) create mode 100644 src/components/ContactModal.tsx create mode 100644 src/hooks/use-contact-modal.ts diff --git a/src/components/ContactModal.tsx b/src/components/ContactModal.tsx new file mode 100644 index 0000000..7b421c5 --- /dev/null +++ b/src/components/ContactModal.tsx @@ -0,0 +1,128 @@ +import { motion, AnimatePresence } from "framer-motion"; +import { X, Mail, Linkedin, Github, Send } from "lucide-react"; +import { Magnetic } from "./Motion"; +import { useState } from "react"; +import { toast } from "sonner"; + +interface ContactModalProps { + isOpen: boolean; + onClose: () => void; +} + +export function ContactModal({ isOpen, onClose }: ContactModalProps) { + const [pending, setPending] = useState(false); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + setPending(true); + // Simulate API call + setTimeout(() => { + setPending(false); + toast.success("Message sent! I'll get back to you soon."); + onClose(); + }, 1500); + }; + + return ( + + {isOpen && ( + + + {/* Close button */} +
+ + + +
+ + {/* Content */} +
+
+

[ CONTACT ]

+

Let's start a
conversation.

+

+ I'm always open to discussing new projects, creative ideas or opportunities to be part of your visions. +

+
+ + +
+ + {/* Form */} +
+
+ + +
+
+ + +
+
+ +