From 9fc237d9eda667dce55f000f760d37b0868cdbd6 Mon Sep 17 00:00:00 2001 From: Till JS Date: Thu, 19 Mar 2026 12:41:23 +0100 Subject: [PATCH] feat(a11y): add skip-to-content links and ARIA labels to calendar, contacts, todo - Add skip-to-content link ("Zum Inhalt springen") to all 3 app layouts - Add id="main-content" to main content areas - Add ariaLabel prop to shared PillNavigation component - Set aria-label="Hauptnavigation" on nav elements in all 3 apps - Add aria-label to icon-only nav toggle button in todo Co-Authored-By: Claude Opus 4.6 (1M context) --- .../apps/web/src/routes/(app)/+layout.svelte | 9 +++++++++ .../apps/web/src/routes/(app)/+layout.svelte | 9 +++++++++ .../todo/apps/web/src/routes/(app)/+layout.svelte | 15 ++++++++++++++- .../src/navigation/PillNavigation.svelte | 9 ++++++++- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/apps/calendar/apps/web/src/routes/(app)/+layout.svelte b/apps/calendar/apps/web/src/routes/(app)/+layout.svelte index c58baecab..b9eda7e95 100644 --- a/apps/calendar/apps/web/src/routes/(app)/+layout.svelte +++ b/apps/calendar/apps/web/src/routes/(app)/+layout.svelte @@ -438,6 +438,13 @@
+ + Zum Inhalt springen + + {#if !settingsStore.immersiveModeEnabled} @@ -550,6 +558,7 @@ />
+ + Zum Inhalt springen + + {#if !contactsSettings.immersiveModeEnabled} @@ -310,6 +317,7 @@ profileHref="/profile" allAppsHref="/apps" onOpenInPanel={handleOpenInPanel} + ariaLabel="Hauptnavigation" /> @@ -342,6 +350,7 @@
diff --git a/apps/todo/apps/web/src/routes/(app)/+layout.svelte b/apps/todo/apps/web/src/routes/(app)/+layout.svelte index 5abc8636f..394ee0269 100644 --- a/apps/todo/apps/web/src/routes/(app)/+layout.svelte +++ b/apps/todo/apps/web/src/routes/(app)/+layout.svelte @@ -310,6 +310,13 @@
+ + Zum Inhalt springen + + {#if !todoSettings.immersiveModeEnabled} @@ -342,6 +349,7 @@ profileHref="/profile" allAppsHref="/apps" onOpenInPanel={handleOpenInPanel} + ariaLabel="Hauptnavigation" /> @@ -370,6 +378,7 @@ class="pillnav-fab" onclick={handlePillNavToggle} title={isPillNavCollapsed ? 'Navigation anzeigen' : 'Navigation ausblenden'} + aria-label={isPillNavCollapsed ? 'Navigation anzeigen' : 'Navigation ausblenden'} > {#if isPillNavCollapsed} @@ -401,7 +410,11 @@ onToggle={() => todoSettings.toggleImmersiveMode()} /> -
+
void; + /** Accessible label for the nav element */ + ariaLabel?: string; } let { @@ -296,6 +298,7 @@ onA11yReduceMotionChange, showA11yQuickToggles = false, onOpenInPanel, + ariaLabel, }: Props = $props(); // Type guards for elements @@ -443,7 +446,11 @@ {#if !isCollapsed} -