From a4140819d66462c68a8e8d472b7bd4cf9e2c9e54 Mon Sep 17 00:00:00 2001 From: liyunze <50455574+liyunze-coding@users.noreply.github.com> Date: Fri, 8 Aug 2025 15:39:23 +1000 Subject: [PATCH] updated contact form --- .prettierrc | 9 +- public/fonts/Antonio-Bold.ttf | Bin 0 -> 37840 bytes src/components/contact/ContactComponent.astro | 59 +++++ .../contact/ContactComponent.svelte | 45 ---- src/components/global/FooterComponent.astro | 8 +- src/components/global/NavBar.astro | 4 +- src/components/images/contact_photo.webp | Bin 0 -> 12234 bytes .../images/contact_photo_small.webp | Bin 0 -> 10752 bytes src/components/ui/AnimatedToolTip.tsx | 94 +++++++ src/components/ui/HoverNavigation.tsx | 236 +++++++++--------- src/layouts/Layout.astro | 7 + src/pages/contact.astro | 23 +- src/pages/index.astro | 2 +- 13 files changed, 294 insertions(+), 193 deletions(-) create mode 100644 public/fonts/Antonio-Bold.ttf create mode 100644 src/components/contact/ContactComponent.astro delete mode 100644 src/components/contact/ContactComponent.svelte create mode 100644 src/components/images/contact_photo.webp create mode 100644 src/components/images/contact_photo_small.webp create mode 100644 src/components/ui/AnimatedToolTip.tsx diff --git a/.prettierrc b/.prettierrc index 039dd3a..caf5b89 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,9 @@ { - "plugins": ["prettier-plugin-svelte", "prettier-plugin-astro","prettier-plugin-tailwindcss"], - "tabWidth": 4 + "plugins": [ + "prettier-plugin-svelte", + "prettier-plugin-astro", + "prettier-plugin-tailwindcss" + ], + "tabWidth": 4, + "useTabs": true } diff --git a/public/fonts/Antonio-Bold.ttf b/public/fonts/Antonio-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..595f1eaa66a3f936a409b0a99de60f819ebe40a0 GIT binary patch literal 37840 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 +
+ Ryan +
+
+
+
+

+ have an idea?
let's chat! +

