summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/lib/navigation/Link.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/lib/navigation/Link.svelte')
-rw-r--r--frontend/src/lib/navigation/Link.svelte29
1 files changed, 20 insertions, 9 deletions
diff --git a/frontend/src/lib/navigation/Link.svelte b/frontend/src/lib/navigation/Link.svelte
index be09a36..9c7e218 100644
--- a/frontend/src/lib/navigation/Link.svelte
+++ b/frontend/src/lib/navigation/Link.svelte
@@ -1,20 +1,31 @@
<script lang="ts">
- import { page } from '$app/stores';
+ import { page } from '$app/state';
import { accelerator, type Shortcut } from '$lib/Shortcuts';
- import type { HTMLAttributeAnchorTarget } from 'svelte/elements';
+ import type { Snippet } from 'svelte';
+ import type { HTMLAnchorAttributes } from 'svelte/elements';
- export let href: string;
- export let title: string;
- export let accel: Shortcut;
- export let matchExact = false;
- export let target: HTMLAttributeAnchorTarget | undefined = undefined;
- $: active = matchExact ? $page.url.pathname === href : $page.url.pathname.startsWith(href);
+ 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-indigo-700 [&.active]:bg-indigo-700">
<a class="focus-background flex items-center" {target} {title} {href} use:accelerator={accel}>
<div class="flex p-3">
- <slot />
+ {@render children?.()}
</div>
</a>
</li>