feat(header): floating module header with cyclic nav and shared search
Replace the full-width top bar with a fixed floating header of glass pills: a fixed-position ModuleName (accent dot + label + prev/next cyclic module stepper) and a shared SearchBar. The header's left edge is anchored as if the nav rail and filter sidebar were both open, so it never shifts on collapse or module change; the right edge leaves a 10% margin. - ModuleName label width is measured live from the reachable modules' titles in the current language, recomputing on a language or account change. - Module names come from a shared moduleLabelKey (the same short labels as the nav rail); NavSidebar and the header now read from one source (lib/modules.ts). - The arrows step cyclically through moduleOrder(me) — dynamic, no hard-coded targets, wrapping at both ends. - Search is hoisted into the SearchBar for feed (YouTube search), plex, channels (including the Discovery tab) and playlists (new); Go button, Enter triggers it. - The Playlists left rail now reaches the top; header clearance via --hdr-h.
This commit is contained in:
@@ -4,6 +4,10 @@
|
||||
"clearSearch": "Suche löschen",
|
||||
"searchYoutube": "Auf YouTube suchen",
|
||||
"searchYoutubeTip": "Live auf YouTube nach diesem Begriff suchen (verbraucht gemeinsames API-Kontingent). Du kannst auch Enter drücken.",
|
||||
"go": "Los",
|
||||
"goTip": "Suchen (oder Enter drücken)",
|
||||
"prevModule": "Vorheriges Modul",
|
||||
"nextModule": "Nächstes Modul",
|
||||
"channelManager": "Kanalverwaltung",
|
||||
"usageStats": "Nutzung & Statistik",
|
||||
"scheduler": "Planer",
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
"ytReadonly": "Von YouTube synchronisiert — Änderungen werden zurücksynchronisiert",
|
||||
"noneYet": "Noch keine Wiedergabelisten",
|
||||
"newPlaylist": "Neue Liste…",
|
||||
"searchPlaceholder": "Wiedergabelisten suchen…",
|
||||
"noMatches": "Keine passende Wiedergabeliste.",
|
||||
"itemCount_one": "{{count}} Video",
|
||||
"itemCount_other": "{{count}} Videos",
|
||||
"pickOne": "Wähle links eine Liste.",
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
"clearSearch": "Clear search",
|
||||
"searchYoutube": "Search YouTube",
|
||||
"searchYoutubeTip": "Search live on YouTube for this term (uses shared API quota). You can also press Enter.",
|
||||
"go": "Go",
|
||||
"goTip": "Search (or press Enter)",
|
||||
"prevModule": "Previous module",
|
||||
"nextModule": "Next module",
|
||||
"channelManager": "Channel manager",
|
||||
"usageStats": "Usage & stats",
|
||||
"scheduler": "Scheduler",
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
"ytReadonly": "Synced from YouTube — edits sync back",
|
||||
"noneYet": "No playlists yet",
|
||||
"newPlaylist": "New playlist…",
|
||||
"searchPlaceholder": "Search playlists…",
|
||||
"noMatches": "No playlists match.",
|
||||
"itemCount_one": "{{count}} video",
|
||||
"itemCount_other": "{{count}} videos",
|
||||
"pickOne": "Pick a playlist on the left.",
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
"clearSearch": "Keresés törlése",
|
||||
"searchYoutube": "Keresés a YouTube-on",
|
||||
"searchYoutubeTip": "Élő keresés a YouTube-on erre a kifejezésre (a közös API-kvótát fogyasztja). Entert is nyomhatsz.",
|
||||
"go": "Mehet",
|
||||
"goTip": "Keresés (vagy Enter)",
|
||||
"prevModule": "Előző modul",
|
||||
"nextModule": "Következő modul",
|
||||
"channelManager": "Csatornakezelő",
|
||||
"usageStats": "Használat és statisztika",
|
||||
"scheduler": "Ütemező",
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
"ytReadonly": "YouTube-ról szinkronizálva — a módosítások visszaszinkronizálhatók",
|
||||
"noneYet": "Még nincs lejátszási lista",
|
||||
"newPlaylist": "Új lista…",
|
||||
"searchPlaceholder": "Listák keresése…",
|
||||
"noMatches": "Nincs találó lista.",
|
||||
"itemCount_one": "{{count}} videó",
|
||||
"itemCount_other": "{{count}} videó",
|
||||
"pickOne": "Válassz egy listát a bal oldalon.",
|
||||
|
||||
Reference in New Issue
Block a user