Scaffold global navigation aligned to routes plan
Build out the full web route map from music-selfhost-routes.md as scaffolding (no functionality on new screens): - Full route tree: /login, /albums/:id, /artists/:id, /playlists(+detail), /discover, /upload, metadata editor (single + batch), /storage/maintenance, /queue, nested /settings and /admin, and a 404. - Sidebar rebuilt to the A1 spec with permission-gated Discover/Upload. - ProtectedRoute gains requirePermission; Permission exported. - AppShell wraps Outlet in a Suspense boundary for lazy routes. - Reusable Placeholder + SubNav; Settings/Admin become nested layouts. - Settings/Profile: wired language + theme selectors. - Remove orphaned Home feature (web has no Home; / -> /library) and the now-unused house icon + nav.home keys. - i18n keys (en + ru) and CSS for page-title/sub-nav. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+34
-1
@@ -1,9 +1,9 @@
|
||||
const en = {
|
||||
nav: {
|
||||
home: 'Home',
|
||||
library: 'Library',
|
||||
search: 'Search & download',
|
||||
downloads: 'Downloads',
|
||||
upload: 'Upload',
|
||||
storage: 'Storage',
|
||||
playlists: 'Playlists',
|
||||
newPlaylist: 'New playlist',
|
||||
@@ -145,6 +145,39 @@ const en = {
|
||||
downloads: 'Downloads',
|
||||
search: 'Search & Download',
|
||||
storage: 'Storage',
|
||||
login: 'Sign in',
|
||||
artist: 'Artist',
|
||||
playlists: 'Playlists',
|
||||
upload: 'Upload files',
|
||||
metadata: 'Edit metadata',
|
||||
metadataBatch: 'Edit metadata (batch)',
|
||||
storageMaintenance: 'Storage maintenance',
|
||||
queue: 'Play queue',
|
||||
},
|
||||
settings: {
|
||||
language: 'Language',
|
||||
theme: 'Theme',
|
||||
themeDark: 'Dark',
|
||||
themeLight: 'Light',
|
||||
tabs: {
|
||||
profile: 'Profile',
|
||||
playback: 'Playback',
|
||||
scrobbling: 'Scrobbling',
|
||||
instance: 'Instance',
|
||||
},
|
||||
},
|
||||
admin: {
|
||||
userDetail: 'User',
|
||||
tabs: {
|
||||
users: 'Users',
|
||||
sources: 'Sources',
|
||||
instance: 'Instance',
|
||||
},
|
||||
},
|
||||
notFound: {
|
||||
title: 'Page not found',
|
||||
description: "This screen doesn't exist yet.",
|
||||
backToLibrary: 'Back to library',
|
||||
},
|
||||
} as const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user