From 3595021d80c94b81da8d6f43d93bd1781a0c4ad4 Mon Sep 17 00:00:00 2001 From: KiriAky 107 Date: Sun, 30 Aug 2026 20:41:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E6=B7=BB=E5=8A=A0=20GitHub?= =?UTF-8?q?=20=E4=BB=A3=E7=A0=81=E5=9D=97=E4=B8=BB=E9=A2=98=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/common/MarkdownContent.vue | 17 +++++-- frontend/src/contracts/index.ts | 1 + frontend/src/features/editor/EditorPane.vue | 4 +- .../features/editor/VisualMarkdownEditor.vue | 10 ++++ frontend/src/features/themes/ThemesView.vue | 14 +++++- frontend/src/stores/theme.spec.ts | 47 +++++++++++++++++++ frontend/src/stores/theme.ts | 36 ++++++++++++-- frontend/src/styles/tokens.css | 14 ++++++ frontend/src/utils/markdown.spec.ts | 13 +++++ 9 files changed, 143 insertions(+), 13 deletions(-) create mode 100644 frontend/src/stores/theme.spec.ts create mode 100644 frontend/src/utils/markdown.spec.ts 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 @@