24 lines
592 B
Text
24 lines
592 B
Text
---
|
|
import type { HTMLAttributes } from "astro/types";
|
|
|
|
type Props = HTMLAttributes<"a">;
|
|
|
|
const { href, class: className, ...props } = Astro.props;
|
|
const pathname = Astro.url.pathname.replace(import.meta.env.BASE_URL, "");
|
|
const subpath = pathname.match(/[^\/]+/g);
|
|
const isActive = href === pathname || href === "/" + (subpath?.[0] || "");
|
|
---
|
|
|
|
<a href={href} class:list={[className, { active: isActive }]} {...props}>
|
|
<slot />
|
|
</a>
|
|
<style>
|
|
a {
|
|
display: inline-block;
|
|
text-decoration: none;
|
|
}
|
|
a.active {
|
|
font-weight: bolder;
|
|
text-decoration: underline;
|
|
}
|
|
</style>
|