@@ -12,23 +12,6 @@ definePageMeta({
1212
1313const route = useRoute (' code' )
1414
15- // Preserve file-tree scroll position across navigation
16- const fileTreeSidebarRef = useTemplateRef (' file-tree-sidebar' )
17- const savedFileTreeSidebarScroll = useState (' code-sidebar-scroll' , () => 0 )
18-
19- onBeforeUnmount (() => {
20- savedFileTreeSidebarScroll .value = fileTreeSidebarRef .value ?.scrollTop ?? 0
21- })
22-
23- watch (
24- fileTreeSidebarRef ,
25- fileTreeSidebarElement => {
26- if (fileTreeSidebarElement && savedFileTreeSidebarScroll .value )
27- fileTreeSidebarElement .scrollTop = savedFileTreeSidebarScroll .value
28- },
29- { once: true , flush: ' post' },
30- )
31-
3215// Parse package name, version, and file path from URL
3316// Patterns:
3417// /code/nuxt/v/4.2.0 → packageName: "nuxt", version: "4.2.0", filePath: null (show tree)
@@ -46,6 +29,31 @@ const parsedRoute = computed(() => {
4629
4730const packageName = computed (() => parsedRoute .value .packageName )
4831const version = computed (() => parsedRoute .value .version )
32+
33+ // Preserve file-tree scroll position across navigation within same package (+ version)
34+ const fileTreeKey = computed (() => ` ${packageName .value }@${version .value } ` )
35+ const fileTreeSidebarRef = useTemplateRef (' file-tree-sidebar' )
36+ const savedFileTreeSidebarScroll = useState (' code-sidebar-scroll' , () => ({
37+ key: ' ' ,
38+ scrollTop: 0 ,
39+ }))
40+
41+ onBeforeUnmount (() => {
42+ savedFileTreeSidebarScroll .value = {
43+ key: fileTreeKey .value ,
44+ scrollTop: fileTreeSidebarRef .value ?.scrollTop ?? 0 ,
45+ }
46+ })
47+
48+ watch (
49+ fileTreeSidebarRef ,
50+ fileTreeSidebarElement => {
51+ if (fileTreeSidebarElement && savedFileTreeSidebarScroll .value .key === fileTreeKey .value )
52+ fileTreeSidebarElement .scrollTop = savedFileTreeSidebarScroll .value .scrollTop
53+ },
54+ { once: true , flush: ' post' },
55+ )
56+
4957const filePathOrig = computed (() => parsedRoute .value .filePath )
5058const filePath = computed (() => parsedRoute .value .filePath ?.replace (/ \/ $ / , ' ' ))
5159
0 commit comments