From 051e466b6d274711d9e4e14f48e62d422244b08c Mon Sep 17 00:00:00 2001 From: enscribe Date: Tue, 10 Sep 2024 22:09:57 -0700 Subject: [PATCH] feat: breadcrumbs and more --- package-lock.json | 23 ++++ package.json | 1 + public/512x512.png | Bin 0 -> 10166 bytes src/components/AuthorCard.astro | 5 +- src/components/BlogCard.astro | 11 +- src/components/Footer.astro | 4 - src/components/Header.astro | 18 +-- src/components/Link.astro | 5 +- src/components/PostNavigation.astro | 94 ++++++---------- src/components/SocialIcons.astro | 47 +++++--- src/components/ui/breadcrumb.tsx | 115 +++++++++++++++++++ src/components/ui/separator.tsx | 29 +++++ src/pages/404.astro | 53 +++++++-- src/pages/about.astro | 54 +++++---- src/pages/authors/[...slug].astro | 30 ++++- src/pages/authors/index.astro | 43 +++++-- src/pages/blog/[...slug].astro | 166 +++++++++++++++------------- src/pages/blog/index.astro | 23 ++++ src/pages/index.astro | 26 ++++- 19 files changed, 529 insertions(+), 218 deletions(-) create mode 100644 public/512x512.png create mode 100644 src/components/ui/breadcrumb.tsx create mode 100644 src/components/ui/separator.tsx diff --git a/package-lock.json b/package-lock.json index 06c0aea..9075589 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "@radix-ui/react-avatar": "^1.1.0", "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", @@ -2201,6 +2202,28 @@ } } }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz", + "integrity": "sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", diff --git a/package.json b/package.json index 33336f7..f538308 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@radix-ui/react-avatar": "^1.1.0", "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", diff --git a/public/512x512.png b/public/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..8e507ea3760a72f669d3f6b11ee651f79fae0bc9 GIT binary patch literal 10166 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 @@ -13,7 +14,7 @@ const { name, avatar, bio } = author.data - + diff --git a/src/components/BlogCard.astro b/src/components/BlogCard.astro index e2959ca..6c71699 100644 --- a/src/components/BlogCard.astro +++ b/src/components/BlogCard.astro @@ -3,6 +3,8 @@ import type { CollectionEntry } from 'astro:content' import { formatDate, readingTime } from '@lib/utils' import { Image } from 'astro:assets' import { Badge } from '@/components/ui/badge' +import { Separator } from '@/components/ui/separator' +import Link from './Link.astro' type Props = { entry: CollectionEntry<'blog'> @@ -19,7 +21,10 @@ const readTime = readingTime(entry.body) - + diff --git a/src/components/Footer.astro b/src/components/Footer.astro index dbccef4..8db871f 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,7 +1,6 @@ --- import Container from '@components/Container.astro' import SocialIcons from './SocialIcons.astro' -import { ModeToggle } from '@components/ui/mode-toggle' ---