@@ -1184,6 +1184,7 @@ function createConfigEphemeralState(): ConfigEphemeralState {
11841184
11851185const cvs = createConfigEphemeralState ( ) ;
11861186let lastConfigContextKey : string | null = null ;
1187+ let lastFormModeForScroll : ConfigProps [ "formMode" ] | null = null ;
11871188
11881189function resetConfigEphemeralState ( ) {
11891190 Object . assign ( cvs , createConfigEphemeralState ( ) ) ;
@@ -1222,6 +1223,7 @@ function toggleSensitivePathReveal(path: Array<string | number>) {
12221223export function resetConfigViewStateForTests ( ) {
12231224 resetConfigEphemeralState ( ) ;
12241225 lastConfigContextKey = null ;
1226+ lastFormModeForScroll = null ;
12251227}
12261228
12271229export function renderConfig ( props : ConfigProps ) {
@@ -1237,6 +1239,31 @@ export function renderConfig(props: ConfigProps) {
12371239 const rawAvailable = props . rawAvailable ?? true ;
12381240 const formMode = showModeToggle && rawAvailable ? props . formMode : "form" ;
12391241 const requestUpdate = props . onRequestUpdate ?? ( ( ) => { } ) ;
1242+ // Scroll helper: target-based (nav clicks) with global fallback (form/raw toggle)
1243+ const resetContentScroll = ( target : EventTarget | null ) => {
1244+ queueMicrotask ( ( ) => {
1245+ const origin = target instanceof Element ? target : null ;
1246+ const content =
1247+ origin ?. closest ( ".config-main" ) ?. querySelector < HTMLElement > ( ".config-content" ) ??
1248+ globalThis . document ?. querySelector < HTMLElement > ( ".config-content" ) ;
1249+ if ( ! content ) {
1250+ return ;
1251+ }
1252+ if ( typeof content . scrollTo === "function" ) {
1253+ content . scrollTo ( { top : 0 , left : 0 , behavior : "auto" } ) ;
1254+ return ;
1255+ }
1256+ content . scrollTop = 0 ;
1257+ content . scrollLeft = 0 ;
1258+ } ) ;
1259+ } ;
1260+
1261+ // Reset scroll position when switching between form and raw mode
1262+ if ( lastFormModeForScroll !== null && lastFormModeForScroll !== formMode ) {
1263+ resetContentScroll ( null ) ;
1264+ }
1265+ lastFormModeForScroll = formMode ;
1266+
12401267 const currentContextKey = configContextKey ( props ) ;
12411268 if ( lastConfigContextKey !== currentContextKey ) {
12421269 resetConfigEphemeralState ( ) ;
@@ -1301,24 +1328,6 @@ export function renderConfig(props: ConfigProps) {
13011328 const settingsLayout = props . settingsLayout ?? "tabs" ;
13021329 const allCategories = [ ...visibleCategories , ...( otherCategory ? [ otherCategory ] : [ ] ) ] ;
13031330
1304- const resetContentScroll = ( target : EventTarget | null ) => {
1305- queueMicrotask ( ( ) => {
1306- const origin = target instanceof Element ? target : null ;
1307- const content = origin
1308- ?. closest ( ".config-main" )
1309- ?. querySelector < HTMLElement > ( ".config-content" ) ;
1310- if ( ! content ) {
1311- return ;
1312- }
1313- if ( typeof content . scrollTo === "function" ) {
1314- content . scrollTo ( { top : 0 , left : 0 , behavior : "auto" } ) ;
1315- return ;
1316- }
1317- content . scrollTop = 0 ;
1318- content . scrollLeft = 0 ;
1319- } ) ;
1320- } ;
1321-
13221331 function renderAccordionNav ( ) {
13231332 return html `
13241333 < div class ="config-accordion-nav ">
0 commit comments