diff --git a/src/components/AuthorCard.astro b/src/components/AuthorCard.astro index bc07e1b..808d6b4 100644 --- a/src/components/AuthorCard.astro +++ b/src/components/AuthorCard.astro @@ -1,8 +1,8 @@ --- +import Link from '@/components/Link.astro' import AvatarComponent from '@/components/ui/avatar' +import type { Link as SocialLink } from '@/consts' import { cn } from '@/lib/utils' -import Link from '@components/Link.astro' -import type { Link as SocialLink } from '@consts' import type { CollectionEntry } from 'astro:content' import SocialIcons from './SocialIcons.astro' diff --git a/src/components/BlogCard.astro b/src/components/BlogCard.astro index 0151034..9fcf44d 100644 --- a/src/components/BlogCard.astro +++ b/src/components/BlogCard.astro @@ -2,7 +2,7 @@ import AvatarComponent from '@/components/ui/avatar' import { Badge } from '@/components/ui/badge' import { Separator } from '@/components/ui/separator' -import { formatDate, parseAuthors, readingTime } from '@lib/utils' +import { formatDate, parseAuthors, readingTime } from '@/lib/utils' import { Image } from 'astro:assets' import type { CollectionEntry } from 'astro:content' import Link from './Link.astro' @@ -29,12 +29,12 @@ const authors = await parseAuthors(entry.data.authors ?? []) > { entry.data.image && ( -
+
{entry.data.title}
diff --git a/src/components/Breadcrumbs.astro b/src/components/Breadcrumbs.astro index a6dccc7..ee53b66 100644 --- a/src/components/Breadcrumbs.astro +++ b/src/components/Breadcrumbs.astro @@ -36,13 +36,17 @@ const { items } = Astro.props {index === items.length - 1 ? ( - {item.icon && } - {item.label} + + {item.icon && } + {item.label} + ) : ( - {item.icon && } - {item.label} + + {item.icon && } + {item.label} + )} diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 58a62b7..84a4dcd 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,6 +1,6 @@ --- -import Container from '@components/Container.astro' -import { SOCIAL_LINKS } from '@consts' +import Container from '@/components/Container.astro' +import { SOCIAL_LINKS } from '@/consts' import SocialIcons from './SocialIcons.astro' --- diff --git a/src/components/Head.astro b/src/components/Head.astro index ec7bff9..0d902fd 100644 --- a/src/components/Head.astro +++ b/src/components/Head.astro @@ -2,6 +2,7 @@ import '../styles/global.css' import '../styles/katex.css' +import { SITE } from '@/consts' import { ViewTransitions } from 'astro:transitions' interface Props { @@ -36,6 +37,7 @@ const { title, description, image = '/static/twitter-card.png' } = Astro.props + diff --git a/src/components/Header.astro b/src/components/Header.astro index 7ddecc2..9ce799b 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -1,9 +1,9 @@ --- +import Container from '@/components/Container.astro' +import Link from '@/components/Link.astro' +import MobileMenu from '@/components/ui/mobile-menu' import { ModeToggle } from '@/components/ui/mode-toggle' -import Container from '@components/Container.astro' -import Link from '@components/Link.astro' -import MobileMenu from '@components/ui/mobile-menu' -import { NAV_LINKS, SITE } from '@consts' +import { NAV_LINKS, SITE } from '@/consts' import { Image } from 'astro:assets' import logo from '../../public/static/logo.svg' --- diff --git a/src/components/Link.astro b/src/components/Link.astro index ac53991..197a299 100644 --- a/src/components/Link.astro +++ b/src/components/Link.astro @@ -1,23 +1,15 @@ --- -import { cn } from '@lib/utils' +import { cn } from '@/lib/utils' type Props = { href: string external?: boolean class?: string underline?: boolean - 'data-heading'?: string [key: string]: any } -const { - href, - external, - class: className, - underline, - 'data-heading': dataHeading, - ...rest -} = Astro.props +const { href, external, class: className, underline, ...rest } = Astro.props --- diff --git a/src/components/PostNavigation.astro b/src/components/PostNavigation.astro index 8c21907..d08741a 100644 --- a/src/components/PostNavigation.astro +++ b/src/components/PostNavigation.astro @@ -1,7 +1,7 @@ --- +import Link from '@/components/Link.astro' import { buttonVariants } from '@/components/ui/button' import { cn } from '@/lib/utils' -import Link from '@components/Link.astro' import { Icon } from 'astro-icon/components' const { prevPost, nextPost } = Astro.props diff --git a/src/components/ProjectCard.astro b/src/components/ProjectCard.astro index 9e7b39f..f0923f8 100644 --- a/src/components/ProjectCard.astro +++ b/src/components/ProjectCard.astro @@ -1,6 +1,6 @@ --- +import Link from '@/components/Link.astro' import { Badge } from '@/components/ui/badge' -import Link from '@components/Link.astro' import { Image } from 'astro:assets' import type { CollectionEntry } from 'astro:content' @@ -14,7 +14,7 @@ const { project } = Astro.props
- + {project.data.name} ({ aria-label={ariaLabel} title={ariaLabel} class={buttonVariants({ variant: 'outline', size: 'icon' })} + external > diff --git a/src/components/TableOfContentsHeading.astro b/src/components/TableOfContentsHeading.astro index 375e45e..ee49956 100644 --- a/src/components/TableOfContentsHeading.astro +++ b/src/components/TableOfContentsHeading.astro @@ -10,7 +10,7 @@ const { heading } = Astro.props > {heading.text} diff --git a/src/components/ui/mobile-menu.tsx b/src/components/ui/mobile-menu.tsx index 9c77d26..ff68131 100644 --- a/src/components/ui/mobile-menu.tsx +++ b/src/components/ui/mobile-menu.tsx @@ -6,7 +6,7 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' -import { NAV_LINKS } from '@consts' +import { NAV_LINKS } from '@/consts' import { Menu } from 'lucide-react' const MobileMenu = () => { diff --git a/src/content/blog/the-state-of-static-blogs/index.mdx b/src/content/blog/the-state-of-static-blogs/index.mdx index 20575a0..ea859a2 100644 --- a/src/content/blog/the-state-of-static-blogs/index.mdx +++ b/src/content/blog/the-state-of-static-blogs/index.mdx @@ -70,18 +70,11 @@ This is a non-exhaustive list of features I believe are essential for a friction This needs to be in every single template. This is an example of it being used in my `{:tsx}` component: - ```astro showLineNumbers title="src/components/Link.astro" caption="A custom Link component with tailwind-merge and clsx" {17-21} + ```astro showLineNumbers title="src/components/Link.astro" caption="A custom Link component with tailwind-merge and clsx" {16-20} --- - import { cn } from '@lib/utils' + import { cn } from '@/lib/utils' - const { - href, - external, - class: className, - underline, - 'data-heading': dataHeading, - ...rest - } = Astro.props + const { href, external, class: className, underline, ...rest } = Astro.props --- diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 0666226..77e3be2 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -1,8 +1,8 @@ --- -import Footer from '@components/Footer.astro' -import Head from '@components/Head.astro' -import Header from '@components/Header.astro' -import { SITE } from '@consts' +import Footer from '@/components/Footer.astro' +import Head from '@/components/Head.astro' +import Header from '@/components/Header.astro' +import { SITE } from '@/consts' type Props = { title: string diff --git a/src/pages/404.astro b/src/pages/404.astro index 9e77a13..5b8a0cf 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -1,16 +1,16 @@ --- import Breadcrumbs from '@/components/Breadcrumbs.astro' +import Container from '@/components/Container.astro' +import Link from '@/components/Link.astro' import { buttonVariants } from '@/components/ui/button' -import Container from '@components/Container.astro' -import Link from '@components/Link.astro' -import { SITE } from '@consts' -import Layout from '@layouts/Layout.astro' -import { cn } from '@lib/utils' +import { SITE } from '@/consts' +import Layout from '@/layouts/Layout.astro' +import { cn } from '@/lib/utils' --- - +
- +
diff --git a/src/pages/authors/[...slug].astro b/src/pages/authors/[...slug].astro index df2747a..8f04414 100644 --- a/src/pages/authors/[...slug].astro +++ b/src/pages/authors/[...slug].astro @@ -1,9 +1,9 @@ --- +import AuthorCard from '@/components/AuthorCard.astro' +import BlogCard from '@/components/BlogCard.astro' import Breadcrumbs from '@/components/Breadcrumbs.astro' -import AuthorCard from '@components/AuthorCard.astro' -import BlogCard from '@components/BlogCard.astro' -import Container from '@components/Container.astro' -import Layout from '@layouts/Layout.astro' +import Container from '@/components/Container.astro' +import Layout from '@/layouts/Layout.astro' import { type CollectionEntry, getCollection } from 'astro:content' export async function getStaticPaths() { @@ -35,8 +35,8 @@ const authorPosts = allPosts diff --git a/src/pages/authors/index.astro b/src/pages/authors/index.astro index 7f3358e..ed1abab 100644 --- a/src/pages/authors/index.astro +++ b/src/pages/authors/index.astro @@ -1,8 +1,8 @@ --- +import AuthorCard from '@/components/AuthorCard.astro' import Breadcrumbs from '@/components/Breadcrumbs.astro' -import AuthorCard from '@components/AuthorCard.astro' -import Container from '@components/Container.astro' -import Layout from '@layouts/Layout.astro' +import Container from '@/components/Container.astro' +import Layout from '@/layouts/Layout.astro' import { getCollection } from 'astro:content' const authors = await getCollection('authors') @@ -10,7 +10,7 @@ const authors = await getCollection('authors') - + { authors.length > 0 ? (
    diff --git a/src/pages/blog/[...page].astro b/src/pages/blog/[...page].astro index 721f1b6..f1613a4 100644 --- a/src/pages/blog/[...page].astro +++ b/src/pages/blog/[...page].astro @@ -1,10 +1,10 @@ --- +import BlogCard from '@/components/BlogCard.astro' import Breadcrumbs from '@/components/Breadcrumbs.astro' +import Container from '@/components/Container.astro' import PaginationComponent from '@/components/ui/pagination' import { SITE } from '@/consts' -import BlogCard from '@components/BlogCard.astro' -import Container from '@components/Container.astro' -import Layout from '@layouts/Layout.astro' +import Layout from '@/layouts/Layout.astro' import type { PaginateFunction } from 'astro' import { type CollectionEntry, getCollection } from 'astro:content' @@ -38,8 +38,8 @@ const years = Object.keys(postsByYear).sort((a, b) => parseInt(b) - parseInt(a)) diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro index 134d56b..9ea6dd3 100644 --- a/src/pages/blog/[...slug].astro +++ b/src/pages/blog/[...slug].astro @@ -1,14 +1,14 @@ --- import Breadcrumbs from '@/components/Breadcrumbs.astro' +import Container from '@/components/Container.astro' +import Link from '@/components/Link.astro' +import PostNavigation from '@/components/PostNavigation.astro' +import TableOfContents from '@/components/TableOfContents.astro' import { badgeVariants } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Separator } from '@/components/ui/separator' -import Container from '@components/Container.astro' -import Link from '@components/Link.astro' -import PostNavigation from '@components/PostNavigation.astro' -import TableOfContents from '@components/TableOfContents.astro' -import Layout from '@layouts/Layout.astro' -import { formatDate, parseAuthors, readingTime } from '@lib/utils' +import Layout from '@/layouts/Layout.astro' +import { formatDate, parseAuthors, readingTime } from '@/lib/utils' import { Icon } from 'astro-icon/components' import { Image } from 'astro:assets' import { type CollectionEntry, getCollection } from 'astro:content' @@ -61,7 +61,10 @@ const authors = await parseAuthors(post.data.authors ?? []) > { diff --git a/src/pages/index.astro b/src/pages/index.astro index 0951c0c..68c6b3b 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,4 +1,7 @@ --- +import BlogCard from '@/components/BlogCard.astro' +import Container from '@/components/Container.astro' +import Link from '@/components/Link.astro' import { buttonVariants } from '@/components/ui/button' import { Card, @@ -7,11 +10,8 @@ import { CardHeader, CardTitle, } from '@/components/ui/card' -import BlogCard from '@components/BlogCard.astro' -import Container from '@components/Container.astro' -import Link from '@components/Link.astro' -import { SITE } from '@consts' -import Layout from '@layouts/Layout.astro' +import { SITE } from '@/consts' +import Layout from '@/layouts/Layout.astro' import { getCollection } from 'astro:content' const blog = (await getCollection('blog')) diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts index f0271f4..d376eb4 100644 --- a/src/pages/rss.xml.ts +++ b/src/pages/rss.xml.ts @@ -1,5 +1,5 @@ import rss from '@astrojs/rss' -import { SITE } from '@consts' +import { SITE } from '@/consts' import type { APIContext } from 'astro' import { getCollection } from 'astro:content' diff --git a/src/pages/tags/[...slug].astro b/src/pages/tags/[...slug].astro index cec0e44..fcbeda9 100644 --- a/src/pages/tags/[...slug].astro +++ b/src/pages/tags/[...slug].astro @@ -1,8 +1,8 @@ --- -import BlogCard from '@components/BlogCard.astro' -import Breadcrumbs from '@components/Breadcrumbs.astro' -import Container from '@components/Container.astro' -import Layout from '@layouts/Layout.astro' +import BlogCard from '@/components/BlogCard.astro' +import Breadcrumbs from '@/components/Breadcrumbs.astro' +import Container from '@/components/Container.astro' +import Layout from '@/layouts/Layout.astro' import { Icon } from 'astro-icon/components' import { type CollectionEntry, getCollection } from 'astro:content' @@ -37,7 +37,12 @@ export async function getStaticPaths() { description={`A collection of posts tagged with ${tag}.`} > - +

    Posts tagged with

    - +

    Tags

    diff --git a/src/styles/global.css b/src/styles/global.css index 6ffed90..7f4ea77 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -77,13 +77,13 @@ .disable-transitions, .disable-transitions * { - transition: none !important; + @apply !transition-none; } } @layer components { article { - @apply prose-headings:scroll-mt-20 prose-headings:break-words prose-p:break-words prose-pre:!px-0; + @apply prose-headings:scroll-mt-20 prose-headings:break-words prose-p:break-words prose-a:!decoration-muted-foreground prose-a:underline-offset-[3px] prose-a:transition-colors hover:prose-a:!decoration-foreground prose-pre:!px-0 prose-img:mx-auto; .katex-display { @apply overflow-x-auto overflow-y-hidden py-4; @@ -169,7 +169,7 @@ /* Copy button */ > button:has(> span) { - @apply right-0.5 top-[3px] m-0 size-8 rounded-md bg-transparent p-1 backdrop-blur-none; + @apply right-0.5 top-[3px] m-0 size-8 rounded-md bg-background p-1 backdrop-blur-none transition-all; } } } diff --git a/tsconfig.json b/tsconfig.json index 250bb33..494564d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "strictNullChecks": true, "baseUrl": ".", "paths": { - "@*": ["./src/*"] + "@/*": ["./src/*"] }, "jsx": "react-jsx", "jsxImportSource": "react"