🐛 fix(vscode): 代码阅读预览记住浏览位置,编辑 / 预览互切位置对齐

This commit is contained in:
cruldra committed 2026-09-25 03:21:14 +08:00
1 parent 6897954644
commit 37306bd23e
13 files changed
+409 -37

No files matched your search

+13 -4
View File
@@ -1,21 +1,30 @@
import type { ReactElement } from 'react'
import type { BlockTreeState } from './BlockTree'
import type { DocumentMessage } from './types'
import type { ViewState } from './vscode'
import type { ViewState } from './viewState'
import { TriangleAlert } from 'lucide-react'
import { useCallback, useEffect, useMemo, useState } from 'react'
import { SelectMenu } from '@/components/ui/select-menu'
import { BlockLevel } from './BlockTree'
import { loadViewState, onMessage, postMessage, saveViewState } from './vscode'
import { useScrollPosition } from './useScrollPosition'
import { onMessage, postMessage, viewState } from './vscode'
type BlockModes = Pick<ViewState, 'editing' | 'collapsed'>
function toggled(ids: string[], id: string): string[] {
return ids.includes(id) ? ids.filter(x => x !== id) : [...ids, id]
}
function savedBlockModes(): BlockModes {
const { editing, collapsed } = viewState.get()
return { editing, collapsed }
}
export function App(): ReactElement | null {
const [doc, setDoc] = useState<DocumentMessage | null>(null)
const [view, setView] = useState<ViewState>(loadViewState)
const [view, setView] = useState<BlockModes>(savedBlockModes)
const [focusId, setFocusId] = useState<string | null>(null)
useScrollPosition(doc)
useEffect(() => {
const off = onMessage((msg) => {
@@ -27,7 +36,7 @@ export function App(): ReactElement | null {
}, [])
useEffect(() => {
saveViewState(view)
viewState.update(view)
}, [view])
const onFocused = useCallback(() => setFocusId(null), [])