@@ -128,19 +128,16 @@ export interface UIState {
128128const query = new URL ( document . location . href ) . searchParams ;
129129const isEmbeddedInAnIframe = window . self !== window . top ;
130130// @TODO : Centralize these breakpoint sizes.
131+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
131132const isMobile = window . innerWidth < 875 ;
132133
133134// Parse the route parameter for sidebar/tab state
134135const routeState = parseRouteParam ( query . get ( 'route' ) ) ;
135- const isSeamlessMode = query . get ( 'mode' ) === 'seamless' ;
136136
137- // Determine initial sidebar open state:
138- // - If route param exists, use it (route=closed → closed, otherwise → open)
139- // - If no route param, default to open on desktop, closed on mobile
140- const hasExplicitRouteParam = query . has ( 'route' ) ;
141- const shouldSidebarBeOpen = hasExplicitRouteParam
142- ? routeState . sidebarOpen
143- : ! isMobile ;
137+ // Check if there's an explicit route param requesting the sidebar to be open.
138+ // If so, respect it regardless of viewport size (but not in seamless mode or iframes).
139+ const hasExplicitRouteParam = query . has ( 'route' ) && routeState . sidebarOpen ;
140+ const isSeamlessMode = query . get ( 'mode' ) === 'seamless' ;
144141
145142const initialState : UIState = {
146143 /**
@@ -168,8 +165,9 @@ const initialState: UIState = {
168165 ! isSeamlessMode &&
169166 // We do not expect to render the Playground app UI in an iframe.
170167 ! isEmbeddedInAnIframe &&
171- // Use explicit route param if provided, otherwise default based on viewport.
172- shouldSidebarBeOpen ,
168+ // If there's an explicit route param requesting sidebar open, respect it.
169+ // Otherwise default to closed on all viewport sizes.
170+ hasExplicitRouteParam ,
173171 siteManagerSection : routeState . section ,
174172} ;
175173
0 commit comments