feat(immersive): replace Credits panel with Track Info panel

- Create TrackInfoPanel with full track metadata and credits
- Display: duration, quality, ISRC, label, and all performer credits
- Uses same backend as TrackInfoModal (get_track_info command)
- Rename tab from 'Credits' to 'Track Info' (player.trackInfo)
- Update keyboard shortcut from 'C' to 'T' for Track Info tab
- Fix actions.clearQueue -> player.clearQueue translation key
- Add i18n translations for trackInfo in EN/ES
- Delete old placeholder CreditsPanel
This commit is contained in:
vicrodh committed 2026-01-31 11:12:25 -06:00
1 parent 282fffc6a4
commit fe274c466d
8 files changed
+390 -85

No files matched your search

@@ -2,7 +2,7 @@
import { X, Disc3, LayoutGrid, Mic2, ListMusic, Music2, Info, Radio } from 'lucide-svelte';
import { t } from '$lib/i18n';
export type ImmersiveTab = 'lyrics' | 'credits' | 'suggestions' | 'queue';
export type ImmersiveTab = 'lyrics' | 'trackInfo' | 'suggestions' | 'queue';
export type DisplayMode = 'coverflow' | 'split' | 'lyrics-focus' | 'queue-focus';
interface Props {
@@ -13,7 +13,7 @@
onClose: () => void;
visible?: boolean;
hasLyrics?: boolean;
hasCredits?: boolean;
hasTrackInfo?: boolean;
hasSuggestions?: boolean;
}
@@ -25,13 +25,13 @@
onClose,
visible = true,
hasLyrics = true,
hasCredits = true,
hasTrackInfo = true,
hasSuggestions = true
}: Props = $props();
const tabs = $derived([
{ id: 'lyrics' as const, label: $t('player.lyrics'), icon: Music2, enabled: hasLyrics },
{ id: 'credits' as const, label: $t('player.credits') || 'Credits', icon: Info, enabled: hasCredits },
{ id: 'trackInfo' as const, label: $t('player.trackInfo') || 'Track Info', icon: Info, enabled: hasTrackInfo },
{ id: 'suggestions' as const, label: $t('player.suggestions') || 'Suggestions', icon: Radio, enabled: hasSuggestions },
{ id: 'queue' as const, label: $t('player.queue') || 'Queue', icon: ListMusic, enabled: true },
].filter(tab => tab.enabled));