mirror of
https://github.com/zoriya/v10.git
synced 2026-08-06 22:28:24 +00:00
feat(site): prefetch all links
This commit is contained in:
@@ -28,7 +28,9 @@ export default defineConfig({
|
||||
},
|
||||
}),
|
||||
],
|
||||
prefetch: true,
|
||||
prefetch: {
|
||||
prefetchAll: true,
|
||||
},
|
||||
|
||||
markdown: {
|
||||
// a lot of these are defaults but I'm setting them just to be explicit
|
||||
|
||||
@@ -9,12 +9,10 @@ type NavLink = {
|
||||
href: string;
|
||||
label: string;
|
||||
external?: boolean;
|
||||
prefetch?: boolean;
|
||||
};
|
||||
const navLinks: NavLink[] = [
|
||||
{ href: '/', label: 'Home' },
|
||||
// docs require a redirect, so, let's prefetch them to hide that latency
|
||||
{ href: '/docs', label: 'Docs', prefetch: true },
|
||||
{ href: '/docs', label: 'Docs' },
|
||||
// { href: '/blog', label: 'Blog' },
|
||||
{ href: '/privacy', label: 'Privacy' },
|
||||
];
|
||||
@@ -31,11 +29,7 @@ const { class: className } = Astro.props;
|
||||
<div class="flex justify-center sm:justify-start">
|
||||
{
|
||||
navLinks.map((link) => (
|
||||
<a
|
||||
href={link.href}
|
||||
class="intent:underline px-3 py-2 inline-flex gap-1 items-center"
|
||||
data-astro-prefetch={link.prefetch ? '' : undefined}
|
||||
>
|
||||
<a href={link.href} class="intent:underline px-3 py-2 inline-flex gap-1 items-center">
|
||||
{link.label} {link.external ? <ArrowUpRight size="1em" /> : null}
|
||||
</a>
|
||||
))
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
import type { NavLink } from './NavBar.astro';
|
||||
import { Dialog } from '@base-ui-components/react/dialog';
|
||||
import clsx from 'clsx';
|
||||
import { ArrowUpRight, Menu, X } from 'lucide-react';
|
||||
import { DISCORD_INVITE_URL, GITHUB_REPO_URL } from '@/consts';
|
||||
|
||||
interface NavLink {
|
||||
href: string;
|
||||
label: string;
|
||||
matchPath: string | null;
|
||||
external?: boolean;
|
||||
}
|
||||
|
||||
export interface MobileNavProps {
|
||||
navLinks: NavLink[];
|
||||
currentPath: string;
|
||||
@@ -52,7 +58,6 @@ export default function MobileNav({ navLinks, currentPath, dark = false, childre
|
||||
href={link.href}
|
||||
className={clsx('text-lg px-6 py-3', link.matchPath && currentPath.startsWith(link.matchPath) ? 'underline' : 'intent:underline')}
|
||||
aria-current={link.matchPath && currentPath.startsWith(link.matchPath) ? 'page' : undefined}
|
||||
data-astro-prefetch={link.prefetch ? '' : undefined}
|
||||
>
|
||||
{link.label}
|
||||
{' '}
|
||||
|
||||
@@ -10,16 +10,14 @@ export interface Props {
|
||||
class?: string;
|
||||
}
|
||||
|
||||
export type NavLink = {
|
||||
type NavLink = {
|
||||
href: string;
|
||||
label: string;
|
||||
matchPath: string | null;
|
||||
external?: boolean;
|
||||
prefetch?: boolean;
|
||||
};
|
||||
const navLinks: NavLink[] = [
|
||||
// docs require a redirect, so, let's prefetch them to hide that latency
|
||||
{ href: '/docs', label: 'Docs', matchPath: '/docs', prefetch: true },
|
||||
{ href: '/docs', label: 'Docs', matchPath: '/docs' },
|
||||
// { href: '/blog', label: 'Blog', matchPath: '/blog' },
|
||||
];
|
||||
|
||||
@@ -53,7 +51,6 @@ const { class: className, dark = false } = Astro.props;
|
||||
: 'border-transparent intent:border-current',
|
||||
]}
|
||||
aria-current={link.matchPath && currentPath.startsWith(link.matchPath) ? 'page' : undefined}
|
||||
data-astro-prefetch={link.prefetch ? '' : undefined}
|
||||
>
|
||||
{link.label} {link.external ? <ArrowUpRight size="1em" /> : null}
|
||||
</a>
|
||||
|
||||
@@ -24,6 +24,6 @@ const { url: href } = resolveDocsLinkUrl({
|
||||
});
|
||||
---
|
||||
|
||||
<A href={href} data-astro-prefetch>
|
||||
<A href={href}>
|
||||
<slot />
|
||||
</A>
|
||||
|
||||
Reference in New Issue
Block a user