feat(queue): add Timeline display mode (#1004)

* feat(queue): add Timeline display mode

A third queue display mode alongside Queue and Playlist. Timeline shows
the full queue anchored on the current track — played history above
(dimmed), upcoming below — with 'History' and 'Up next' dividers and the
current row auto-centered. It already follows shuffle order since the
queue is stored in play order. The header mode button now cycles
queue → timeline → playlist; Settings gains a third option.

* i18n(queue): Timeline mode strings (9 locales)

* docs(changelog): note Timeline queue mode (#1004)
This commit is contained in:
Frank Stellmacher
2026-06-05 16:19:20 +02:00
committed by GitHub
parent 41157ccaca
commit 1c23305887
25 changed files with 113 additions and 19 deletions
+1 -1
View File
@@ -106,7 +106,7 @@ export function computeAuthStoreRehydration(state: AuthState): Partial<AuthState
// Missing key (pre-feature persist) / garbage maps to 'queue' — the default
// mode, which lists only upcoming tracks.
const VALID_QUEUE_DISPLAY_MODES = new Set<string>(['playlist', 'queue']);
const VALID_QUEUE_DISPLAY_MODES = new Set<string>(['playlist', 'queue', 'timeline']);
const queueDisplayModeMigrated = VALID_QUEUE_DISPLAY_MODES.has(
(state as { queueDisplayMode?: unknown }).queueDisplayMode as string,
)
+4 -2
View File
@@ -42,7 +42,7 @@ export type DurationMode = 'total' | 'remaining' | 'eta';
* - `queue`: the list shows upcoming tracks only — the current track lives in
* the header and drops out of the list once it has played.
*/
export type QueueDisplayMode = 'playlist' | 'queue';
export type QueueDisplayMode = 'playlist' | 'queue' | 'timeline';
export type LoggingMode = 'off' | 'normal' | 'debug';
/**
* Wall-clock format for ETA / sleep-timer labels. `'auto'` follows the user's
@@ -185,7 +185,9 @@ export interface AuthState {
queueNowPlayingCollapsed: boolean;
/** Queue header duration chip mode (cycle: total → remaining → ETA). */
queueDurationDisplayMode: DurationMode;
/** Queue panel render mode: full timeline (`playlist`) vs. upcoming-only (`queue`). */
/** Queue panel render mode: full list from top (`playlist`), upcoming-only
* (`queue`), or full list centered on the current track with history above
* and up-next below (`timeline`). */
queueDisplayMode: QueueDisplayMode;
/** Alpha: native hi-res sample rate output (disabled = safe 44.1 kHz mode) */