From dc4db405d2991d3ec6a114f3b08d3fccd057d3ee Mon Sep 17 00:00:00 2001
From: Wolfgang Müller
Date: Thu, 13 Feb 2025 17:52:16 +0100
Subject: frontend: Migrate to Svelte 5

---
 frontend/src/lib/navigation/Link.svelte | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

(limited to 'frontend/src/lib/navigation/Link.svelte')

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>
-- 
cgit v1.2.3-2-gb3c3

