diff --git a/docs/mobile-panels.md b/docs/mobile-panels.md index 7f590312c..c1ad64800 100644 --- a/docs/mobile-panels.md +++ b/docs/mobile-panels.md @@ -70,6 +70,9 @@ definition, no longer eligible to begin. - Callers request semantic targets through `panel-store`; they never write shared values. - Gesture behavior comes from the four explicit hooks in `mobile-panels/gestures.ts`. +- Keep `SidebarModelProvider` outside `MobileGestureWrapper`. The provider shares sidebar derivation + across consumers, while Gesture Handler requires the wrapper's direct child to be a native `View` + so its injected `collapsable={false}` reaches Android/Fabric. - Mobile sidebars render through `MobilePanelOverlay`; do not duplicate overlay lifecycle or motion styles in sidebar components. - Animated panel nodes use React Native static styles plus inline theme values. Do not attach diff --git a/packages/app/src/app/_layout.tsx b/packages/app/src/app/_layout.tsx index af0568476..bb8fa7c31 100644 --- a/packages/app/src/app/_layout.tsx +++ b/packages/app/src/app/_layout.tsx @@ -464,33 +464,33 @@ function AppContainer({ children, chromeEnabled: chromeEnabledOverride }: AppCon ); - const content = ( - - - {workspaceChrome} - - {isCompactLayout && chromeEnabled && } - - - - - - - - - - - - - - + const surface = ( + + {workspaceChrome} + + {isCompactLayout && chromeEnabled && } + + + + + + + + + + + + + ); - if (!isCompactLayout) { - return content; - } + const content = isCompactLayout ? ( + {surface} + ) : ( + surface + ); - return {content}; + return {content}; } function MobileGestureWrapper({