From efcc9bb940f71c2ccc9269b89ac4cbc3e724b17f Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Mon, 19 Oct 2026 17:02:01 +0200 Subject: [PATCH] fix(app): keep Explorer resize handles stretched through the dock The shared frame moved the divider into an absolute column, leaving its horizontal handle without height. Restore the row so pointer drags reach it, preserving the existing resize and performance contract. --- docs/expo-router.md | 4 +++- packages/app/src/components/split-container.tsx | 1 - .../src/screens/workspace/explorer-sidebar/geometry.web.tsx | 2 +- packages/app/src/workspace-tabs/explorer-sidebar.test.ts | 3 +-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/expo-router.md b/docs/expo-router.md index 6ff9d14c9c..cc65eb57a7 100644 --- a/docs/expo-router.md +++ b/docs/expo-router.md @@ -157,7 +157,9 @@ a small `withUnistyles` boundary without subscribing the route tree itself to every Unistyles runtime update. Navigators keep their identity across appearance changes. `ThemedStack` remounts -each screen's content below the native stack when appearance tokens change; a +each ordinary screen's content below the native stack when appearance tokens change. +Workspace screens own retained panel lifetimes and update appearance at their +leaves through `screenOwnedAppearance` ([Explorer](explorer-sidebar.md)). A keyed wrapper above a stack remounts the stack itself, and Android crashes when that happens while a FragmentManager transaction is running, which settings hydration at startup makes likely. A screen that mounts a nested navigator (the diff --git a/packages/app/src/components/split-container.tsx b/packages/app/src/components/split-container.tsx index 52a51a2a3a..660b5f4e6b 100644 --- a/packages/app/src/components/split-container.tsx +++ b/packages/app/src/components/split-container.tsx @@ -55,7 +55,6 @@ import { } from "@/stores/workspace-layout-store"; import type { WorkspaceTab } from "@/workspace-tabs/model"; import { recordRenderProfileReasons, RenderProfile } from "@/utils/render-profiler"; -import { inlineUnistylesStyle } from "@/styles/unistyles-inline-style"; import { isNative } from "@/constants/platform"; interface SplitContainerProps { diff --git a/packages/app/src/screens/workspace/explorer-sidebar/geometry.web.tsx b/packages/app/src/screens/workspace/explorer-sidebar/geometry.web.tsx index 09b6599197..8864cd1e81 100644 --- a/packages/app/src/screens/workspace/explorer-sidebar/geometry.web.tsx +++ b/packages/app/src/screens/workspace/explorer-sidebar/geometry.web.tsx @@ -53,5 +53,5 @@ export function useExplorerGeometry({ }; } const styles = StyleSheet.create({ - resize: { position: "absolute", left: 0, top: 0, bottom: 0, zIndex: 2 }, + resize: { position: "absolute", left: 0, top: 0, bottom: 0, zIndex: 2, flexDirection: "row" }, }); diff --git a/packages/app/src/workspace-tabs/explorer-sidebar.test.ts b/packages/app/src/workspace-tabs/explorer-sidebar.test.ts index 6d76af4a66..15fd44f649 100644 --- a/packages/app/src/workspace-tabs/explorer-sidebar.test.ts +++ b/packages/app/src/workspace-tabs/explorer-sidebar.test.ts @@ -37,10 +37,9 @@ beforeEach(() => { }); describe("Explorer sidebar", () => { - it("selects the Explorer shell from layout and split capabilities", () => { + it("selects the Explorer shell from the form factor", () => { expect(resolveExplorerSidebarPresentation({ isCompact: true })).toBe("overlay"); expect(resolveExplorerSidebarPresentation({ isCompact: false })).toBe("dock"); - expect(resolveExplorerSidebarPresentation({ isCompact: false })).toBe("dock"); }); it("uses the same Explorer pane inside the compact overlay", () => {