queue panel

This commit is contained in:
Boof2015
2026-06-18 12:58:09 -04:00
parent 97522ea5cf
commit 5853edd933
13 changed files with 1807 additions and 38 deletions
+11
View File
@@ -1,6 +1,8 @@
import { create } from 'zustand';
import type { PlaybackState, Track } from '@/types/audio';
export type RepeatMode = 'none' | 'one' | 'all';
/**
* Player state — the UI's single source of truth, mirrored from the playback
* engine (RNTP at M0) by `usePlaybackSync`. Field names match desktop
@@ -14,12 +16,17 @@ interface PlayerStore {
duration: number;
volume: number; // 01
isMuted: boolean;
// Field names mirror desktop playerStore so queue/transport logic stays consistent.
shuffle: boolean;
repeat: RepeatMode;
setCurrentTrack: (track: Track | null) => void;
setPlaybackState: (state: PlaybackState) => void;
setProgress: (currentTime: number, duration: number) => void;
setVolume: (volume: number) => void;
setMuted: (isMuted: boolean) => void;
setShuffle: (shuffle: boolean) => void;
setRepeat: (repeat: RepeatMode) => void;
reset: () => void;
}
@@ -30,12 +37,16 @@ export const usePlayerStore = create<PlayerStore>((set) => ({
duration: 0,
volume: 1,
isMuted: false,
shuffle: false,
repeat: 'none',
setCurrentTrack: (currentTrack) => set({ currentTrack }),
setPlaybackState: (playbackState) => set({ playbackState }),
setProgress: (currentTime, duration) => set({ currentTime, duration }),
setVolume: (volume) => set({ volume }),
setMuted: (isMuted) => set({ isMuted }),
setShuffle: (shuffle) => set({ shuffle }),
setRepeat: (repeat) => set({ repeat }),
reset: () =>
set({ currentTrack: null, playbackState: 'stopped', currentTime: 0, duration: 0 }),
}));