From c840c60998bee0782298a26495d9007feb6aa5f5 Mon Sep 17 00:00:00 2001 From: Joseph Burdick Date: Wed, 5 Jun 2024 02:32:34 -0400 Subject: [PATCH] Add responsive nav --- bun.lockb | Bin 154393 -> 164401 bytes package.json | 5 +- src/api/index.ts | 1 + src/api/profile.md | 6 +- src/app/_content/Intro.tsx | 13 ++- src/components/global/ContactLinks.tsx | 34 +++---- src/components/global/MobileNav.tsx | 88 ++++++++++++++++ src/components/ui/button.tsx | 57 +++++++++++ src/components/ui/drawer.tsx | 118 ++++++++++++++++++++++ src/lib/{types/experience.ts => types.ts} | 5 + 10 files changed, 303 insertions(+), 24 deletions(-) create mode 100644 src/components/global/MobileNav.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/drawer.tsx rename src/lib/{types/experience.ts => types.ts} (82%) diff --git a/bun.lockb b/bun.lockb index a361273d86f6da63f0dd46606543d23ea30a7474..bba0046b645cdafd0099223cbf6a66cd9d43d253 100755 GIT binary patch delta 35885 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 MCAI`Ph}WC{A0m>m!~g&Q delta 30291 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 diff --git a/package.json b/package.json index 1c45704..53cd408 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ }, "dependencies": { "@radix-ui/react-avatar": "^1.0.4", + "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-slot": "^1.0.2", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "front-matter": "^4.0.2", @@ -20,7 +22,8 @@ "react": "^18", "react-dom": "^18", "tailwind-merge": "^2.3.0", - "tailwindcss-animate": "^1.0.7" + "tailwindcss-animate": "^1.0.7", + "vaul": "^0.9.1" }, "devDependencies": { "@types/node": "^20", diff --git a/src/api/index.ts b/src/api/index.ts index da76ba6..e15144f 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -17,6 +17,7 @@ interface Result { [key: string]: FrontMatterContent; } const searchRegex = /\$\{basePath\}/gi + export async function getData(): Promise { const dataDir = path.join(process.cwd(), "src/api/") const files = await fs.readdir(dataDir) diff --git a/src/api/profile.md b/src/api/profile.md index add32c6..ee3615b 100644 --- a/src/api/profile.md +++ b/src/api/profile.md @@ -9,15 +9,15 @@ links: email: url: "mailto:josephdburdick@gmail.com" label: "Email" - github: - url: "https://github.com/josephdburdick" - label: "Github" linkedin: url: "https://linkedin.com/in/josephdburdick" label: "LinkedIn" readcv: url: "https://read.cv/josephdburdick" label: "Read.cv" + github: + url: "https://github.com/josephdburdick" + label: "Github" intro: > j0e.me is the eponymous online home of Joe Burdick— web designer, software engineer, leader, and photographer. --- diff --git a/src/app/_content/Intro.tsx b/src/app/_content/Intro.tsx index e75952c..f6b6dd1 100644 --- a/src/app/_content/Intro.tsx +++ b/src/app/_content/Intro.tsx @@ -5,10 +5,16 @@ import { useData } from "@/lib/providers/DataProvider" import WorkAvailability from "@/components/global/WorkAvailability" import ContactLinks from "@/components/global/ContactLinks" import LogoMarquee from "@/components/global/LogoMarquee" +import { ContactLink } from "@/lib/types" +import MobileNav from "@/components/global/MobileNav" function Intro() { const { data } = useData() const { logo } = data.site.attributes + + const links: ContactLink[] = Object.values(data.profile.attributes.links) + const filter = ["Email"] + return (
@@ -51,8 +57,11 @@ function Intro() { {data.profile.attributes.location}
- - + !filter.includes(label))} + className="hidden md:block" + /> +
diff --git a/src/components/global/ContactLinks.tsx b/src/components/global/ContactLinks.tsx index 0e2e747..a012c9d 100644 --- a/src/components/global/ContactLinks.tsx +++ b/src/components/global/ContactLinks.tsx @@ -1,24 +1,22 @@ -import { useData } from "@/lib/providers/DataProvider" -type ContactLink = { - url: string; - label: string; +import { ContactLink } from "@/lib/types" + +type Props = { + className?: string; + links: ContactLink[]; }; -export default function ContactLinks() { - const { data } = useData() - const contactLinks: ContactLink[] = data.profile.attributes.links - const filter = ["Email"] - const links = Object.values(contactLinks) - .filter(({ label }) => !filter.includes(label)) - .map(({ url, label }, index: number) => ( -
  • - - {label} - -
  • - )) + +export default function ContactLinks(props: Props) { + const { className = "", links: linksProp = [] } = props + const links = linksProp.map(({ url, label }, index: number) => ( +
  • + + {label} + +
  • + )) return ( -