feat(player): Now Playing overlay + synced lyrics panel (A1/A11, §6.7)

Full-screen overlay expanded from the persistent player: big artwork or a
Lyrics tab. Synced (LRC) lyrics highlight the active line by playback position,
auto-scroll, and seek on tap; plain text is the fallback; missing lyrics offers
a re-fetch. Adds lyrics endpoint + LRC parser + isNowPlayingOpen player state.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Цвылев Александр Вадимович
2026-07-28 21:04:39 +03:00
parent 6efbf4b68b
commit 9d88d70be0
11 changed files with 509 additions and 0 deletions
+10
View File
@@ -8,6 +8,7 @@ export interface PlayerState {
volume: number;
muted: boolean;
isQueueOpen: boolean;
isNowPlayingOpen: boolean;
}
export const playerInitialState: PlayerState = {
@@ -18,6 +19,7 @@ export const playerInitialState: PlayerState = {
volume: 0.78,
muted: false,
isQueueOpen: false,
isNowPlayingOpen: false,
};
export const playerSlice = createSlice({
@@ -55,6 +57,12 @@ export const playerSlice = createSlice({
toggleQueue(state) {
state.isQueueOpen = !state.isQueueOpen;
},
toggleNowPlaying(state) {
state.isNowPlayingOpen = !state.isNowPlayingOpen;
},
setNowPlayingOpen(state, action: PayloadAction<boolean>) {
state.isNowPlayingOpen = action.payload;
},
},
});
@@ -68,5 +76,7 @@ export const {
setVolume,
toggleMute,
toggleQueue,
toggleNowPlaying,
setNowPlayingOpen,
} = playerSlice.actions;
export default playerSlice.reducer;