diff --git a/frontend/src/components/common/MarkdownContent.vue b/frontend/src/components/common/MarkdownContent.vue index 3e3f173..6580f2e 100644 --- a/frontend/src/components/common/MarkdownContent.vue +++ b/frontend/src/components/common/MarkdownContent.vue @@ -24,19 +24,26 @@ watch(() => props.source, async (source) => { .markdown-content :deep(ul) { padding-left: 1.5em; list-style: disc; } .markdown-content :deep(ol) { padding-left: 1.5em; list-style: decimal; } .markdown-content :deep(li::marker) { color: var(--color-markdown-marker); font-weight: 700; } -.markdown-content :deep(.shiki) { overflow: auto; padding: var(--space-md); border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md); } +.markdown-content :deep(.shiki) { overflow: auto; margin: .85em 0; padding: 16px; border: 1px solid var(--color-code-border); border-radius: 6px; background: var(--color-code-background) !important; color: var(--color-code-text); font-family: var(--font-ui-mono); font-size: .875em; line-height: 1.45; tab-size: 4; } .markdown-content :deep(code) { padding: .1em .3em; border-radius: var(--radius-sm); background: var(--color-background-tertiary); font-family: var(--font-ui-mono); } -.markdown-content :deep(pre code) { padding: 0; background: transparent; } +.markdown-content :deep(.shiki code) { display: block; min-width: max-content; padding: 0; background: transparent; font: inherit; } +.markdown-content :deep(.shiki .line) { display: block; min-height: 1.45em; } .markdown-content :deep(blockquote) { padding-left: 1em; border-left: 3px solid var(--color-accent-primary); color: var(--color-text-secondary); } .markdown-content :deep(table) { width: 100%; margin: .65em 0; border-collapse: collapse; } .markdown-content :deep(th), .markdown-content :deep(td) { padding: .45em .65em; border: 1px solid var(--color-markdown-grid); text-align: left; } .markdown-content :deep(th) { background: var(--color-markdown-table-header); font-weight: 700; } .markdown-content :deep(img) { max-width: 100%; } .markdown-content :deep(hr) { margin: 1em 0; border: 0; border-top: 1px solid var(--color-border-default); } -:global([data-theme='dark']) .markdown-content :deep(.shiki), -:global([data-theme='dark']) .markdown-content :deep(.shiki span) { +:global([data-code-theme='github-light']) .markdown-content :deep(.shiki), +:global([data-code-theme='github-light']) .markdown-content :deep(.shiki span) { + color: var(--shiki-light) !important; + font-style: var(--shiki-light-font-style) !important; + font-weight: var(--shiki-light-font-weight) !important; + text-decoration: var(--shiki-light-text-decoration) !important; +} +:global([data-code-theme='github-dark']) .markdown-content :deep(.shiki), +:global([data-code-theme='github-dark']) .markdown-content :deep(.shiki span) { color: var(--shiki-dark) !important; - background-color: var(--shiki-dark-bg) !important; font-style: var(--shiki-dark-font-style) !important; font-weight: var(--shiki-dark-font-weight) !important; text-decoration: var(--shiki-dark-text-decoration) !important; diff --git a/frontend/src/contracts/index.ts b/frontend/src/contracts/index.ts index 2a3d973..237fa4f 100644 --- a/frontend/src/contracts/index.ts +++ b/frontend/src/contracts/index.ts @@ -329,6 +329,7 @@ export interface ThemeConfig { is_dark: boolean author?: string builtin: boolean + code_theme?: 'github-light' | 'github-dark' } // ============ Index ============ diff --git a/frontend/src/features/editor/EditorPane.vue b/frontend/src/features/editor/EditorPane.vue index 2e64f78..2767e6a 100644 --- a/frontend/src/features/editor/EditorPane.vue +++ b/frontend/src/features/editor/EditorPane.vue @@ -1,10 +1,12 @@