支持markdown预览和html文件浏览器打开

This commit is contained in:
xintaofei
2026-03-17 00:29:20 +08:00
parent 2e3090c176
commit b4a6f70389
14 changed files with 458 additions and 102 deletions

View File

@@ -110,6 +110,8 @@ interface WorkspaceContextValue {
updateActiveFileContent: (content: string) => void
saveActiveFile: (options?: { force?: boolean }) => Promise<boolean>
reloadActiveFile: () => Promise<void>
previewFileTabIds: Set<string>
toggleFileTabPreview: (tabId: string) => void
}
const WorkspaceContext = createContext<WorkspaceContextValue | null>(null)
@@ -197,6 +199,9 @@ export function WorkspaceProvider({ children }: WorkspaceProviderProps) {
path: string
line: number
} | null>(null)
const [previewFileTabIds, setPreviewFileTabIds] = useState<Set<string>>(
new Set()
)
const fileTabsRef = useRef<FileWorkspaceTab[]>([])
const fileRevealRequestIdRef = useRef(0)
@@ -933,6 +938,13 @@ export function WorkspaceProvider({ children }: WorkspaceProviderProps) {
return next[nextIdx].id
})
setPreviewFileTabIds((prev) => {
if (!prev.has(tabId)) return prev
const updated = new Set(prev)
updated.delete(tabId)
return updated
})
return next
})
},
@@ -967,6 +979,7 @@ export function WorkspaceProvider({ children }: WorkspaceProviderProps) {
}
setActiveFileTabId(null)
setPreviewFileTabIds(new Set())
activateConversationPane()
return []
})
@@ -983,6 +996,18 @@ export function WorkspaceProvider({ children }: WorkspaceProviderProps) {
const activeFilePath = activeFileTab?.path ?? null
const toggleFileTabPreview = useCallback((tabId: string) => {
setPreviewFileTabIds((prev) => {
const next = new Set(prev)
if (next.has(tabId)) {
next.delete(tabId)
} else {
next.add(tabId)
}
return next
})
}, [])
const value = useMemo<WorkspaceContextValue>(
() => ({
mode,
@@ -1011,6 +1036,8 @@ export function WorkspaceProvider({ children }: WorkspaceProviderProps) {
updateActiveFileContent,
saveActiveFile,
reloadActiveFile,
previewFileTabIds,
toggleFileTabPreview,
}),
[
mode,
@@ -1039,6 +1066,8 @@ export function WorkspaceProvider({ children }: WorkspaceProviderProps) {
updateActiveFileContent,
saveActiveFile,
reloadActiveFile,
previewFileTabIds,
toggleFileTabPreview,
]
)