Keep desktop sidebar controls stable across panel changes (#2078)

* fix(app): stabilize desktop sidebar controls

Keep the left-window-controls toggle mounted across sidebar state changes so its position and tooltip state remain stable. Preserve browser placement and show an explicit Explorer close control only where native right-side controls do not provide one.

* fix(app): suppress inactive sidebar chrome
This commit is contained in:
Mohamed Boudra
2026-07-15 15:30:57 +08:00
committed by GitHub
parent 9c40cb7637
commit 77f6069ec1
10 changed files with 326 additions and 33 deletions
@@ -1,12 +1,59 @@
import { describe, expect, it } from "vitest";
import {
canDesktopAppSidebarShare,
resolveDesktopAppChromeLayout,
resolveDesktopAppContentMinimum,
resolveDesktopExplorerWidth,
resolveDesktopSidebarWidth,
} from "@/components/desktop-sidebar-layout";
describe("desktop sidebar layout", () => {
it("keeps the sidebar toggle window-owned beside left window controls", () => {
expect(
resolveDesktopAppChromeLayout({
desktopSidebarRendered: true,
hasTopLeftWindowControls: true,
sidebarControlsEnabled: true,
}),
).toEqual({
sidebarCorners: "top-left",
contentCorners: "top-right",
sidebarToggleOwner: "window",
});
expect(
resolveDesktopAppChromeLayout({
desktopSidebarRendered: true,
hasTopLeftWindowControls: false,
sidebarControlsEnabled: true,
}),
).toEqual({
sidebarCorners: "none",
contentCorners: "both",
sidebarToggleOwner: "content",
});
expect(
resolveDesktopAppChromeLayout({
desktopSidebarRendered: false,
hasTopLeftWindowControls: true,
sidebarControlsEnabled: true,
}),
).toEqual({
sidebarCorners: "none",
contentCorners: "both",
sidebarToggleOwner: "window",
});
});
it("hides the window-owned sidebar toggle when app chrome is suppressed", () => {
expect(
resolveDesktopAppChromeLayout({
desktopSidebarRendered: false,
hasTopLeftWindowControls: true,
sidebarControlsEnabled: false,
}).sidebarToggleOwner,
).toBe("none");
});
it("clamps a persisted wide sidebar to preserve the center pane", () => {
const atHalfScreen = resolveDesktopSidebarWidth({ requestedWidth: 600, viewportWidth: 751 });
expect(atHalfScreen).toBe(351);