Restore saved scroll offset into ListState before select() so ratatui
preserves the current viewport position instead of scrolling from zero.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Moves ~265 lines of TOML theme constant data to a dedicated file,
reducing theme.rs from 553 to ~290 lines of logic.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Extract handle_artists_click and handle_playlists_click into
mouse_artists.rs and mouse_playlists.rs respectively, reducing
mouse.rs from ~530 to ~247 lines.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Terminal-based Subsonic music client in Rust featuring bit-perfect audio
playback via PipeWire sample rate switching, gapless playback, MPRIS2
desktop integration, cava audio visualizer with theme-matched gradients,
13 built-in color themes with custom TOML theme support, mouse controls,
artist/album browser, playlist support, and play queue management.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>