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 @@ {$t('nav.favorites')} - + {#if favoritesExpanded}
@@ -1110,7 +1150,7 @@ > -