diff --git a/src/app-layout/__tests__/skeleton.test.tsx b/src/app-layout/__tests__/skeleton.test.tsx
index a3bb1eb7d9c..2d14c3cdba9 100644
--- a/src/app-layout/__tests__/skeleton.test.tsx
+++ b/src/app-layout/__tests__/skeleton.test.tsx
@@ -5,6 +5,7 @@ import { render } from '@testing-library/react';
import AppLayout from '../../../lib/components/app-layout';
import { BeforeMainSlotSkeleton } from '../../../lib/components/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts';
+import AppLayoutToolbar from '../../../lib/components/app-layout-toolbar';
import BreadcrumbGroup from '../../../lib/components/breadcrumb-group';
import { getFunnelKeySelector } from '../../../lib/components/internal/analytics/selectors';
import { describeEachAppLayout, renderComponent } from './utils';
@@ -95,6 +96,46 @@ describeEachAppLayout({ themes: ['refresh-toolbar'] }, () => {
expect(wrapper.findByClassName(skeletonStyles['panel-hidden'])).toBeFalsy();
});
+ it('reserves space for the open navigation when the navigation trigger is hidden', () => {
+ const noop = () => {};
+ const { wrapper, rerender } = renderComponent(
+
+ );
+ expect(wrapper.findNavigationToggle()).toBeFalsy();
+ expect(wrapper.findByClassName(skeletonStyles.navigation)).toBeTruthy();
+ expect(wrapper.findByClassName(skeletonStyles['panel-hidden'])).toBeFalsy();
+ rerender(
+
+ );
+ expect(wrapper.findByClassName(skeletonStyles['panel-hidden'])).toBeTruthy();
+ });
+
+ it('reserves space for the open navigation in a secondary layout', () => {
+ const { wrapper } = renderComponent(
+ {}}
+ />
+ );
+ expect(wrapper.findByClassName(skeletonStyles['toolbar-container'])).toBeFalsy();
+ expect(wrapper.findByClassName(skeletonStyles.navigation)).toBeTruthy();
+ expect(wrapper.findByClassName(skeletonStyles['panel-hidden'])).toBeFalsy();
+ });
+
it('toolbar can render conditionally', () => {
const { wrapper, rerender } = renderComponent();
// cannot use wrapper.findToolbar() because our public test utils resolve to nothing in skeleton state
diff --git a/src/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.tsx b/src/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.tsx
index 5c8e6a8fe15..d36359df845 100644
--- a/src/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.tsx
+++ b/src/app-layout/visual-refresh-toolbar/skeleton/skeleton-parts.tsx
@@ -19,14 +19,16 @@ import styles from './styles.css.js';
export const BeforeMainSlotSkeleton = React.forwardRef(
({ toolbarProps, appLayoutProps }, ref) => {
- const hasNavigation = toolbarProps ? toolbarProps.hasNavigation : !!appLayoutProps.navigation;
+ const hasNavigation =
+ !!toolbarProps?.hasNavigation || (!!appLayoutProps.navigation && !appLayoutProps.navigationHide);
+ const navigationOpen = !!(toolbarProps?.navigationOpen ?? appLayoutProps.navigationOpen);
return (
<>
{!!toolbarProps && (
@@ -35,18 +37,16 @@ export const BeforeMainSlotSkeleton = React.forwardRef