diff --git a/js/app.js b/js/app.js
index 6fdfd35..c50caf5 100644
--- a/js/app.js
+++ b/js/app.js
@@ -1,6 +1,6 @@
//js/app.js
import { LosslessAPI } from './api.js';
-import { apiSettings, themeManager, nowPlayingSettings, downloadQualitySettings } from './storage.js';
+import { apiSettings, themeManager, nowPlayingSettings, downloadQualitySettings, sidebarSettings } from './storage.js';
import { UIRenderer } from './ui.js';
import { Player } from './player.js';
import { MultiScrobbler } from './multi-scrobbler.js';
@@ -313,6 +313,9 @@ document.addEventListener('DOMContentLoaded', async () => {
const currentTheme = themeManager.getTheme();
themeManager.setTheme(currentTheme);
+ // Restore sidebar state
+ sidebarSettings.restoreState();
+
initializeSettings(scrobbler, player, api, ui);
initializePlayerEvents(player, audioPlayer, scrobbler, ui);
initializeTrackInteractions(
@@ -405,6 +408,8 @@ document.addEventListener('DOMContentLoaded', async () => {
? ''
: '';
}
+ // Save sidebar state to localStorage
+ sidebarSettings.setCollapsed(isCollapsed);
});
document.getElementById('nav-back')?.addEventListener('click', () => {
diff --git a/js/storage.js b/js/storage.js
index 5990ff8..9a369e1 100644
--- a/js/storage.js
+++ b/js/storage.js
@@ -812,6 +812,34 @@ export const equalizerSettings = {
},
};
+export const sidebarSettings = {
+ STORAGE_KEY: 'monochrome-sidebar-collapsed',
+
+ isCollapsed() {
+ try {
+ return localStorage.getItem(this.STORAGE_KEY) === 'true';
+ } catch {
+ return false;
+ }
+ },
+
+ setCollapsed(collapsed) {
+ localStorage.setItem(this.STORAGE_KEY, collapsed ? 'true' : 'false');
+ },
+
+ restoreState() {
+ const isCollapsed = this.isCollapsed();
+ if (isCollapsed) {
+ document.body.classList.add('sidebar-collapsed');
+ const toggleBtn = document.getElementById('sidebar-toggle');
+ if (toggleBtn) {
+ toggleBtn.innerHTML =
+ '';
+ }
+ }
+ },
+};
+
export const queueManager = {
STORAGE_KEY: 'monochrome-queue',