Files
familienarchiv/frontend/src/routes/admin/EntityNavSection.svelte
Marcel 45490ebaac fix(a11y): increase nav label font size from 9px to 11px in EntityNavSection
text-[9px] is below WCAG practical minimum and unreadable for senior users.
Changed all three occurrences (tablet button count, desktop link label,
flyout link label) to text-[11px].

Fixes @leonievoss: "text-[9px] is below 12px minimum"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 15:16:37 +02:00

91 lines
2.6 KiB
Svelte

<script lang="ts">
import type { Snippet } from 'svelte';
interface Props {
href: string;
label: string;
isActive: boolean;
count?: number;
topBorder?: boolean;
icon: Snippet;
variant?: 'sidebar' | 'flyout';
onTabletTrigger?: (event: MouseEvent) => void;
onFlyoutClick?: () => void;
}
let {
href,
label,
isActive,
count,
topBorder = false,
icon,
variant = 'sidebar',
onTabletTrigger,
onFlyoutClick
}: Props = $props();
</script>
{#if variant === 'sidebar'}
<!-- Tablet button (visible at md, hidden at lg) -->
<button
data-flyout-trigger
type="button"
aria-label={label}
title={label}
onclick={onTabletTrigger}
class="flex min-h-[44px] w-full flex-col items-center justify-center gap-0.5 border-l-[3px] py-3 transition-colors lg:hidden
{topBorder ? 'border-t border-white/10' : ''}
{isActive ? 'border-brand-mint bg-white/10' : (topBorder ? 'border-l-transparent hover:bg-white/5' : 'border-transparent hover:bg-white/5')}"
>
{@render icon()}
{#if count !== undefined}
<span class="text-[11px] font-bold {isActive ? 'text-white/80' : 'text-white/35'}"
>{count}</span
>
{/if}
</button>
<!-- Desktop link (hidden at md, visible at lg) -->
<a
href={href}
class="hidden flex-col items-start justify-center gap-0.5 border-l-[3px] px-3.5 py-2.5 transition-colors lg:flex
{topBorder ? 'border-t border-white/10' : ''}
{isActive ? 'border-brand-mint bg-white/10' : (topBorder ? 'border-l-transparent hover:bg-white/5' : 'border-transparent hover:bg-white/5')}"
aria-current={isActive ? 'page' : undefined}
title={label}
>
{@render icon()}
{#if count !== undefined}
<span class="text-[13px] font-black {isActive ? 'text-white/65' : 'text-white/50'}"
>{count}</span
>
{/if}
<span
class="text-[11px] font-extrabold tracking-[0.5px] uppercase {isActive ? 'text-white' : 'text-white/55'}"
>{label}</span
>
</a>
{:else}
<!-- Flyout link -->
<a
href={href}
onclick={onFlyoutClick}
class="flex flex-col items-start justify-center gap-0.5 border-l-[3px] px-3.5 py-2.5 transition-colors
{topBorder ? 'border-t border-white/10' : ''}
{isActive ? 'border-brand-mint bg-white/10' : (topBorder ? 'border-l-transparent hover:bg-white/5' : 'border-transparent hover:bg-white/5')}"
aria-current={isActive ? 'page' : undefined}
>
{@render icon()}
{#if count !== undefined}
<span class="text-[13px] font-black {isActive ? 'text-white/65' : 'text-white/50'}"
>{count}</span
>
{/if}
<span
class="text-[11px] font-extrabold tracking-[0.5px] uppercase {isActive ? 'text-white' : 'text-white/55'}"
>{label}</span
>
</a>
{/if}