diff --git a/src/renderer/src/components/editor/EditorPanelShell.header.test.tsx b/src/renderer/src/components/editor/EditorPanelShell.header.test.tsx
index 2ea5003dbd4..547062c6204 100644
--- a/src/renderer/src/components/editor/EditorPanelShell.header.test.tsx
+++ b/src/renderer/src/components/editor/EditorPanelShell.header.test.tsx
@@ -10,7 +10,11 @@ vi.mock('./EditorPanelHeader', () => ({
}))
vi.mock('./EditorContent', () => ({
- EditorContent: () =>
+ EditorContent: ({ onOpenMarkdownPreview }: { onOpenMarkdownPreview?: () => void }) => (
+
+ {onOpenMarkdownPreview && }
+
+ )
}))
vi.mock('./UntitledFileRenameDialog', () => ({
@@ -48,7 +52,7 @@ function renderShell(file: OpenFile, isCombinedDiff = false): string {
availableEditorToggleModes: [],
effectiveToggleValue: 'edit',
canOpenPreviewToSide: false,
- canShowMarkdownPreview: false,
+ canShowMarkdownPreview: file.language === 'markdown' && file.mode === 'edit',
canShowMarkdownTableOfContents: false,
isMarkdownTableOfContentsDisabled: false,
shouldShowMarkdownExportAction: false,
@@ -122,3 +126,9 @@ describe('EditorPanelShell path header', () => {
expect(renderShell(openFile('edit'))).toContain('data-editor-content')
})
})
+
+it('offers Markdown preview through the shell even when HTML side preview is unavailable', () => {
+ const file = { ...openFile('edit'), language: 'markdown' }
+ expect(renderShell(file)).toContain('Open preview')
+ expect(renderShell(openFile('edit'))).not.toContain('Open preview')
+})
diff --git a/src/renderer/src/components/editor/EditorPanelShell.tsx b/src/renderer/src/components/editor/EditorPanelShell.tsx
index 48cfca89a2b..eadcb77e44e 100644
--- a/src/renderer/src/components/editor/EditorPanelShell.tsx
+++ b/src/renderer/src/components/editor/EditorPanelShell.tsx
@@ -163,7 +163,7 @@ export function EditorPanelShell({
showMarkdownFrontmatter={markdownFrontmatterVisible}
onCloseMarkdownTableOfContents={onCloseMarkdownTableOfContents}
markdownAnnotationsEnabled={markdownAnnotationsEnabled}
- onOpenMarkdownPreview={model.canOpenPreviewToSide ? onOpenMarkdownPreview : undefined}
+ onOpenMarkdownPreview={model.canShowMarkdownPreview ? onOpenMarkdownPreview : undefined}
/>
{
})
})
-it('hides disk preview while a fallback draft is unsaved', () => {
+it('offers the live Markdown preview while a fallback draft is unsaved', () => {
const model = renderModel({
editorDrafts: { '/repo/README.md': '[reference]: https://example.com' }
})
- expect(model.availableEditorToggleModes).not.toContain('preview')
+ expect(model.availableEditorToggleModes).toContain('preview')
+ expect(model.canShowMarkdownPreview).toBe(true)
expect(model.canOpenPreviewToSide).toBe(false)
})
diff --git a/src/renderer/src/components/editor/editor-panel-render-model.ts b/src/renderer/src/components/editor/editor-panel-render-model.ts
index af23a8557d2..e45cb9731bf 100644
--- a/src/renderer/src/components/editor/editor-panel-render-model.ts
+++ b/src/renderer/src/components/editor/editor-panel-render-model.ts
@@ -144,16 +144,11 @@ export function getEditorPanelRenderModel({
richModeEligibility !== null
? richModeEligibility.exceedsSizeLimit || richModeUnsupportedMessage !== null
: richModeFaultedForCurrentContent
- const hasUnsavedMarkdownDraft =
- viewerLanguage === 'markdown' &&
- activeFile.mode === 'edit' &&
- editorDrafts[activeFile.id] !== undefined &&
- editorDrafts[activeFile.id] !== inlineFileContent?.content
const editorToggleModes = getEditorToggleModes({
language: viewerLanguage,
mode: activeFile.mode,
diffSource: activeFile.diffSource,
- richModeFallsBackToSource: richModeFallsBackToSource && !hasUnsavedMarkdownDraft
+ richModeFallsBackToSource
})
const availableEditorToggleModes =
isBinaryEditSurface || !canUseChangesModeForFile(activeFile)
@@ -205,7 +200,6 @@ export function getEditorPanelRenderModel({
// files and commit diffs whose content may not match the working tree).
canOpenPreviewToSide:
canOpenWorkspaceFileBrowser &&
- !hasUnsavedMarkdownDraft &&
canPreviewLanguage(viewerLanguage) &&
(activeFile.mode === 'edit' || (isSingleDiff && openFileState.canOpen)),
mdViewMode,