From 9d3553f8c94e06584851c17427032a5b1f0f5e94 Mon Sep 17 00:00:00 2001 From: Louis Date: Sat, 11 Apr 2026 19:33:30 +0200 Subject: [PATCH] ui(sidebars): add subtle vertical separators and improve sidebar collapse behavior (#1416) * ui(sidebars): add subtle vertical separators and improve sidebar collapse behavior * ui(sidebars): stabilize vertical separators and refine layout transitions * ui(sidebars): make settings sidebar dynamic and fix theme-switching border persistence * ui(sidebars): improve accessibility by toggling inert attribute on collapse * ui(sidebars): eliminate ghost borders on collapse by precisely toggling width classes * ui(sidebars): use semantic border-divider token --- .../controllers/app_layout_controller.js | 19 +++++++---- app/views/layouts/application.html.erb | 34 ++++++++++--------- app/views/layouts/settings.html.erb | 6 ++-- 3 files changed, 34 insertions(+), 25 deletions(-) diff --git a/app/javascript/controllers/app_layout_controller.js b/app/javascript/controllers/app_layout_controller.js index cc15c78c2..612114735 100644 --- a/app/javascript/controllers/app_layout_controller.js +++ b/app/javascript/controllers/app_layout_controller.js @@ -21,22 +21,27 @@ export default class extends Controller { toggleLeftSidebar() { const isOpen = this.leftSidebarTarget.classList.contains("w-full"); this.#updateUserPreference("show_sidebar", !isOpen); - this.#toggleSidebarWidth(this.leftSidebarTarget, isOpen); + this.#toggleSidebarWidth(this.leftSidebarTarget, isOpen, "left"); } toggleRightSidebar() { const isOpen = this.rightSidebarTarget.classList.contains("w-full"); this.#updateUserPreference("show_ai_sidebar", !isOpen); - this.#toggleSidebarWidth(this.rightSidebarTarget, isOpen); + this.#toggleSidebarWidth(this.rightSidebarTarget, isOpen, "right"); } - #toggleSidebarWidth(el, isCurrentlyOpen) { + #toggleSidebarWidth(el, isCurrentlyOpen, side) { + const expandedClasses = side === "left" ? [...this.expandedSidebarClasses, "border-r"] : [...this.expandedSidebarClasses, "border-l"]; + const collapsedClasses = side === "left" ? [...this.collapsedSidebarClasses, "border-r-0"] : [...this.collapsedSidebarClasses, "border-l-0"]; + if (isCurrentlyOpen) { - el.classList.remove(...this.expandedSidebarClasses); - el.classList.add(...this.collapsedSidebarClasses); + el.classList.remove(...expandedClasses); + el.classList.add(...collapsedClasses); + el.inert = true; } else { - el.classList.add(...this.expandedSidebarClasses); - el.classList.remove(...this.collapsedSidebarClasses); + el.classList.add(...expandedClasses); + el.classList.remove(...collapsedClasses); + el.inert = false; } } diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 9d3b97e87..50174161d 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -17,7 +17,7 @@ end %> <% desktop_nav_items = mobile_nav_items.reject { |item| item[:mobile_only] } %> <% expanded_sidebar_class = "w-full" %> -<% collapsed_sidebar_class = "w-0" %> +<% collapsed_sidebar_class = "w-0 overflow-hidden" %> <%= render "layouts/shared/htmldoc" do %>
<%# DESKTOP - Left navbar %> -