refactor(nav): move feedback pill into user dropdown across all apps

Feedback is now a sub-item under the Konto (user) dropdown in PillNavigation
instead of a standalone pill in the nav bar. Added feedbackHref prop to
PillNavigation (defaults to /feedback) and removed feedback from nav items
in all 11 apps and shared app-routes config.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-19 21:00:38 +01:00
parent e848fa5342
commit ac9ce55128
13 changed files with 18 additions and 17 deletions

View file

@ -209,7 +209,6 @@
icon: 'settings',
onClick: () => (showSettingsModal = true),
},
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
]);
// Navigation items filtered by visibility settings (with fallback for guest mode)

View file

@ -85,7 +85,6 @@
{ href: '/spaces', label: 'Spaces', icon: 'building' },
{ href: '/documents', label: 'Dokumente', icon: 'archive' },
{ href: '/archive', label: 'Archiv', icon: 'list' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
];
// Navigation items filtered by visibility settings (with fallback for guest mode)

View file

@ -172,7 +172,6 @@
{ href: '/world-clock', label: 'Weltzeituhr', icon: 'globe' },
{ href: '/life', label: 'Lebensuhr', icon: 'heart' },
{ href: '/settings', label: 'Einstellungen', icon: 'settings' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
];
// Navigation items filtered by visibility settings

View file

@ -129,7 +129,6 @@
{ href: '/', label: 'Kontakte', icon: 'users' },
{ href: '/tags', label: 'Tags', icon: 'tag' },
{ href: '/settings', label: 'Einstellungen', icon: 'settings' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
{ href: '/help', label: 'Hilfe', icon: 'help-circle' },
];

View file

@ -142,7 +142,6 @@
{ href: '/documents', label: 'Dokumente', icon: 'file-text' },
{ href: '/tokens', label: 'Tokens', icon: 'sparkle' },
{ href: '/settings', label: 'Einstellungen', icon: 'settings' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
];
const navItems = $derived(

View file

@ -84,7 +84,6 @@
{ href: '/credits', label: 'Credits', icon: 'creditCard' },
{ href: '/gifts', label: 'Geschenke', icon: 'gift' },
{ href: '/api-keys', label: 'API Keys', icon: 'key' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
{ href: '/profile', label: 'Profil', icon: 'user' },
{ href: '/settings', label: 'Settings', icon: 'settings' },
];

View file

@ -66,7 +66,6 @@
{ href: '/projects', label: 'Editor', icon: 'waveform' },
{ href: '/upload', label: 'Upload', icon: 'upload' },
{ href: '/settings', label: 'Settings', icon: 'settings' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
{ href: '/help', label: 'Help', icon: 'help-circle' },
];

View file

@ -56,10 +56,7 @@
let userEmail = $derived(auth.user?.email);
// Navigation items for Presi
const navItems: PillNavItem[] = [
{ href: '/', label: 'Decks', icon: 'document' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
];
const navItems: PillNavItem[] = [{ href: '/', label: 'Decks', icon: 'document' }];
// Routes where nav should be hidden (present mode, shared view)
const hideNavRoutes = ['/present/', '/shared/'];

View file

@ -68,7 +68,6 @@
{ href: '/favorites', label: 'Favoriten', icon: 'heart' },
{ href: '/trash', label: 'Papierkorb', icon: 'trash' },
{ href: '/search', label: 'Suche', icon: 'search' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
];
// Navigation shortcuts

View file

@ -178,7 +178,6 @@
{ href: '/spiral', label: 'Spiral', icon: 'sparkles' },
{ href: '/tags', label: 'Tags', icon: 'tag' },
{ href: '/settings', label: 'Einstellungen', icon: 'settings' },
{ href: '/feedback', label: 'Feedback', icon: 'chat' },
]);
// Navigation items filtered by visibility settings (with fallback for guest mode)

View file

@ -95,7 +95,6 @@
{ href: '/favorites', label: $_('nav.favorites'), icon: 'heart' },
{ href: '/lists', label: $_('nav.lists'), icon: 'list' },
{ href: '/settings', label: $_('nav.settings'), icon: 'settings' },
{ href: '/feedback', label: $_('nav.feedback'), icon: 'chat' },
]);
// Filter hidden nav items
@ -104,7 +103,7 @@
);
// Navigation routes for keyboard shortcuts
const navRoutes = ['/', '/categories', '/favorites', '/lists', '/settings', '/feedback'];
const navRoutes = ['/', '/categories', '/favorites', '/lists', '/settings'];
function handleToggleTheme() {
theme.toggleMode();

View file

@ -99,7 +99,6 @@ export const APP_ROUTES: Record<string, AppRouteConfig> = {
{ path: '/spaces', label: 'Spaces', icon: 'folder' },
{ path: '/documents', label: 'Dokumente', icon: 'document' },
{ path: '/archive', label: 'Archiv', icon: 'archive' },
{ path: '/feedback', label: 'Feedback', icon: 'chat' },
{ path: '/settings', label: 'Einstellungen', icon: 'settings', alwaysVisible: true },
],
},
@ -139,7 +138,6 @@ export const APP_ROUTES: Record<string, AppRouteConfig> = {
{ path: '/authors', label: 'Autoren', icon: 'users' },
{ path: '/favorites', label: 'Favoriten', icon: 'star' },
{ path: '/lists', label: 'Listen', icon: 'list' },
{ path: '/feedback', label: 'Feedback', icon: 'chat' },
{ path: '/settings', label: 'Einstellungen', icon: 'settings', alwaysVisible: true },
],
},

View file

@ -257,6 +257,8 @@
onOpenInPanel?: (appId: string, url: string) => void;
/** Accessible label for the nav element */
ariaLabel?: string;
/** Feedback page href (shown in user dropdown). Set to empty string to hide. */
feedbackHref?: string;
}
let {
@ -299,6 +301,7 @@
showA11yQuickToggles = false,
onOpenInPanel,
ariaLabel,
feedbackHref = '/feedback',
}: Props = $props();
// Type guards for elements
@ -810,6 +813,19 @@
},
active: currentPath === settingsHref,
},
...(feedbackHref
? [
{
id: 'feedback',
label: 'Feedback',
icon: 'chat',
onClick: () => {
window.location.href = feedbackHref;
},
active: currentPath === feedbackHref,
},
]
: []),
...(showLanguageSwitcher && languageItems.length > 0
? [
{ id: 'language-divider', label: '', divider: true },