blob: d18fe3e743cdaa89a44bde6ada84c525ef768532 (
plain) (
tree)
|
|
<script lang="ts">
import { page } from '$app/state';
import { accelerator, type Shortcut } from '$lib/Shortcuts';
import type { Snippet } from 'svelte';
import type { HTMLAnchorAttributes } from 'svelte/elements';
interface Props extends Pick<HTMLAnchorAttributes, 'title' | 'target'> {
href: string;
accel: Shortcut;
matchExact?: boolean;
children?: Snippet;
}
let { href, title, accel, matchExact = false, target, children }: Props = $props();
let active = $derived.by(() => {
if (matchExact) {
return page.url.pathname === href;
} else {
return page.url.pathname.startsWith(href);
}
});
</script>
<li class:active class="items-center hover:bg-slate-600 [&.active]:bg-indigo-700">
<a
class="flex items-center focus-visible:bg-slate-600 focus-visible:outline-hidden"
{target}
{title}
{href}
use:accelerator={accel}
>
<div class="flex p-3">
{@render children?.()}
</div>
</a>
</li>
|