From 442794fa81f3db70339fb3cf4530e94147a59fd0 Mon Sep 17 00:00:00 2001
From: vicrodh <103399283+vicrodh@users.noreply.github.com>
Date: Fri, 30 Jan 2026 00:12:12 -0600
Subject: [PATCH] fix(sidebar): button nesting and persist collapse state
- Change nested button to span with role="button" for favorites chevron
- Add localStorage persistence for collapse state of:
- Favorites section (expanded/collapsed)
- Playlists section (collapsed/expanded)
- Local Library section (collapsed/expanded)
- Folder collapse state intentionally not persisted
---
src/lib/components/Sidebar.svelte | 50 +++++++++++++++++++++++++++----
1 file changed, 45 insertions(+), 5 deletions(-)
diff --git a/src/lib/components/Sidebar.svelte b/src/lib/components/Sidebar.svelte
index a632ed2ba..4a87d0517 100644
--- a/src/lib/components/Sidebar.svelte
+++ b/src/lib/components/Sidebar.svelte
@@ -716,6 +716,42 @@
}
}
+ // Sidebar collapse state persistence
+ const SIDEBAR_COLLAPSE_KEY = 'qbz-sidebar-collapse-state';
+
+ interface SidebarCollapseState {
+ favoritesExpanded: boolean;
+ playlistsCollapsed: boolean;
+ localLibraryCollapsed: boolean;
+ }
+
+ function loadSidebarCollapseState() {
+ try {
+ const stored = localStorage.getItem(SIDEBAR_COLLAPSE_KEY);
+ if (stored) {
+ const state: SidebarCollapseState = JSON.parse(stored);
+ favoritesExpanded = state.favoritesExpanded ?? false;
+ playlistsCollapsed = state.playlistsCollapsed ?? false;
+ localLibraryCollapsed = state.localLibraryCollapsed ?? false;
+ }
+ } catch (err) {
+ console.debug('[Sidebar] Failed to load collapse state:', err);
+ }
+ }
+
+ function saveSidebarCollapseState() {
+ try {
+ const state: SidebarCollapseState = {
+ favoritesExpanded,
+ playlistsCollapsed,
+ localLibraryCollapsed
+ };
+ localStorage.setItem(SIDEBAR_COLLAPSE_KEY, JSON.stringify(state));
+ } catch (err) {
+ console.debug('[Sidebar] Failed to save collapse state:', err);
+ }
+ }
+
onMount(() => {
loadSortPreference();
loadUserPlaylists();
@@ -723,6 +759,7 @@
loadLocalTrackCounts();
loadFolders(); // Load playlist folders
loadFavoritesPreferences(); // Load favorites tab order
+ loadSidebarCollapseState(); // Load collapse states
// Subscribe to offline state changes
const unsubscribeOffline = subscribeOffline(() => {
@@ -1013,14 +1050,17 @@