+ +
+ rythondev@gmail.com +
+
+ + + diff --git a/src/components/contact/ContactComponent.svelte b/src/components/contact/ContactComponent.svelte deleted file mode 100644 index 7313b3c..0000000 --- a/src/components/contact/ContactComponent.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - -
-
-
- Get in Touch with me! -
-
- I'm always open to new opportunities and collaborations! -
- - Send me an email - -
- -
-
-
- - diff --git a/src/components/global/FooterComponent.astro b/src/components/global/FooterComponent.astro index 348cda1..8a0d84e 100644 --- a/src/components/global/FooterComponent.astro +++ b/src/components/global/FooterComponent.astro @@ -1,5 +1,5 @@ -
-
- Copyright © 2023-{new Date().getFullYear()} RythonDev. All Rights Reserved. -
+
+
+ Copyright © 2023-{new Date().getFullYear()} RythonDev. All Rights Reserved. +
diff --git a/src/components/global/NavBar.astro b/src/components/global/NavBar.astro index 99b3d5c..4536179 100644 --- a/src/components/global/NavBar.astro +++ b/src/components/global/NavBar.astro @@ -1,7 +1,7 @@ --- import { HoverNavigation } from "@/components/ui/HoverNavigation"; import { Image } from "astro:assets"; -import pfp from "@/components/images/pfp_new.webp"; +import pfp from "@/components/images/contact_photo_small.webp"; const navLinks = [ { @@ -28,7 +28,7 @@ const navLinks = [ ---
Ryan diff --git a/src/components/images/contact_photo.webp b/src/components/images/contact_photo.webp new file mode 100644 index 0000000000000000000000000000000000000000..e89c405cc962c55b188e31ce6196c5a17ba22e03 GIT binary patch literal 12234 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 Yuy?8yyql)JaH=x+d`xaj{{p}O0DVQ)WdHyG literal 0 HcmV?d00001 diff --git a/src/components/images/contact_photo_small.webp b/src/components/images/contact_photo_small.webp new file mode 100644 index 0000000000000000000000000000000000000000..13bf3e64c518e2505740eb74ecad40669f7ed8f8 GIT binary patch literal 10752 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 BP8 { + const [hovered, setHovered] = useState(false); + const animationFrameRef = useRef(null); + + const handleMouseMove = (event: any) => { + if (animationFrameRef.current) { + cancelAnimationFrame(animationFrameRef.current); + } + }; + + return ( + <> +
setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + + {hovered && ( + +
+
+
+ {text} +
+ + )} + + {!href && ( +
+ {children} +
+ )} + {href && ( + + {children} + + )} +
+ + ); +}; diff --git a/src/components/ui/HoverNavigation.tsx b/src/components/ui/HoverNavigation.tsx index 661511e..eaa00bb 100644 --- a/src/components/ui/HoverNavigation.tsx +++ b/src/components/ui/HoverNavigation.tsx @@ -1,136 +1,136 @@ import { cn } from "@/lib/utils"; import { - AnimatePresence, - motion, - useScroll, - useMotionValueEvent, + AnimatePresence, + motion, + useScroll, + useMotionValueEvent, } from "motion/react"; import { useState } from "react"; export const HoverNavigation = ({ - items, - className, + items, + className, }: { - items: { - label: string; - link: string; - }[]; - className?: string; + items: { + label: string; + link: string; + }[]; + className?: string; }) => { - let [hoveredIndex, setHoveredIndex] = useState(null); - const { scrollYProgress } = useScroll(); - const [visible, setVisible] = useState(true); + let [hoveredIndex, setHoveredIndex] = useState(null); + const { scrollYProgress } = useScroll(); + const [visible, setVisible] = useState(true); - useMotionValueEvent(scrollYProgress, "change", (current) => { - // Check if current is not undefined and is a number - if (typeof current === "number") { - let direction = current! - scrollYProgress.getPrevious()!; + useMotionValueEvent(scrollYProgress, "change", (current) => { + // Check if current is not undefined and is a number + if (typeof current === "number") { + let direction = current! - scrollYProgress.getPrevious()!; - if (scrollYProgress.get() < 0.05) { - setVisible(true); - } else { - if (direction > 0) { - setVisible(false); - } else { - setVisible(true); - } - } - } - }); + if (scrollYProgress.get() < 0.05 && current !== 1) { + setVisible(true); + } else { + if (direction > 0) { + setVisible(false); + } else { + setVisible(true); + } + } + } + }); - return ( - <> - - - Available for work - -
-
-
-
-
- - {items.map((item, idx) => ( - setHoveredIndex(idx)} - onMouseLeave={() => setHoveredIndex(null)} - > - - {hoveredIndex === idx && ( - - )} - - {item.label} - - ))} - - - ); + return ( + <> + + + Available for work + +
+
+
+
+
+ + {items.map((item, idx) => ( + setHoveredIndex(idx)} + onMouseLeave={() => setHoveredIndex(null)} + > + + {hoveredIndex === idx && ( + + )} + + {item.label} + + ))} + + + ); }; export const NavBarLink = ({ - className, - children, + className, + children, }: { - className?: string; - children: React.ReactNode; + className?: string; + children: React.ReactNode; }) => { - return ( -
- {children} -
- ); + return ( +
+ {children} +
+ ); }; diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index e97412d..027ee0d 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -51,6 +51,13 @@ import { ClientRouter } from "astro:transitions"; font-style: normal; } + @font-face { + font-family: "Antonio"; + src: url("/fonts/Antonio-Bold.ttf") format("truetype"); + font-weight: bold; + font-style: normal; + } + /* Montserrat Fonts */ @font-face { font-family: "Montserrat"; diff --git a/src/pages/contact.astro b/src/pages/contact.astro index 1bb9cac..7cbed4a 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -1,7 +1,7 @@ --- import NavBar from "../components/global/NavBar.astro"; import Layout from "../layouts/Layout.astro"; -import ContactComponent from "../components/contact/ContactComponent.svelte"; +import ContactComponent from "../components/contact/ContactComponent.astro"; import Card from "../components/global/Card.astro"; import Footer from "../components/global/FooterComponent.astro"; --- @@ -13,26 +13,7 @@ import Footer from "../components/global/FooterComponent.astro";

Contact

-
-
- -
-
-

- Looking for a young developer with fresh ideas? -

-
-
-
- Whether it's sponsorships or collaboration - opportunities, hit me up! -
-
-
-
-
+
diff --git a/src/pages/index.astro b/src/pages/index.astro index ac94a6e..98f6a43 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -6,7 +6,7 @@ import Intro from "../components/home/Intro.astro"; import Projects from "../components/projects/ProjectsComponent.astro"; import Experience from "../components/experience/ExperienceComponent.astro"; import Skills from "../components/skills/SkillsComponent.astro"; -import Contact from "../components/contact/ContactComponent.svelte"; +import Contact from "../components/contact/ContactComponent.astro"; import Footer from "../components/global/FooterComponent.astro"; ---