diff --git a/app/templates/base.html b/app/templates/base.html index 9a538fd..d35dbc1 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -5,7 +5,7 @@ FlowDeck — {% block title_prefix %}Home{% endblock %} - + @@ -170,7 +170,8 @@ + + + @@ -969,6 +993,7 @@ window.appState = this; this.loadSidebarConfig(); this.loadAgents(); + this.initSidebarWidth(); document.addEventListener('fd-toggle-sidebar', () => this.toggleSidebar()); }, agentList: [], @@ -989,6 +1014,12 @@ sidebarCollapsed: false, sidebarPeek: false, mobileSidebarOpen: false, + sidebarWidth: 240, + sidebarResizing: false, + sidebarResizeHover: false, + sidebarResizeMoved: false, + sidebarResizeStartX: 0, + sidebarResizeStartW: 0, showInvite: true, // -- Toast notifications -- toasts: [], @@ -1348,6 +1379,62 @@ this.sidebarCollapsed = !this.sidebarCollapsed; }, + closeSidebar() { + if (this.sidebarPeek) { this.sidebarPeek = false; return; } + this.sidebarCollapsed = true; + }, + + // ── Sidebar width: persisted, applies to fixed + floating ── + initSidebarWidth() { + var saved = parseInt(localStorage.getItem('fd.sidebarWidth') || '', 10); + if (!isNaN(saved) && saved >= 200 && saved <= 560) { + this.sidebarWidth = saved; + this.applySidebarWidth(); + } else { + var el = document.getElementById('sidebar'); + if (el) { + var w = el.getBoundingClientRect().width; + if (w > 0) { this.sidebarWidth = Math.round(w); } + } + } + }, + applySidebarWidth() { + document.documentElement.style.setProperty('--sidebar-width', this.sidebarWidth + 'px'); + }, + startSidebarResize(e) { + e.preventDefault(); + var self = this; + this.sidebarResizing = true; + this.sidebarResizeMoved = false; + this.sidebarResizeStartX = e.clientX; + var el = document.getElementById('sidebar'); + this.sidebarResizeStartW = el ? el.getBoundingClientRect().width : this.sidebarWidth; + document.body.classList.add('fd-sidebar-resizing'); + + function onMove(ev) { + var dx = ev.clientX - self.sidebarResizeStartX; + if (Math.abs(dx) > 3) { self.sidebarResizeMoved = true; } + var w = Math.max(200, Math.min(560, self.sidebarResizeStartW + dx)); + self.sidebarWidth = w; + self.applySidebarWidth(); + } + function onUp() { + document.removeEventListener('pointermove', onMove); + document.removeEventListener('pointerup', onUp); + document.removeEventListener('pointercancel', onUp); + document.body.classList.remove('fd-sidebar-resizing'); + self.sidebarResizing = false; + if (self.sidebarResizeMoved) { + try { localStorage.setItem('fd.sidebarWidth', String(Math.round(self.sidebarWidth))); } catch (err) {} + } else { + self.closeSidebar(); + } + } + document.addEventListener('pointermove', onMove); + document.addEventListener('pointerup', onUp); + document.addEventListener('pointercancel', onUp); + }, + showContextMenu(event, pageId, pageName) { var x = event.clientX, y = event.clientY; // Prevent menu from overflowing right edge diff --git a/app/templates/local_workspace.html b/app/templates/local_workspace.html index 2a3f3ba..746151e 100644 --- a/app/templates/local_workspace.html +++ b/app/templates/local_workspace.html @@ -2495,7 +2495,6 @@ console.log('FLOWDECK v2.4.6 — IIFE done, _wsInitData keys:', Object.keys(wind