From 4551330756fb1742fa5d6ca1412f90a109a20d0b Mon Sep 17 00:00:00 2001 From: Seeridia Date: Sun, 5 Apr 2026 11:46:35 +0800 Subject: [PATCH 1/4] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E5=92=8C?= =?UTF-8?q?=E7=AE=80=E5=8C=96=20design=20token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../build/rollup.styles.config.js | 50 +++++- .../src/sass/bubble_formula.scss | 14 +- packages/cherry-markdown/src/sass/cherry.scss | 103 ++++++------ .../src/sass/codemirror-v6-fixes.scss | 4 +- .../sass/components/shortcut_key_config.scss | 20 +-- packages/cherry-markdown/src/sass/index.scss | 2 +- .../cherry-markdown/src/sass/markdown.scss | 128 +++++++------- .../src/sass/markdown_pure.scss | 14 +- .../cherry-markdown/src/sass/previewer.scss | 37 +++-- .../src/sass/themes/abyss.scss | 104 ++++++------ .../cherry-markdown/src/sass/themes/blue.scss | 130 ++++++++------- .../cherry-markdown/src/sass/themes/dark.scss | 111 +++++++------ .../src/sass/themes/default.scss | 156 +++--------------- .../cherry-markdown/src/sass/themes/gray.scss | 34 +++- .../src/sass/themes/green.scss | 115 +++++++------ .../src/sass/themes/index.scss | 8 + .../cherry-markdown/src/sass/themes/red.scss | 115 +++++++------ .../src/sass/themes/violet.scss | 118 ++++++------- .../src/sass/variables/base.scss | 1 + .../sass/variables/components/accordion.scss | 14 ++ .../src/sass/variables/components/index.scss | 4 + .../src/sass/variables/components/panel.scss | 59 +++++++ .../variables/components/shortcut-panel.scss | 10 ++ .../src/sass/variables/components/table.scss | 6 + .../src/sass/variables/index.scss | 9 +- .../src/sass/variables/semantic.scss | 101 ++++++------ 26 files changed, 762 insertions(+), 705 deletions(-) create mode 100644 packages/cherry-markdown/src/sass/themes/index.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/accordion.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/index.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/panel.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/shortcut-panel.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/table.scss diff --git a/packages/cherry-markdown/build/rollup.styles.config.js b/packages/cherry-markdown/build/rollup.styles.config.js index 81b25b262..b4c927cb3 100644 --- a/packages/cherry-markdown/build/rollup.styles.config.js +++ b/packages/cherry-markdown/build/rollup.styles.config.js @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import scss from 'rollup-plugin-scss'; import * as dartSass from 'sass'; +import path from 'node:path'; // baseConfig not used in styles config const IS_PRODUCTION = process.env.NODE_ENV === 'production'; @@ -33,6 +33,40 @@ const createCleanupPlugin = () => ({ }, }); +const createSassAssetPlugin = ({ input, fileName, style = 'expanded', watch }) => ({ + name: `sass-asset:${fileName}`, + transform(code, id) { + if (path.resolve(id) !== path.resolve(input)) { + return null; + } + + return { + code: 'export default undefined;', + map: { mappings: '' }, + }; + }, + buildStart() { + if (watch) { + const files = Array.isArray(watch) ? watch : [watch]; + files.forEach((file) => this.addWatchFile(file)); + } + }, + async generateBundle() { + const entryFile = path.resolve(input); + const result = await dartSass.compileAsync(entryFile, { + loadPaths: ['node_modules', process.cwd()], + style, + charset: false, + }); + + this.emitFile({ + type: 'asset', + fileName, + source: result.css, + }); + }, +}); + const createStyleConfigs = ({ input, cssBaseName, outputBaseName, watch }) => { const configs = [ { @@ -41,11 +75,10 @@ const createStyleConfigs = ({ input, cssBaseName, outputBaseName, watch }) => { file: `dist/${outputBaseName}.styles.js`, }, plugins: [ - scss({ + createSassAssetPlugin({ + input, fileName: `${cssBaseName}.css`, - failOnError: true, - sass: dartSass, - ...(watch ? { watch } : {}), + watch, }), createCleanupPlugin(), ], @@ -59,11 +92,10 @@ const createStyleConfigs = ({ input, cssBaseName, outputBaseName, watch }) => { file: `dist/${outputBaseName}.styles.min.js`, }, plugins: [ - scss({ + createSassAssetPlugin({ + input, fileName: `${cssBaseName}.min.css`, - failOnError: true, - sass: dartSass, - outputStyle: 'compressed', + style: 'compressed', }), createCleanupPlugin(), ], diff --git a/packages/cherry-markdown/src/sass/bubble_formula.scss b/packages/cherry-markdown/src/sass/bubble_formula.scss index 2f242f99b..158912c98 100644 --- a/packages/cherry-markdown/src/sass/bubble_formula.scss +++ b/packages/cherry-markdown/src/sass/bubble_formula.scss @@ -18,7 +18,7 @@ width: 120px; flex-shrink: 0; padding: 8px; - border-right: 1px solid var(--base-border-color); + border-right: 1px solid var(--color-border-default); position: relative; .cherry-formula-main-tabs { @@ -28,7 +28,7 @@ cursor: pointer; font-size: 14px; font-weight: 500; - color: var(--base-font-color); + color: var(--color-text-primary); user-select: none; transition: background-color 0.2s ease, color 0.2s ease; @@ -58,7 +58,7 @@ white-space: nowrap; a { - color: var(--primary-color); + color: var(--color-brand-primary); text-decoration: none; &:hover { @@ -99,7 +99,7 @@ border-radius: 16px; cursor: pointer; font-size: 13px; - color: var(--base-font-color); + color: var(--color-text-primary); user-select: none; transition: background-color 0.2s ease, color 0.2s ease; @@ -139,10 +139,10 @@ .cherry-formula-grid-group-title { font-size: 14px; font-weight: 600; - color: var(--base-font-color); + color: var(--color-text-primary); margin-bottom: 12px; padding-bottom: 8px; - border-bottom: 1px solid var(--base-border-color); + border-bottom: 1px solid var(--color-border-default); } .cherry-formula-grid-items { @@ -159,7 +159,7 @@ border-radius: 8px; cursor: pointer; transition: background-color 0.2s ease, border-color 0.2s ease; - background-color: var(--base-editor-bg); + background-color: var(--color-bg-canvas); &:hover { background-color: var(--dropdown-item-hover-bg); diff --git a/packages/cherry-markdown/src/sass/cherry.scss b/packages/cherry-markdown/src/sass/cherry.scss index 94a83c413..6933d57c9 100644 --- a/packages/cherry-markdown/src/sass/cherry.scss +++ b/packages/cherry-markdown/src/sass/cherry.scss @@ -1,13 +1,15 @@ -@import './variables/index.scss'; -@import './base.scss'; -@import './ch-icon.scss'; -@import './markdown.scss'; -@import './previewer.scss'; -@import './print.scss'; -@import './bubble_formula.scss'; -@import './formula_utils_bubble.scss'; -@import './components/shortcut_key_config.scss'; -@import './codemirror-v6-fixes'; +@use 'sass:meta'; + +@include meta.load-css('./variables/index'); +@include meta.load-css('./base'); +@include meta.load-css('./ch-icon'); +@include meta.load-css('./markdown'); +@include meta.load-css('./previewer'); +@include meta.load-css('./print'); +@include meta.load-css('./bubble_formula'); +@include meta.load-css('./formula_utils_bubble'); +@include meta.load-css('./components/shortcut_key_config'); +@include meta.load-css('./codemirror-v6-fixes'); @mixin cherryFont { font-family: var(--font-family-sans); @@ -97,8 +99,8 @@ .cherry { @include cherryFont; line-height: var(--md-paragraph-line-height); - color: var(--base-font-color); - background: var(--base-editor-bg); + color: var(--color-text-primary); + background: var(--color-bg-canvas); box-shadow: var(--shadow-md); .ch-icon { @@ -152,7 +154,7 @@ &-item { padding: 7px; - border: 1px solid var(--base-border-color); + border: 1px solid var(--color-border-default); &.active { background-color: var(--toolbar-btn-hover-bg); @@ -264,7 +266,7 @@ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-size: 16px; - color: var(--primary-color); + color: var(--color-brand-primary); margin-left: 2px; margin-top: -2px; } @@ -376,7 +378,7 @@ // 默认主题采用亮色搜索框 &.theme__default { --ace-search-bg: var(--oc-white); - --ace-search-text-color: var(--base-font-color); + --ace-search-text-color: var(--color-text-primary); } // 其它主题从toolbar和dropdown中取色 @@ -421,8 +423,8 @@ align-items: center; &:focus-within { - border-color: var(--primary-color); - box-shadow: 0 0 0 3px var(--secondary-color); + border-color: var(--color-brand-primary); + box-shadow: 0 0 0 3px var(--color-bg-active); } &.ace_nomatch { @@ -524,8 +526,8 @@ } &.checked { - border-color: var(--primary-color); - background-color: var(--secondary-color); + border-color: var(--color-brand-primary); + background-color: var(--color-bg-active); color: var(--ace-search-text-color); opacity: var(--opacity-100); } @@ -632,7 +634,7 @@ } } -@import './components/bubble'; +@include meta.load-css('./components/bubble'); .cherry-floatmenu { z-index: 4; @@ -704,7 +706,7 @@ width: 50%; box-sizing: border-box; overflow: hidden; - background-color: var(--base-editor-bg); + background-color: var(--color-bg-canvas); z-index: 1; &.cherry-editor--full { @@ -756,8 +758,8 @@ .cm-editor { font-family: var(--font-family-sans); - background-color: var(--base-editor-bg); - color: var(--base-font-color); + background-color: var(--color-bg-canvas); + color: var(--color-text-primary); // codemirror 依赖隐藏的 textarea 计算行高,这里将字体大小设置为行高,避免输入法遮挡内容 // Fixed https://github.com/Tencent/cherry-markdown/issues/82 @@ -772,7 +774,7 @@ .cm-strong, .cm-em, .cm-meta { - color: var(--base-font-color); + color: var(--color-text-primary); } .cm-image-marker, @@ -931,8 +933,8 @@ z-index: 1; .cm-editor { font-family: var(--font-family-sans); - background-color: var(--base-editor-bg); - color: var(--base-font-color); + background-color: var(--color-bg-canvas); + color: var(--color-text-primary); } } @@ -1014,9 +1016,9 @@ box-shadow: 5px 0 5px rgba(0, 0, 0, 0.05); transition: all 0.3s; z-index: 2; - color: var(--base-font-color); + color: var(--color-text-primary); background-color: var(--toolbar-bg); - border: 1px solid var(--base-border-color); + border: 1px solid var(--color-border-default); } .cherry-code-block-custom-btn { width: auto; @@ -1035,8 +1037,8 @@ transition: all 0.3s; z-index: 2; color: var(--toolbar-btn-color); - background-color: var(--primary-color); - border: 1px solid var(--base-border-color); + background-color: var(--color-brand-primary); + border: 1px solid var(--color-border-default); } .cherry-expand-code-block { top: 45px; @@ -1093,8 +1095,8 @@ .cherry-unExpand-code-block:focus-visible, .cherry-edit-code-block:focus-visible { box-shadow: - 0 0 0 2px var(--base-previewer-bg), - 0 0 0 4px var(--primary-color); + 0 0 0 2px var(--color-bg-surface), + 0 0 0 4px var(--color-brand-primary); } .cherry-code-preview-lang-select { @@ -1102,9 +1104,9 @@ -webkit-appearance: none; font-size: 14px; - color: var(--base-font-color); + color: var(--color-text-primary); background-color: var(--toolbar-bg); - border: 1px solid var(--base-border-color); + border: 1px solid var(--color-border-default); border-radius: 6px; padding: 5px 36px 5px 12px; cursor: pointer; @@ -1118,16 +1120,16 @@ } .cherry-code-preview-lang-select:focus { - border-color: var(--primary-color); + border-color: var(--color-brand-primary); outline: 0; box-shadow: - 0 0 0 2px var(--base-previewer-bg), - 0 0 0 4px var(--primary-color); + 0 0 0 2px var(--color-bg-surface), + 0 0 0 4px var(--color-brand-primary); background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23495057' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 11 6-6 6 6'/%3e%3c/svg%3e"); } .cherry-code-preview-lang-select option { - color: var(--base-font-color); + color: var(--color-text-primary); font-size: 14px; background-color: var(--toolbar-bg); cursor: cursor; @@ -1138,8 +1140,8 @@ color: var(--toolbar-btn-hover-color); } .cherry-code-preview-lang-select:disabled { - background-color: var(--base-border-color); - color: var(--base-font-color); + background-color: var(--color-border-default); + color: var(--color-text-primary); cursor: not-allowed; } } @@ -1152,7 +1154,7 @@ width: 0.7em; height: 0.7em; border-radius: 100%; - border: var(--primary-color) solid 1px; + border: var(--color-brand-primary) solid 1px; margin-left: 0.2em; box-sizing: border-box; } @@ -1205,7 +1207,7 @@ border-left: 2px solid var(--drag-border-color); width: 50%; box-sizing: border-box; - background-color: var(--base-previewer-bg); + background-color: var(--color-bg-surface); min-height: auto; overflow-y: auto; -webkit-print-color-adjust: exact; @@ -1265,7 +1267,7 @@ .cherry-expand-code-block, .cherry-unExpand-code-block, .cherry-edit-code-block { - background-color: var(--primary-color); + background-color: var(--color-brand-primary); } } @@ -1589,7 +1591,7 @@ .cherry-toc-title { font-size: var(--font-size-md); font-weight: bold; - color: var(--primary-color); + color: var(--color-brand-primary); padding-left: 5px; } .ch-icon-chevronsLeft { @@ -1631,8 +1633,8 @@ cursor: pointer; &:hover, &.current { - border-left-color: var(--primary-color); - color: var(--primary-color); + border-left-color: var(--color-brand-primary); + color: var(--color-brand-primary); } .cherry-toc-in-blockquote { font-size: 0.6em; @@ -1746,11 +1748,4 @@ } /** 引入自带的主题 */ -@import './themes/default.scss'; -@import './themes/dark.scss'; -@import './themes/abyss.scss'; -@import './themes/green.scss'; -@import './themes/red.scss'; -@import './themes/gray.scss'; -@import './themes/violet.scss'; -@import './themes/blue.scss'; +@include meta.load-css('./themes/index'); diff --git a/packages/cherry-markdown/src/sass/codemirror-v6-fixes.scss b/packages/cherry-markdown/src/sass/codemirror-v6-fixes.scss index 0e652c716..6e4e76b04 100644 --- a/packages/cherry-markdown/src/sass/codemirror-v6-fixes.scss +++ b/packages/cherry-markdown/src/sass/codemirror-v6-fixes.scss @@ -9,8 +9,8 @@ } .cm-editor .cm-gutter { - border-right: 1px solid var(--base-border-color); - background-color: var(--base-editor-bg); + border-right: 1px solid var(--color-border-default); + background-color: var(--color-bg-canvas); } .cm-editor .cm-lineNumbers { diff --git a/packages/cherry-markdown/src/sass/components/shortcut_key_config.scss b/packages/cherry-markdown/src/sass/components/shortcut_key_config.scss index 48c18c91f..6bdb0323c 100644 --- a/packages/cherry-markdown/src/sass/components/shortcut_key_config.scss +++ b/packages/cherry-markdown/src/sass/components/shortcut_key_config.scss @@ -1,14 +1,4 @@ .cherry { - --shortcut-key-config-panel-bg: var(--dropdown-bg); - --shortcut-key-config-panel-text-color: var(--dropdown-item-color); - - // 快捷键面板通用样式变量 - --shortcut-panel-padding-x: 15px; - --shortcut-panel-padding-y: 10px; - --shortcut-panel-font-size-xs: var(--font-size-xs); - --shortcut-panel-border-radius: 4px; - --shortcut-panel-transition: all 0.2s; - .cherry-shortcut-key-config-panel-wrapper { background-color: var(--shortcut-key-config-panel-bg); color: var(--shortcut-key-config-panel-text-color); @@ -22,7 +12,7 @@ @mixin hover-color { &:hover { - color: var(--primary-color); + color: var(--color-brand-primary); } } @@ -62,8 +52,8 @@ } &.active { - color: var(--primary-color); - background-color: var(--secondary-color); + color: var(--color-brand-primary); + background-color: var(--color-bg-active); } } } @@ -104,10 +94,10 @@ background-color: var(--dropdown-item-hover-bg); .shortcut-key-config-panel-kbd { - border: 1px dashed var(--primary-color); + border: 1px dashed var(--color-brand-primary); border-radius: var(--shortcut-panel-border-radius); padding: 2px 4px; - background: var(--secondary-color); + background: var(--color-bg-active); transform: translateX(0) !important; } diff --git a/packages/cherry-markdown/src/sass/index.scss b/packages/cherry-markdown/src/sass/index.scss index 57708018c..536ebc36b 100644 --- a/packages/cherry-markdown/src/sass/index.scss +++ b/packages/cherry-markdown/src/sass/index.scss @@ -2,4 +2,4 @@ // CodeMirror 6 不需要单独引入样式文件,样式已集成在 @codemirror/view 中 -@import './cherry.scss'; +@include meta.load-css('./cherry'); diff --git a/packages/cherry-markdown/src/sass/markdown.scss b/packages/cherry-markdown/src/sass/markdown.scss index 9e435551d..dabdd0538 100644 --- a/packages/cherry-markdown/src/sass/markdown.scss +++ b/packages/cherry-markdown/src/sass/markdown.scss @@ -1,7 +1,9 @@ +@use 'sass:meta'; + .cherry-markdown { word-break: break-all; color: var(--md-paragraph-color); - background-color: var(--base-previewer-bg); + background-color: var(--color-bg-surface); h1, h2, h3, @@ -151,11 +153,11 @@ } kbd { - border: 1px solid var(--base-border-color); + border: 1px solid var(--color-border-default); border-radius: 4px; padding: 1px 2px; box-sizing: border-box; - box-shadow: inset 0px -1px var(--base-border-color); + box-shadow: inset 0px -1px var(--color-border-default); font-size: 0.85rem; } @@ -420,7 +422,7 @@ border: 1px solid var(--md-hr-border); [data-inline-code-theme='black'] & { - color: var(--base-font-color); + color: var(--color-text-primary); background-color: var(--md-inline-code-bg); } } @@ -683,15 +685,15 @@ .cherry[class*="theme__"] .cherry-previewer-table-content-handler { .cherry-previewer-table-content-handler__input { textarea { - background-color: var(--base-editor-bg); - color: var(--base-font-color); + background-color: var(--color-bg-canvas); + color: var(--color-text-primary); outline-color: var(--editor-header-color); } } } div[data-type='codeBlock'] { - @import 'prism/tomorrow-night'; + @include meta.load-css('prism/tomorrow-night'); div[data-code-wrap='wrap'] & code[class*=language-]{ white-space: pre-wrap; @@ -699,43 +701,43 @@ div[data-type='codeBlock'] { } [data-code-block-theme='default'] & { - @import 'prism/default'; + @include meta.load-css('prism/default'); } [data-code-block-theme='dark'] & { - @import 'prism/dark'; + @include meta.load-css('prism/dark'); } [data-code-block-theme='one-dark'] & { - @import 'prism/one-dark'; + @include meta.load-css('prism/one-dark'); } [data-code-block-theme='one-light'] & { - @import 'prism/one-light'; + @include meta.load-css('prism/one-light'); } [data-code-block-theme='vs-dark'] & { - @import 'prism/vs-dark'; + @include meta.load-css('prism/vs-dark'); } [data-code-block-theme='vs-light'] & { - @import 'prism/vs-light'; + @include meta.load-css('prism/vs-light'); } [data-code-block-theme='okaidia'] & { - @import 'prism/okaidia'; + @include meta.load-css('prism/okaidia'); } [data-code-block-theme='twilight'] & { - @import 'prism/twilight'; + @include meta.load-css('prism/twilight'); } [data-code-block-theme='coy'] & { - @import 'prism/coy'; + @include meta.load-css('prism/coy'); } [data-code-block-theme='solarized-light'] & { - @import 'prism/solarized-light'; + @include meta.load-css('prism/solarized-light'); } } @@ -908,7 +910,7 @@ div[data-type='codeBlock'] { overflow: hidden; border-radius: var(--panel-border-radius, var(--radius-xl)); box-sizing: border-box; - border: var(--panel-border, 0.5px solid var(--panel-border-color, transparent)); + border: var(--panel-border, 1px solid var(--color-border-default)); background: var(--panel-bg, transparent); box-shadow: var(--panel-box-shadow, none); backdrop-filter: var(--panel-backdrop-filter, none); @@ -937,71 +939,61 @@ div[data-type='codeBlock'] { } .cherry-panel__primary { - --panel-bg: var(--panel-primary-bg, #cfe2ff); - --panel-border-color: var(--panel-primary-border-color, transparent); - --panel-box-shadow: var(--panel-primary-box-shadow, none); - --panel-title-bg: var(--panel-primary-title-bg, #0d6dfe); - --panel-title-color: var(--panel-primary-title-color, #fff); - --panel-title-border-radius: var(--panel-primary-title-border-radius, 0); - --panel-title-border-bottom: var(--panel-primary-title-border-bottom, none); - --panel-body-bg: var(--panel-primary-body-bg, transparent); - --panel-body-color: var(--panel-primary-body-color, #0a58ca); - --panel-body-border-radius: var(--panel-primary-body-border-radius, 0); + --panel-border: 1px solid var(--panel-primary-accent, var(--color-brand-primary)); + --panel-bg: var(--panel-primary-surface, var(--color-bg-active)); + --panel-box-shadow: var(--panel-primary-box-shadow, var(--panel-box-shadow)); + --panel-title-bg: var(--panel-primary-emphasis, var(--panel-primary-accent, var(--color-brand-primary))); + --panel-title-color: var(--panel-primary-title-fg, #fff); + --panel-title-border-bottom: 1px solid var(--panel-primary-accent, var(--color-brand-primary)); + --panel-body-bg: var(--panel-primary-surface, var(--color-bg-active)); + --panel-body-color: var(--panel-primary-body-fg, var(--panel-primary-accent, var(--color-brand-primary))); --panel-icon: var(--panel-primary-icon, '\EA6A'); } .cherry-panel__info { - --panel-bg: var(--panel-info-bg, #cff4fc); - --panel-border-color: var(--panel-info-border-color, transparent); - --panel-box-shadow: var(--panel-info-box-shadow, none); - --panel-title-bg: var(--panel-info-title-bg, #099cba); - --panel-title-color: var(--panel-info-title-color, #fff); - --panel-title-border-radius: var(--panel-info-title-border-radius, 0); - --panel-title-border-bottom: var(--panel-info-title-border-bottom, none); - --panel-body-bg: var(--panel-info-body-bg, transparent); - --panel-body-color: var(--panel-info-body-color, #087990); - --panel-body-border-radius: var(--panel-info-body-border-radius, 0); + --panel-border: 1px solid var(--panel-info-accent, var(--oc-cyan-5)); + --panel-bg: var(--panel-info-surface, var(--oc-cyan-0)); + --panel-box-shadow: var(--panel-info-box-shadow, var(--panel-box-shadow)); + --panel-title-bg: var(--panel-info-emphasis, var(--oc-cyan-6)); + --panel-title-color: var(--panel-info-title-fg, #fff); + --panel-title-border-bottom: 1px solid var(--panel-info-accent, var(--oc-cyan-5)); + --panel-body-bg: var(--panel-info-surface, var(--oc-cyan-0)); + --panel-body-color: var(--panel-info-body-fg, var(--oc-cyan-8)); --panel-icon: var(--panel-info-icon, '\EA69'); } .cherry-panel__warning { - --panel-bg: var(--panel-warning-bg, #fff3cd); - --panel-border-color: var(--panel-warning-border-color, transparent); - --panel-box-shadow: var(--panel-warning-box-shadow, none); - --panel-title-bg: var(--panel-warning-title-bg, #b38806); - --panel-title-color: var(--panel-warning-title-color, #fff); - --panel-title-border-radius: var(--panel-warning-title-border-radius, 0); - --panel-title-border-bottom: var(--panel-warning-title-border-bottom, none); - --panel-body-bg: var(--panel-warning-body-bg, transparent); - --panel-body-color: var(--panel-warning-body-color, #997404); - --panel-body-border-radius: var(--panel-warning-body-border-radius, 0); + --panel-border: 1px solid var(--panel-warning-accent, var(--oc-yellow-5)); + --panel-bg: var(--panel-warning-surface, var(--oc-yellow-0)); + --panel-box-shadow: var(--panel-warning-box-shadow, var(--panel-box-shadow)); + --panel-title-bg: var(--panel-warning-emphasis, var(--oc-yellow-6)); + --panel-title-color: var(--panel-warning-title-fg, #fff); + --panel-title-border-bottom: 1px solid var(--panel-warning-accent, var(--oc-yellow-5)); + --panel-body-bg: var(--panel-warning-surface, var(--oc-yellow-0)); + --panel-body-color: var(--panel-warning-body-fg, var(--oc-yellow-8)); --panel-icon: var(--panel-warning-icon, '\EA6B'); } .cherry-panel__danger { - --panel-bg: var(--panel-danger-bg, #f8d7da); - --panel-border-color: var(--panel-danger-border-color, transparent); - --panel-box-shadow: var(--panel-danger-box-shadow, none); - --panel-title-bg: var(--panel-danger-title-bg, #dc3545); - --panel-title-color: var(--panel-danger-title-color, #fff); - --panel-title-border-radius: var(--panel-danger-title-border-radius, 0); - --panel-title-border-bottom: var(--panel-danger-title-border-bottom, none); - --panel-body-bg: var(--panel-danger-body-bg, transparent); - --panel-body-color: var(--panel-danger-body-color, #b02a37); - --panel-body-border-radius: var(--panel-danger-body-border-radius, 0); + --panel-border: 1px solid var(--panel-danger-accent, var(--oc-red-5)); + --panel-bg: var(--panel-danger-surface, var(--oc-red-0)); + --panel-box-shadow: var(--panel-danger-box-shadow, var(--panel-box-shadow)); + --panel-title-bg: var(--panel-danger-emphasis, var(--oc-red-6)); + --panel-title-color: var(--panel-danger-title-fg, #fff); + --panel-title-border-bottom: 1px solid var(--panel-danger-accent, var(--oc-red-5)); + --panel-body-bg: var(--panel-danger-surface, var(--oc-red-0)); + --panel-body-color: var(--panel-danger-body-fg, var(--oc-red-8)); --panel-icon: var(--panel-danger-icon, '\EA68'); } .cherry-panel__success { - --panel-bg: var(--panel-success-bg, #d1e7dd); - --panel-border-color: var(--panel-success-border-color, transparent); - --panel-box-shadow: var(--panel-success-box-shadow, none); - --panel-title-bg: var(--panel-success-title-bg, #198754); - --panel-title-color: var(--panel-success-title-color, #fff); - --panel-title-border-radius: var(--panel-success-title-border-radius, 0); - --panel-title-border-bottom: var(--panel-success-title-border-bottom, none); - --panel-body-bg: var(--panel-success-body-bg, transparent); - --panel-body-color: var(--panel-success-body-color, #146c43); - --panel-body-border-radius: var(--panel-success-body-border-radius, 0); + --panel-border: 1px solid var(--panel-success-accent, var(--oc-green-5)); + --panel-bg: var(--panel-success-surface, var(--oc-green-0)); + --panel-box-shadow: var(--panel-success-box-shadow, var(--panel-box-shadow)); + --panel-title-bg: var(--panel-success-emphasis, var(--oc-green-6)); + --panel-title-color: var(--panel-success-title-fg, #fff); + --panel-title-border-bottom: 1px solid var(--panel-success-accent, var(--oc-green-5)); + --panel-body-bg: var(--panel-success-surface, var(--oc-green-0)); + --panel-body-color: var(--panel-success-body-fg, var(--oc-green-8)); --panel-icon: var(--panel-success-icon, '\EA67'); } diff --git a/packages/cherry-markdown/src/sass/markdown_pure.scss b/packages/cherry-markdown/src/sass/markdown_pure.scss index 95629dde8..802d0da59 100644 --- a/packages/cherry-markdown/src/sass/markdown_pure.scss +++ b/packages/cherry-markdown/src/sass/markdown_pure.scss @@ -1,10 +1,6 @@ -@import './markdown.scss'; +@use 'sass:meta'; + +@include meta.load-css('./variables/index'); +@include meta.load-css('./markdown'); /** 引入自带的主题 */ -@import './themes/default.scss'; -@import './themes/dark.scss'; -@import './themes/abyss.scss'; -@import './themes/green.scss'; -@import './themes/red.scss'; -@import './themes/gray.scss'; -@import './themes/violet.scss'; -@import './themes/blue.scss'; +@include meta.load-css('./themes/index'); diff --git a/packages/cherry-markdown/src/sass/previewer.scss b/packages/cherry-markdown/src/sass/previewer.scss index 77a3ab04f..6717ac597 100644 --- a/packages/cherry-markdown/src/sass/previewer.scss +++ b/packages/cherry-markdown/src/sass/previewer.scss @@ -17,8 +17,8 @@ border-radius: 5px; z-index: 11; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); - background: var(--base-editor-bg); - border: 1px solid var(--base-border-color); + background: var(--color-bg-canvas); + border: 1px solid var(--color-border-default); } .footnote.hidden { display: none; @@ -26,7 +26,7 @@ .cherry-previewer-img-size-handler { position:absolute; box-shadow: 0 1px 4px 0 rgba(20,81,154, 0.5); - border:1px solid var(--primary-color); + border:1px solid var(--color-brand-primary); box-sizing: content-box; pointer-events:none; .cherry-previewer-img-size-handler__points { @@ -36,7 +36,7 @@ margin-top: -7px; margin-left: -7px; border-radius: 9px; - background: var(--primary-color); + background: var(--color-brand-primary); border: 2px solid var(--oc-white); box-sizing: content-box; box-shadow: 0px 2px 2px 0px rgba(20,81,154,0.5); @@ -83,9 +83,20 @@ } } .cherry-previewer-img-tool-handler { - @extend .cherry-bubble; - padding: var(--bubble-padding); + position: absolute; display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + font-size: var(--font-size-sm); + min-height: var(--bubble-btn-height); + min-width: 50px; + border: var(--border-width-1) solid var(--bubble-border); + background-color: var(--bubble-bg); + box-shadow: var(--bubble-shadow); + border-radius: var(--bubble-radius); + z-index: var(--bubble-z-index); + padding: var(--bubble-padding); flex-direction: column; .img-tool-group { @@ -121,7 +132,7 @@ width: 100%; margin: var(--border-width-4) 0; height: var(--border-width-1); - border-bottom: var(--border-width-1) var(--base-border-color) dashed; + border-bottom: var(--border-width-1) var(--color-border-default) dashed; } .img-tool-icon { @@ -140,7 +151,7 @@ border: 0; box-sizing: border-box; resize: none; - outline: 1px solid var(--primary-color); + outline: 1px solid var(--color-brand-primary); word-break: break-all; } } @@ -179,7 +190,7 @@ cursor: pointer; transition: all 0.3s; &:hover { - background-color: var(--secondary-color); + background-color: var(--color-bg-active); } } @@ -196,7 +207,7 @@ font-size: var(--font-size-xs); border: 1px solid var(--md-table-operator-color); border-radius: 999px; - background-color: var(--base-previewer-bg); + background-color: var(--color-bg-surface); cursor: pointer; transition: all 0.3s; z-index: 1001; @@ -290,7 +301,7 @@ width: var(--bubble-btn-height); height: var(--bubble-btn-height); cursor: pointer; - color: var(--base-font-color); + color: var(--color-text-primary); font-size: var(--font-size-sm); transition: background-color 0.2s ease, color 0.2s ease; border-radius: calc(var(--bubble-radius) - 2px); @@ -337,12 +348,10 @@ background-color: var(--md-paragraph-highlight-line-bg); } 100% { - background-color: var(--base-previewer-bg); + background-color: var(--color-bg-surface); } } .cherry-highlight-line { animation: changeHighlightLineBg 1s; } } - - diff --git a/packages/cherry-markdown/src/sass/themes/abyss.scss b/packages/cherry-markdown/src/sass/themes/abyss.scss index 9be00347b..4a85ea5a7 100644 --- a/packages/cherry-markdown/src/sass/themes/abyss.scss +++ b/packages/cherry-markdown/src/sass/themes/abyss.scss @@ -3,21 +3,31 @@ */ .cherry.theme__abyss { - /* ========== 基础色彩变量覆盖 ========== */ - --primary-color: #8394AD; - --secondary-color: #2C2E37; - - --base-font-color: #CECFCF; - --base-editor-bg: #1E222A; - --base-previewer-bg: #1E222A; - --base-border-color: var(--primary-color); + /* ========== 新语义变量覆盖 ========== */ + --color-brand-primary: #8394AD; + --color-brand-primary-hover: #97a7be; + --color-text-primary: #CECFCF; + --color-text-secondary: #A8A8A9; + --color-bg-canvas: #1E222A; + --color-bg-surface: #1E222A; + --color-bg-hover: #2C2E37; + --color-bg-active: #2C2E37; + --color-border-default: var(--color-brand-primary); + + /* ========== 兼容旧语义别名 ========== */ + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); + --base-font-color: var(--color-text-primary); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --base-border-color: var(--color-border-default); /* ========== 工具栏相关变量 ========== */ --toolbar-bg: #181C24; - --toolbar-btn-color: #CECFCF; - --toolbar-btn-hover-bg: var(--secondary-color); - --toolbar-btn-hover-color: var(--primary-color); - --toolbar-btn-active-bg: var(--secondary-color); + --toolbar-btn-color: var(--color-text-primary); + --toolbar-btn-hover-bg: var(--color-bg-active); + --toolbar-btn-hover-color: var(--color-brand-primary); + --toolbar-btn-active-bg: var(--color-bg-active); --toolbar-split-color: var(--oc-blue-5); --toolbar-shadow: none; @@ -27,7 +37,7 @@ --dropdown-radius: var(--radius-xl); --dropdown-padding: var(--spacing-xs) 0; - // 下拉菜单项 + /* 下拉菜单项 */ --dropdown-item-hover-bg: var(--toolbar-btn-hover-bg); --dropdown-item-color: var(--toolbar-btn-color); @@ -52,11 +62,12 @@ --md-inline-code-bg: #00203d; --md-blockquote-bg: #2A2F3B; --md-hr-border: var(--primary-color); - /* ========== table 相关变量 ========== */ + /* ========== Table 相关变量 ========== */ --md-table-border: #47556D; --md-table-drag-border-bg: var(--oc-blue-3); --md-table-sort-active-bg: rgba(100, 203, 255, 0.4); + /* ========== TOC 相关变量 ========== */ --md-toc-bg: #2A2F3B; --md-toc-title-color: var(--primary-color); --md-toc-link-color: var(--primary-color); @@ -65,7 +76,7 @@ --md-toc-link-hover-bg: var(--primary-color); --md-toc-indicator-hover-color: var(--primary-color); - /* ========== 手风琴组件变量覆盖 ========== */ + /* ========== Accordion 相关变量 ========== */ --accordion-bg: #2A2F3B; --accordion-border: var(--oc-blue-5); --accordion-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); @@ -75,11 +86,11 @@ --accordion-body-border: var(--oc-blue-5); --accordion-body-color: var(--base-font-color); - /* ========== Mermaid 工具栏变量覆盖 ========== */ + /* ========== Mermaid 相关变量 ========== */ --mermaid-toolbar-slider-bg: rgba(255, 255, 255, 0.15); --mermaid-toolbar-tab-active-color: #fff; - /* ========== 其余单个组件 ========== */ + /* ========== 其它组件变量 ========== */ --drag-border-color: #3a4453; /* ========== Panel 相关变量 ========== */ @@ -90,63 +101,54 @@ --panel-backdrop-filter: blur(10px); --panel-title-bg: linear-gradient(145deg, #333333 0%, #2a2a2a 100%); --panel-title-color: var(--oc-gray-1); - --panel-title-border-radius: 16px 16px 0 0; --panel-title-border-bottom: 1px solid rgba(109, 40, 217, 0.15); --panel-body-bg: linear-gradient(145deg, #242424 0%, #1e1e1e 100%); --panel-body-color: var(--oc-gray-2); - --panel-body-border-radius: 0 0 16px 16px; /* Primary Panel */ - --panel-primary-bg: linear-gradient(145deg, rgba(109, 40, 217, 0.08) 0%, rgba(67, 56, 202, 0.08) 100%); - --panel-primary-border-color: rgba(109, 40, 217, 0.3); + --panel-primary-accent: rgba(109, 40, 217, 0.3); + --panel-primary-surface: linear-gradient(145deg, rgba(109, 40, 217, 0.08) 0%, rgba(67, 56, 202, 0.08) 100%); + --panel-primary-emphasis: linear-gradient(145deg, rgba(109, 40, 217, 0.3) 0%, rgba(67, 56, 202, 0.3) 100%); + --panel-primary-title-fg: var(--oc-violet-2); + --panel-primary-body-fg: var(--oc-violet-3); --panel-primary-box-shadow: none; - --panel-primary-title-bg: linear-gradient(145deg, rgba(109, 40, 217, 0.3) 0%, rgba(67, 56, 202, 0.3) 100%); - --panel-primary-title-color: var(--oc-violet-2); - --panel-primary-body-bg: linear-gradient(145deg, rgba(109, 40, 217, 0.05) 0%, rgba(67, 56, 202, 0.05) 100%); - --panel-primary-body-color: var(--oc-violet-3); /* Info Panel */ - --panel-info-bg: linear-gradient(145deg, rgba(34, 184, 207, 0.08) 0%, rgba(59, 130, 246, 0.08) 100%); - --panel-info-border-color: rgba(34, 184, 207, 0.3); + --panel-info-accent: rgba(34, 184, 207, 0.3); + --panel-info-surface: linear-gradient(145deg, rgba(34, 184, 207, 0.08) 0%, rgba(59, 130, 246, 0.08) 100%); + --panel-info-emphasis: linear-gradient(145deg, rgba(34, 184, 207, 0.3) 0%, rgba(59, 130, 246, 0.3) 100%); + --panel-info-title-fg: var(--oc-cyan-2); + --panel-info-body-fg: var(--oc-cyan-3); --panel-info-box-shadow: none; - --panel-info-title-bg: linear-gradient(145deg, rgba(34, 184, 207, 0.3) 0%, rgba(59, 130, 246, 0.3) 100%); - --panel-info-title-color: var(--oc-cyan-2); - --panel-info-body-bg: linear-gradient(145deg, rgba(34, 184, 207, 0.05) 0%, rgba(59, 130, 246, 0.05) 100%); - --panel-info-body-color: var(--oc-cyan-3); /* Warning Panel */ - --panel-warning-bg: linear-gradient(145deg, rgba(255, 193, 7, 0.08) 0%, rgba(251, 191, 36, 0.08) 100%); - --panel-warning-border-color: rgba(255, 193, 7, 0.3); + --panel-warning-accent: rgba(255, 193, 7, 0.3); + --panel-warning-surface: linear-gradient(145deg, rgba(255, 193, 7, 0.08) 0%, rgba(251, 191, 36, 0.08) 100%); + --panel-warning-emphasis: linear-gradient(145deg, rgba(255, 193, 7, 0.3) 0%, rgba(251, 191, 36, 0.3) 100%); + --panel-warning-title-fg: var(--oc-yellow-2); + --panel-warning-body-fg: var(--oc-yellow-3); --panel-warning-box-shadow: none; - --panel-warning-title-bg: linear-gradient(145deg, rgba(255, 193, 7, 0.3) 0%, rgba(251, 191, 36, 0.3) 100%); - --panel-warning-title-color: var(--oc-yellow-2); - --panel-warning-body-bg: linear-gradient(145deg, rgba(255, 193, 7, 0.05) 0%, rgba(251, 191, 36, 0.05) 100%); - --panel-warning-body-color: var(--oc-yellow-3); /* Danger Panel */ - --panel-danger-bg: linear-gradient(145deg, rgba(239, 68, 68, 0.08) 0%, rgba(220, 38, 127, 0.08) 100%); - --panel-danger-border-color: rgba(239, 68, 68, 0.3); + --panel-danger-accent: rgba(239, 68, 68, 0.3); + --panel-danger-surface: linear-gradient(145deg, rgba(239, 68, 68, 0.08) 0%, rgba(220, 38, 127, 0.08) 100%); + --panel-danger-emphasis: linear-gradient(145deg, rgba(239, 68, 68, 0.3) 0%, rgba(220, 38, 127, 0.3) 100%); + --panel-danger-title-fg: var(--oc-red-2); + --panel-danger-body-fg: var(--oc-red-3); --panel-danger-box-shadow: none; - --panel-danger-title-bg: linear-gradient(145deg, rgba(239, 68, 68, 0.3) 0%, rgba(220, 38, 127, 0.3) 100%); - --panel-danger-title-color: var(--oc-red-2); - --panel-danger-body-bg: linear-gradient(145deg, rgba(239, 68, 68, 0.05) 0%, rgba(220, 38, 127, 0.05) 100%); - --panel-danger-body-color: var(--oc-red-3); /* Success Panel */ - --panel-success-bg: linear-gradient(145deg, rgba(34, 197, 94, 0.08) 0%, rgba(16, 185, 129, 0.08) 100%); - --panel-success-border-color: rgba(34, 197, 94, 0.3); + --panel-success-accent: rgba(34, 197, 94, 0.3); + --panel-success-surface: linear-gradient(145deg, rgba(34, 197, 94, 0.08) 0%, rgba(16, 185, 129, 0.08) 100%); + --panel-success-emphasis: linear-gradient(145deg, rgba(34, 197, 94, 0.3) 0%, rgba(16, 185, 129, 0.3) 100%); + --panel-success-title-fg: var(--oc-green-2); + --panel-success-body-fg: var(--oc-green-3); --panel-success-box-shadow: none; - --panel-success-title-bg: linear-gradient(145deg, rgba(34, 197, 94, 0.3) 0%, rgba(16, 185, 129, 0.3) 100%); - --panel-success-title-color: var(--oc-green-2); - --panel-success-body-bg: linear-gradient(145deg, rgba(34, 197, 94, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%); - --panel-success-body-color: var(--oc-green-3); } .cherry-markdown.theme__abyss { - figure { svg:not(.echarts-svg) { - path, rect, line { diff --git a/packages/cherry-markdown/src/sass/themes/blue.scss b/packages/cherry-markdown/src/sass/themes/blue.scss index f70c8cfd4..ba47056a1 100644 --- a/packages/cherry-markdown/src/sass/themes/blue.scss +++ b/packages/cherry-markdown/src/sass/themes/blue.scss @@ -3,23 +3,34 @@ */ .cherry.theme__blue { - /* ========== 基础色彩变量覆盖 ========== */ - --primary-color: var(--oc-indigo-6); - --secondary-color: var(--oc-violet-0); - - --base-font-color: var(--oc-indigo-8); - --base-editor-bg: var(--oc-violet-0); - --base-previewer-bg: var(--oc-violet-0); - --base-border-color: var(--oc-indigo-4); + /* ========== 新语义变量覆盖 ========== */ + --color-brand-primary: var(--oc-indigo-6); + --color-brand-primary-hover: var(--oc-indigo-5); + --color-text-primary: var(--oc-indigo-8); + --color-text-secondary: var(--oc-indigo-6); + --color-bg-canvas: var(--oc-violet-0); + --color-bg-surface: var(--oc-violet-0); + --color-bg-hover: var(--oc-violet-3); + --color-bg-active: var(--oc-violet-0); + --color-border-default: var(--oc-indigo-4); + + /* ========== 兼容旧语义别名 ========== */ + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); + --base-font-color: var(--color-text-primary); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --base-border-color: var(--color-border-default); /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-violet-1); --toolbar-btn-color: var(--oc-indigo-7); - --toolbar-btn-hover-bg: var(--oc-violet-3); + --toolbar-btn-hover-bg: var(--color-bg-hover); --toolbar-btn-hover-color: var(--oc-white); - --toolbar-btn-active-bg:var(--oc-blue-5); - --toolbar-split-color: var(--oc-indigo-4); + --toolbar-btn-active-bg: var(--oc-blue-5); + --toolbar-split-color: var(--color-border-default); + /* ========== 工具栏的下拉菜单 ========== */ --dropdown-bg: var(--oc-white); /* ========== 编辑器相关变量 ========== */ @@ -43,18 +54,28 @@ --md-inline-code-bg: var(--oc-violet-1); --md-blockquote-bg: var(--oc-violet-1); --md-hr-border: var(--oc-indigo-4); - /* ========== table 相关变量 ========== */ - --md-table-border: var(--oc-blue-5); - --md-table-add-border: var(--oc-blue-9); - --md-table-delete-bg: var(--oc-violet-1); - --md-table-sort-active-bg: var(--oc-blue-5); - --md-table-sort-border: var(--oc-indigo-4); - /* ========== table 相关变量 ========== */ + + /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-blue-5); --md-table-drag-border-bg: var(--primary-color); --md-table-sort-active-bg: rgba(184, 134, 253, 0.4); + /* ========== TOC 相关变量 ========== */ --md-paragraph-highlight-line-bg: var(--oc-violet-1); + --md-toc-bg: var(--oc-white); + --md-toc-border-color: var(--base-border-color); + --md-toc-indicator-color: var(--oc-indigo-1); + --md-toc-link-hover-bg: var(--oc-violet-0); + --md-toc-link-active-bg: var(--oc-violet-1); + + /* ========== Accordion 相关变量 ========== */ + --accordion-bg: var(--oc-violet-0); + --accordion-border: var(--oc-indigo-2); + --accordion-summary-bg: var(--oc-indigo-6); + --accordion-summary-hover-bg: var(--oc-indigo-5); + --accordion-body-bg: var(--oc-violet-0); + --accordion-body-border: var(--oc-indigo-1); + --accordion-body-color: var(--oc-indigo-8); /* ========== Panel 相关变量 ========== */ --panel-border-radius: 0; @@ -63,64 +84,45 @@ --panel-box-shadow: none; --panel-title-bg: transparent; --panel-title-color: inherit; + --panel-title-border-bottom: none; --panel-body-bg: transparent; --panel-body-color: inherit; + --panel-body-border-radius: 0; /* Primary Panel */ - --panel-primary-border: none; - --panel-primary-border-color: transparent; - --panel-primary-title-bg: transparent; - --panel-primary-bg: transparent; - --panel-primary-title-color: var(--oc-blue-7); - --panel-primary-body-color: inherit; + --panel-primary-accent: transparent; + --panel-primary-surface: transparent; + --panel-primary-emphasis: transparent; + --panel-primary-title-fg: var(--oc-blue-7); + --panel-primary-body-fg: inherit; /* Info Panel */ - --panel-info-border: none; - --panel-info-border-color: transparent; - --panel-info-title-bg: transparent; - --panel-info-bg: transparent; - --panel-info-title-color: var(--oc-cyan-7); - --panel-info-body-color: inherit; + --panel-info-accent: transparent; + --panel-info-surface: transparent; + --panel-info-emphasis: transparent; + --panel-info-title-fg: var(--oc-cyan-7); + --panel-info-body-fg: inherit; /* Warning Panel */ - --panel-warning-border: none; - --panel-warning-border-color: transparent; - --panel-warning-title-bg: transparent; - --panel-warning-bg: transparent; - --panel-warning-title-color: var(--oc-yellow-7); - --panel-warning-body-color: inherit; + --panel-warning-accent: transparent; + --panel-warning-surface: transparent; + --panel-warning-emphasis: transparent; + --panel-warning-title-fg: var(--oc-yellow-7); + --panel-warning-body-fg: inherit; /* Danger Panel */ - --panel-danger-border: none; - --panel-danger-border-color: transparent; - --panel-danger-title-bg: transparent; - --panel-danger-bg: transparent; - --panel-danger-title-color: var(--oc-pink-7); - --panel-danger-body-color: inherit; + --panel-danger-accent: transparent; + --panel-danger-surface: transparent; + --panel-danger-emphasis: transparent; + --panel-danger-title-fg: var(--oc-pink-7); + --panel-danger-body-fg: inherit; /* Success Panel */ - --panel-success-border: none; - --panel-success-border-color: transparent; - --panel-success-title-bg: transparent; - --panel-success-bg: transparent; - --panel-success-title-color: var(--oc-teal-7); - --panel-success-body-color: inherit; - --md-toc-bg: var(--oc-white); - --md-toc-border-color: var(--base-border-color); - --md-toc-indicator-color: var(--oc-indigo-1); - --md-toc-link-hover-bg: var(--oc-violet-0); - --md-toc-link-active-bg: var(--oc-violet-1); - - /* ========== 手风琴组件变量覆盖 ========== */ - --accordion-bg: var(--oc-violet-0); - --accordion-border: var(--oc-indigo-2); - - --accordion-summary-bg: var(--oc-indigo-6); - --accordion-summary-hover-bg: var(--oc-indigo-5); - - --accordion-body-bg: var(--oc-violet-0); - --accordion-body-border: var(--oc-indigo-1); - --accordion-body-color: var(--oc-indigo-8); + --panel-success-accent: transparent; + --panel-success-surface: transparent; + --panel-success-emphasis: transparent; + --panel-success-title-fg: var(--oc-teal-7); + --panel-success-body-fg: inherit; } /** 预览区域样式 */ diff --git a/packages/cherry-markdown/src/sass/themes/dark.scss b/packages/cherry-markdown/src/sass/themes/dark.scss index 7ef55ada9..75f09a53f 100644 --- a/packages/cherry-markdown/src/sass/themes/dark.scss +++ b/packages/cherry-markdown/src/sass/themes/dark.scss @@ -3,23 +3,35 @@ */ .cherry.theme__dark { - /* ========== 基础色彩变量覆盖 ========== */ - --primary-color: var(--oc-orange-5); - --secondary-color: #513838; - - --base-font-color: var(--oc-gray-4); - --base-editor-bg: var(--oc-gray-9); - --base-previewer-bg: var(--oc-gray-8); - --base-border-color: var(--oc-gray-5); + /* ========== 新语义变量覆盖 ========== */ + --color-brand-primary: var(--oc-orange-5); + --color-brand-primary-hover: var(--oc-orange-6); + --color-text-primary: var(--oc-gray-4); + --color-text-secondary: var(--oc-gray-5); + --color-bg-canvas: var(--oc-gray-9); + --color-bg-surface: var(--oc-gray-8); + --color-bg-hover: var(--oc-gray-8); + --color-bg-active: #513838; + --color-border-default: var(--oc-gray-5); + + /* ========== 兼容旧语义别名 ========== */ + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); + --base-font-color: var(--color-text-primary); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --base-border-color: var(--color-border-default); /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-gray-7); --toolbar-btn-color: var(--oc-gray-4); --toolbar-btn-hover-bg: var(--oc-gray-6); --toolbar-btn-hover-color: var(--oc-white); - --toolbar-btn-active-bg:var(--oc-gray-8); - --toolbar-split-color: var(--oc-gray-5); + --toolbar-btn-active-bg: var(--color-bg-active); + --toolbar-split-color: var(--color-border-default); + /* ========== 工具栏的下拉菜单 ========== */ + --dropdown-bg: var(--toolbar-bg); /* ========== 编辑器相关变量 ========== */ --editor-header-color: var(--primary-color); --editor-string-color: var(--oc-yellow-3); @@ -34,8 +46,8 @@ --dropdown-item-hover-bg: var(--oc-gray-9); --dropdown-item-hover-color: var(--oc-orange-5); - --dropdown-item-active-bg: var(--secondary-color); - --dropdown-item-active-color: var(--primary-color); + --dropdown-item-active-bg: var(--color-bg-active); + --dropdown-item-active-color: var(--color-brand-primary); /* ========== Markdown 相关变量 ========== */ --md-heading-color: var(--oc-orange-5); @@ -46,12 +58,12 @@ --md-inline-code-bg: rgb(81, 56, 56); --md-blockquote-bg: rgba(102, 128, 153, 0.05); --md-hr-border: var(--oc-gray-5); - --md-table-border: var(--oc-gray-5); - /* ========== table 相关变量 ========== */ + /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-gray-5); --md-table-drag-border-bg: var(--primary-color); --md-table-sort-active-bg: rgba(141, 104, 51, 0.493); + /* ========== TOC 相关变量 ========== */ --md-toc-bg: var(--oc-gray-9); --md-toc-border-color: var(--oc-gray-7); --md-toc-indicator-color: var(--oc-gray-7); @@ -59,24 +71,21 @@ --md-toc-link-active-bg: var(--oc-gray-7); --md-paragraph-highlight-line-bg: var(--oc-gray-7); - /* ========== 手风琴组件变量覆盖 ========== */ + /* ========== Accordion 相关变量 ========== */ --accordion-bg: var(--oc-gray-8); --accordion-border: var(--oc-gray-6); - --accordion-summary-bg: var(--oc-orange-6); --accordion-summary-hover-bg: var(--oc-orange-5); - --accordion-body-bg: var(--oc-gray-7); --accordion-body-border: var(--oc-gray-6); --accordion-body-color: var(--oc-gray-4); - /* ========== Mermaid 工具栏变量覆盖 ========== */ + /* ========== Mermaid 相关变量 ========== */ --mermaid-toolbar-slider-bg: rgba(255, 255, 255, 0.15); --mermaid-toolbar-tab-active-color: #fff; - /* 目录区域样式 */ + /* ========== TOC 区域样式 ========== */ .cherry-flex-toc { - .cherry-toc-head { i { &:hover { @@ -114,17 +123,16 @@ /** 快捷键配置面板样式 */ .cherry-shortcut-key-config-panel-wrapper { - .shortcut-panel-title, .shortcut-panel-settings { + .shortcut-panel-title, + .shortcut-panel-settings { color: var(--oc-gray-9); } } /** 预览区域样式 */ .cherry-markdown.theme__dark { - figure { svg:not(.echarts-svg) { - path, rect, line { @@ -158,54 +166,47 @@ --panel-backdrop-filter: blur(10px); --panel-title-bg: linear-gradient(145deg, #333333 0%, #2a2a2a 100%); --panel-title-color: var(--oc-gray-1); - --panel-title-border-radius: 16px 16px 0 0; --panel-title-border-bottom: 1px solid rgba(109, 40, 217, 0.15); --panel-body-bg: linear-gradient(145deg, #242424 0%, #1e1e1e 100%); --panel-body-color: var(--oc-gray-2); - --panel-body-border-radius: 0 0 16px 16px; /* Primary Panel */ - --panel-primary-bg: linear-gradient(145deg, rgba(109, 40, 217, 0.08) 0%, rgba(67, 56, 202, 0.08) 100%); - --panel-primary-border-color: rgba(109, 40, 217, 0.3); + --panel-primary-accent: rgba(109, 40, 217, 0.3); + --panel-primary-surface: linear-gradient(145deg, rgba(109, 40, 217, 0.08) 0%, rgba(67, 56, 202, 0.08) 100%); + --panel-primary-emphasis: linear-gradient(145deg, rgba(109, 40, 217, 0.3) 0%, rgba(67, 56, 202, 0.3) 100%); + --panel-primary-title-fg: var(--oc-violet-2); + --panel-primary-body-fg: var(--oc-violet-3); --panel-primary-box-shadow: none; - --panel-primary-title-bg: linear-gradient(145deg, rgba(109, 40, 217, 0.3) 0%, rgba(67, 56, 202, 0.3) 100%); - --panel-primary-title-color: var(--oc-violet-2); - --panel-primary-body-bg: linear-gradient(145deg, rgba(109, 40, 217, 0.05) 0%, rgba(67, 56, 202, 0.05) 100%); - --panel-primary-body-color: var(--oc-violet-3); /* Info Panel */ - --panel-info-bg: linear-gradient(145deg, rgba(34, 184, 207, 0.08) 0%, rgba(59, 130, 246, 0.08) 100%); - --panel-info-border-color: rgba(34, 184, 207, 0.3); + --panel-info-accent: rgba(34, 184, 207, 0.3); + --panel-info-surface: linear-gradient(145deg, rgba(34, 184, 207, 0.08) 0%, rgba(59, 130, 246, 0.08) 100%); + --panel-info-emphasis: linear-gradient(145deg, rgba(34, 184, 207, 0.3) 0%, rgba(59, 130, 246, 0.3) 100%); + --panel-info-title-fg: var(--oc-cyan-2); + --panel-info-body-fg: var(--oc-cyan-3); --panel-info-box-shadow: none; - --panel-info-title-bg: linear-gradient(145deg, rgba(34, 184, 207, 0.3) 0%, rgba(59, 130, 246, 0.3) 100%); - --panel-info-title-color: var(--oc-cyan-2); - --panel-info-body-bg: linear-gradient(145deg, rgba(34, 184, 207, 0.05) 0%, rgba(59, 130, 246, 0.05) 100%); - --panel-info-body-color: var(--oc-cyan-3); /* Warning Panel */ - --panel-warning-bg: linear-gradient(145deg, rgba(255, 193, 7, 0.08) 0%, rgba(251, 191, 36, 0.08) 100%); - --panel-warning-border-color: rgba(255, 193, 7, 0.3); + --panel-warning-accent: rgba(255, 193, 7, 0.3); + --panel-warning-surface: linear-gradient(145deg, rgba(255, 193, 7, 0.08) 0%, rgba(251, 191, 36, 0.08) 100%); + --panel-warning-emphasis: linear-gradient(145deg, rgba(255, 193, 7, 0.3) 0%, rgba(251, 191, 36, 0.3) 100%); + --panel-warning-title-fg: var(--oc-yellow-2); + --panel-warning-body-fg: var(--oc-yellow-3); --panel-warning-box-shadow: none; - --panel-warning-title-bg: linear-gradient(145deg, rgba(255, 193, 7, 0.3) 0%, rgba(251, 191, 36, 0.3) 100%); - --panel-warning-title-color: var(--oc-yellow-2); - --panel-warning-body-bg: linear-gradient(145deg, rgba(255, 193, 7, 0.05) 0%, rgba(251, 191, 36, 0.05) 100%); - --panel-warning-body-color: var(--oc-yellow-3); /* Danger Panel */ - --panel-danger-bg: linear-gradient(145deg, rgba(239, 68, 68, 0.08) 0%, rgba(220, 38, 127, 0.08) 100%); - --panel-danger-border-color: rgba(239, 68, 68, 0.3); + --panel-danger-accent: rgba(239, 68, 68, 0.3); + --panel-danger-surface: linear-gradient(145deg, rgba(239, 68, 68, 0.08) 0%, rgba(220, 38, 127, 0.08) 100%); + --panel-danger-emphasis: linear-gradient(145deg, rgba(239, 68, 68, 0.3) 0%, rgba(220, 38, 127, 0.3) 100%); + --panel-danger-title-fg: var(--oc-red-2); + --panel-danger-body-fg: var(--oc-red-3); --panel-danger-box-shadow: none; - --panel-danger-title-bg: linear-gradient(145deg, rgba(239, 68, 68, 0.3) 0%, rgba(220, 38, 127, 0.3) 100%); - --panel-danger-title-color: var(--oc-red-2); - --panel-danger-body-bg: linear-gradient(145deg, rgba(239, 68, 68, 0.05) 0%, rgba(220, 38, 127, 0.05) 100%); - --panel-danger-body-color: var(--oc-red-3); /* Success Panel */ - --panel-success-bg: linear-gradient(145deg, rgba(34, 197, 94, 0.08) 0%, rgba(16, 185, 129, 0.08) 100%); - --panel-success-border-color: rgba(34, 197, 94, 0.3); + --panel-success-accent: rgba(34, 197, 94, 0.3); + --panel-success-surface: linear-gradient(145deg, rgba(34, 197, 94, 0.08) 0%, rgba(16, 185, 129, 0.08) 100%); + --panel-success-emphasis: linear-gradient(145deg, rgba(34, 197, 94, 0.3) 0%, rgba(16, 185, 129, 0.3) 100%); + --panel-success-title-fg: var(--oc-green-2); + --panel-success-body-fg: var(--oc-green-3); --panel-success-box-shadow: none; - --panel-success-title-bg: linear-gradient(145deg, rgba(34, 197, 94, 0.3) 0%, rgba(16, 185, 129, 0.3) 100%); - --panel-success-title-color: var(--oc-green-2); - --panel-success-body-bg: linear-gradient(145deg, rgba(34, 197, 94, 0.05) 0%, rgba(16, 185, 129, 0.05) 100%); - --panel-success-body-color: var(--oc-green-3); } diff --git a/packages/cherry-markdown/src/sass/themes/default.scss b/packages/cherry-markdown/src/sass/themes/default.scss index 62fc5cd76..bc9d5f9af 100644 --- a/packages/cherry-markdown/src/sass/themes/default.scss +++ b/packages/cherry-markdown/src/sass/themes/default.scss @@ -3,21 +3,31 @@ */ .cherry.theme__default { - /* ========== 基础色彩变量覆盖 ========== */ - --primary-color: var(--oc-blue-6); - --secondary-color: var(--oc-blue-0); - - --base-font-color: var(--oc-gray-8); - --base-editor-bg: var(--oc-white); - --base-previewer-bg: var(--oc-white); - --base-border-color: var(--oc-blue-5); + /* ========== 新语义变量覆盖 ========== */ + --color-brand-primary: var(--oc-blue-6); + --color-brand-primary-hover: var(--oc-blue-7); + --color-text-primary: var(--oc-gray-8); + --color-text-secondary: var(--oc-gray-6); + --color-bg-canvas: var(--oc-white); + --color-bg-surface: var(--oc-white); + --color-bg-hover: var(--oc-gray-2); + --color-bg-active: var(--oc-blue-0); + --color-border-default: var(--oc-blue-5); + + /* ========== 兼容旧语义别名 ========== */ + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); + --base-font-color: var(--color-text-primary); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --base-border-color: var(--color-border-default); /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-white); --toolbar-btn-color: var(--oc-gray-8); - --toolbar-btn-hover-bg: var(--oc-gray-2); - --toolbar-btn-hover-color: var(--primary-color); - --toolbar-btn-active-bg: var(--secondary-color); + --toolbar-btn-hover-bg: var(--color-bg-hover); + --toolbar-btn-hover-color: var(--color-brand-primary); + --toolbar-btn-active-bg: var(--color-bg-active); --toolbar-split-color: var(--oc-blue-5); /* ========== 编辑器相关变量 ========== */ @@ -41,135 +51,21 @@ --md-inline-code-bg: var(--oc-blue-0); --md-blockquote-bg: var(--oc-blue-0); --md-hr-border: var(--oc-blue-5); - /* ========== table 相关变量 ========== */ + + /* ========== Table 相关变量 ========== */ --md-table-border: #D9DFE3; - --md-table-drag-border-bg: var(--oc-cyan-5); + --md-table-drag-border-bg: var(--oc-cyan-5); --md-table-sort-active-bg: rgb(208, 226, 247); - /* ========== 手风琴组件变量覆盖 ========== */ + /* ========== Accordion 相关变量 ========== */ --accordion-bg: var(--oc-blue-0); --accordion-border: var(--oc-blue-2); - --accordion-summary-bg: var(--oc-blue-5); --accordion-summary-hover-bg: var(--oc-blue-4); - --accordion-body-bg: var(--oc-blue-0); --accordion-body-border: var(--oc-blue-1); --accordion-body-color: var(--oc-gray-8); } /** 预览区域样式 */ -.cherry-markdown.theme__default { - - p, - div {} - - h1 {} - - h2 {} - - h3 {} - - h4 {} - - h5 {} - - h1, - h2, - h3, - h4, - h5, - h6 { - /** 标题前面的锚点或序号 */ - .anchor {} - } - - /** checklist 模式,未勾选时 */ - .ch-icon-square {} - - /** checklist 模式,勾选时 */ - .ch-icon-check {} - - blockquote {} - - a { - &:hover {} - } - - strong {} - - em {} - - del {} - - sup {} - - sub {} - - hr {} - - img {} - - video {} - - audio {} - - /** 行内代码 */ - code:not([class]) {} - - /** - * 代码块 - */ - pre code {} - - /** - * 表格 - */ - table, - .cherry-table { - tr {} - - th {} - - td {} - } - - /** 可以理解为上下结构的音标,下部是文字,上部是对应的拼音 */ - ruby { - /** 上部的拼音 */ - rt {} - } - - /** 脚注 */ - .footnote { - .footnote-title {} - - .one-footnote { - a.footnote-ref {} - } - } - - /** 行间公式 */ - .Cherry-InlineMath {} - - /** 段落公式 */ - .Cherry-Math {} - - /** 目录 */ - .toc { - .toc-title {} - - .toc-li { - .level-1 {} - - .level-2 {} - - .level-3 {} - } - } - -} - -ol { - li {} -} +.cherry-markdown.theme__default {} diff --git a/packages/cherry-markdown/src/sass/themes/gray.scss b/packages/cherry-markdown/src/sass/themes/gray.scss index 5a09aefc8..e1e99627c 100644 --- a/packages/cherry-markdown/src/sass/themes/gray.scss +++ b/packages/cherry-markdown/src/sass/themes/gray.scss @@ -3,12 +3,29 @@ */ .cherry.theme__gray { - --primary-color: var(--oc-gray-8); - --secondary-color: var(--oc-gray-3); - --base-font-color: var(--oc-gray-7); - --base-editor-bg: var(--oc-white); - --base-previewer-bg: var(--oc-white); - --base-border-color: var(--oc-gray-4); + /* ========== 新语义变量覆盖 ========== */ + --color-brand-primary: var(--oc-gray-8); + --color-brand-primary-hover: var(--oc-gray-7); + --color-text-primary: var(--oc-gray-7); + --color-text-secondary: var(--oc-gray-6); + --color-bg-canvas: var(--oc-white); + --color-bg-surface: var(--oc-white); + --color-bg-hover: var(--oc-gray-3); + --color-bg-active: var(--oc-gray-3); + --color-border-default: var(--oc-gray-4); + + /* ========== 兼容旧语义别名 ========== */ + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); + --base-font-color: var(--color-text-primary); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --base-border-color: var(--color-border-default); + + /* ========== 编辑器相关变量 ========== */ + --editor-url-bg-color: var(--oc-gray-2); + + /* ========== Markdown 相关变量 ========== */ --md-heading-color: var(--oc-gray-7); --md-paragraph-color: var(--oc-gray-7); --md-link-color: var(--oc-blue-4); @@ -17,13 +34,16 @@ --md-inline-code-bg: var(--oc-gray-2); --md-blockquote-bg: rgba(134, 142, 150, 0.05); --md-hr-border: var(--oc-gray-3); + + /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-gray-3); --md-table-sort-active-bg: var(--oc-gray-2); --md-table-drag-border-bg: var(--oc-blue-3); --md-table-operator-color: var(--oc-gray-6); + + /* ========== Accordion 相关变量 ========== */ --accordion-summary-hover-bg: var(--oc-gray-3); --accordion-summary-bg: var(--oc-gray-2); --accordion-summary-color: var(--oc-gray-7); - --editor-url-bg-color: var(--oc-gray-2); --accordion-shadow: none; } diff --git a/packages/cherry-markdown/src/sass/themes/green.scss b/packages/cherry-markdown/src/sass/themes/green.scss index 9140defa3..dd2b75554 100644 --- a/packages/cherry-markdown/src/sass/themes/green.scss +++ b/packages/cherry-markdown/src/sass/themes/green.scss @@ -3,22 +3,32 @@ */ .cherry.theme__green { - /* ========== 基础色彩变量覆盖 ========== */ - --primary-color: var(--oc-green-9); - --secondary-color: var(--oc-green-0); + /* ========== 新语义变量覆盖 ========== */ + --color-brand-primary: var(--oc-green-9); + --color-brand-primary-hover: var(--oc-green-7); + --color-text-primary: var(--oc-green-9); + --color-text-secondary: var(--oc-green-7); + --color-bg-canvas: var(--oc-white); + --color-bg-surface: var(--oc-green-0); + --color-bg-hover: var(--oc-green-9); + --color-bg-active: var(--oc-green-0); + --color-border-default: var(--oc-green-8); - --base-font-color: var(--primary-color); - --base-editor-bg: var(--oc-white); - --base-previewer-bg: var(--secondary-color); - --base-border-color: var(--oc-green-8); + /* ========== 兼容旧语义别名 ========== */ + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); + --base-font-color: var(--color-text-primary); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --base-border-color: var(--color-border-default); /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-white); - --toolbar-btn-color: var(--primary-color); - --toolbar-btn-hover-bg: var(--primary-color); - --toolbar-btn-hover-color: var(--secondary-color); - --toolbar-btn-active-bg:var(--oc-green-7); - --toolbar-split-color: var(--oc-green-8); + --toolbar-btn-color: var(--color-brand-primary); + --toolbar-btn-hover-bg: var(--color-brand-primary); + --toolbar-btn-hover-color: var(--color-bg-active); + --toolbar-btn-active-bg: var(--oc-green-7); + --toolbar-split-color: var(--color-border-default); /* ========== 编辑器相关变量 ========== */ --editor-header-color: var(--oc-green-7); @@ -44,12 +54,26 @@ --md-inline-code-bg: var(--oc-green-1); --md-blockquote-bg: var(--oc-green-1); --md-hr-border: var(--oc-green-8); - /* ========== table 相关变量 ========== */ + + /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-green-8); --md-table-drag-border-bg: var(--primary-color); --md-table-sort-active-bg: rgba(137, 245, 171, 0.493); - + + /* ========== TOC 相关变量 ========== */ --md-paragraph-highlight-line-bg: var(--oc-green-1); + --md-toc-bg: var(--oc-white); + --md-toc-indicator-color: var(--oc-green-1); + --md-toc-link-hover-bg: var(--oc-green-0); + --md-toc-link-active-bg: var(--oc-green-1); + + /* ========== Accordion 相关变量 ========== */ + --accordion-bg: var(--oc-green-0); + --accordion-border: var(--oc-green-2); + --accordion-summary-hover-bg: var(--oc-green-5); + --accordion-body-bg: var(--oc-green-0); + --accordion-body-border: var(--oc-green-1); + --accordion-body-color: var(--primary-color); /* ========== Panel 相关变量 ========== */ --panel-border-radius: 12px; @@ -58,63 +82,48 @@ --panel-box-shadow: 0 3px 12px rgba(64, 192, 87, 0.15); --panel-title-bg: var(--oc-green-1); --panel-title-color: var(--oc-green-9); - --panel-title-border-radius: 10px 10px 0 0; --panel-title-border-bottom: 1px solid var(--oc-green-3); --panel-body-bg: var(--oc-white); --panel-body-color: var(--oc-green-9); - --panel-body-border-radius: 0 0 10px 10px; /* Primary Panel */ - --panel-primary-border-color: var(--oc-green-4); + --panel-primary-accent: var(--oc-green-4); + --panel-primary-surface: var(--oc-green-0); + --panel-primary-emphasis: var(--oc-green-3); + --panel-primary-title-fg: var(--oc-green-9); + --panel-primary-body-fg: var(--oc-green-8); --panel-primary-box-shadow: 0 3px 12px rgba(64, 192, 87, 0.25); - --panel-primary-title-bg: var(--oc-green-3); - --panel-primary-title-color: var(--oc-green-9); - --panel-primary-body-bg: var(--oc-green-0); - --panel-primary-body-color: var(--oc-green-8); /* Info Panel */ - --panel-info-border-color: var(--oc-cyan-4); + --panel-info-accent: var(--oc-cyan-4); + --panel-info-surface: var(--oc-cyan-0); + --panel-info-emphasis: var(--oc-cyan-2); + --panel-info-title-fg: var(--oc-cyan-9); + --panel-info-body-fg: var(--oc-cyan-8); --panel-info-box-shadow: 0 3px 12px rgba(9, 196, 244, 0.15); - --panel-info-title-bg: var(--oc-cyan-2); - --panel-info-title-color: var(--oc-cyan-9); - --panel-info-body-bg: var(--oc-cyan-0); - --panel-info-body-color: var(--oc-cyan-8); /* Warning Panel */ - --panel-warning-border-color: var(--oc-lime-4); + --panel-warning-accent: var(--oc-lime-4); + --panel-warning-surface: var(--oc-lime-0); + --panel-warning-emphasis: var(--oc-lime-2); + --panel-warning-title-fg: var(--oc-lime-9); + --panel-warning-body-fg: var(--oc-lime-8); --panel-warning-box-shadow: 0 3px 12px rgba(130, 201, 30, 0.15); - --panel-warning-title-bg: var(--oc-lime-2); - --panel-warning-title-color: var(--oc-lime-9); - --panel-warning-body-bg: var(--oc-lime-0); - --panel-warning-body-color: var(--oc-lime-8); /* Danger Panel */ - --panel-danger-border-color: var(--oc-red-4); + --panel-danger-accent: var(--oc-red-4); + --panel-danger-surface: var(--oc-red-0); + --panel-danger-emphasis: var(--oc-red-2); + --panel-danger-title-fg: var(--oc-red-9); + --panel-danger-body-fg: var(--oc-red-8); --panel-danger-box-shadow: 0 3px 12px rgba(250, 82, 82, 0.15); - --panel-danger-title-bg: var(--oc-red-2); - --panel-danger-title-color: var(--oc-red-9); - --panel-danger-body-bg: var(--oc-red-0); - --panel-danger-body-color: var(--oc-red-8); /* Success Panel */ - --panel-success-border-color: var(--oc-green-5); + --panel-success-accent: var(--oc-green-5); + --panel-success-surface: var(--oc-green-0); + --panel-success-emphasis: var(--oc-green-4); + --panel-success-body-fg: var(--oc-green-8); --panel-success-box-shadow: 0 3px 12px rgba(64, 192, 87, 0.3); - --panel-success-title-bg: var(--oc-green-4); - --panel-success-title-color: var(--oc-white); - --panel-success-body-bg: var(--oc-green-0); - --panel-success-body-color: var(--oc-green-8); - --md-toc-bg: var(--oc-white); - --md-toc-indicator-color: var(--oc-green-1); - --md-toc-link-hover-bg: var(--oc-green-0); - --md-toc-link-active-bg: var(--oc-green-1); - - /* ========== 手风琴组件变量覆盖 ========== */ - --accordion-bg: var(--oc-green-0); - --accordion-border: var(--oc-green-2); - --accordion-summary-hover-bg: var(--oc-green-5); - --accordion-body-bg: var(--oc-green-0); - --accordion-body-border: var(--oc-green-1); - --accordion-body-color: var(--primary-color); } /** 预览区域样式 */ diff --git a/packages/cherry-markdown/src/sass/themes/index.scss b/packages/cherry-markdown/src/sass/themes/index.scss new file mode 100644 index 000000000..bd6cb605f --- /dev/null +++ b/packages/cherry-markdown/src/sass/themes/index.scss @@ -0,0 +1,8 @@ +@forward './default'; +@forward './dark'; +@forward './abyss'; +@forward './green'; +@forward './red'; +@forward './gray'; +@forward './violet'; +@forward './blue'; diff --git a/packages/cherry-markdown/src/sass/themes/red.scss b/packages/cherry-markdown/src/sass/themes/red.scss index 234527b0a..a0fae37cf 100644 --- a/packages/cherry-markdown/src/sass/themes/red.scss +++ b/packages/cherry-markdown/src/sass/themes/red.scss @@ -3,21 +3,32 @@ */ .cherry.theme__red { - --primary-color: var(--oc-pink-7); - --secondary-color: var(--oc-pink-0); + /* ========== 新语义变量覆盖 ========== */ + --color-brand-primary: var(--oc-pink-7); + --color-brand-primary-hover: var(--oc-pink-6); + --color-text-primary: var(--oc-pink-9); + --color-text-secondary: var(--oc-pink-7); + --color-bg-canvas: var(--oc-pink-0); + --color-bg-surface: var(--oc-pink-0); + --color-bg-hover: var(--oc-pink-5); + --color-bg-active: var(--oc-pink-0); + --color-border-default: var(--oc-pink-8); - --base-font-color: var(--oc-pink-9); - --base-editor-bg: var(--oc-pink-0); - --base-previewer-bg: var(--oc-pink-0); - --base-border-color: var(--oc-pink-8); + /* ========== 兼容旧语义别名 ========== */ + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); + --base-font-color: var(--color-text-primary); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --base-border-color: var(--color-border-default); /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-pink-1); --toolbar-btn-color: var(--oc-pink-8); - --toolbar-btn-hover-bg: var(--oc-pink-5); + --toolbar-btn-hover-bg: var(--color-bg-hover); --toolbar-btn-hover-color: var(--oc-pink-0); --toolbar-btn-active-bg: var(--oc-pink-7); - --toolbar-split-color: var(--oc-pink-8); + --toolbar-split-color: var(--color-border-default); --dropdown-bg: var(--oc-white); @@ -42,13 +53,28 @@ --md-inline-code-bg: var(--oc-pink-1); --md-blockquote-bg: var(--oc-pink-1); --md-hr-border: var(--oc-pink-8); - --md-table-border: var(--oc-pink-8); - /* ========== table 相关变量 ========== */ + + /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-pink-8); --md-table-drag-border-bg: var(--primary-color); --md-table-sort-active-bg: var(--oc-pink-2); + /* ========== TOC 相关变量 ========== */ --md-paragraph-highlight-line-bg: var(--oc-red-1); + --md-toc-bg: var(--oc-white); + --md-toc-border-color: var(--base-border-color); + --md-toc-indicator-color: var(--oc-pink-1); + --md-toc-link-hover-bg: var(--oc-pink-0); + --md-toc-link-active-bg: var(--oc-pink-1); + + /* ========== Accordion 相关变量 ========== */ + --accordion-bg: var(--oc-pink-0); + --accordion-border: var(--oc-pink-2); + --accordion-summary-bg: linear-gradient(135deg, var(--oc-pink-6), var(--oc-pink-7)); + --accordion-summary-hover-bg: linear-gradient(135deg, var(--oc-pink-5), var(--oc-pink-6)); + --accordion-body-bg: var(--oc-pink-0); + --accordion-body-border: var(--oc-pink-1); + --accordion-body-color: var(--oc-pink-9); /* ========== Panel 相关变量 ========== */ --panel-border-radius: 6px; @@ -57,69 +83,40 @@ --panel-box-shadow: 0 2px 8px rgba(230, 28, 132, 0.15); --panel-title-bg: linear-gradient(135deg, var(--oc-pink-2), var(--oc-pink-1)); --panel-title-color: var(--oc-pink-9); - --panel-title-border-radius: 6px 6px 0 0; --panel-title-border-bottom: 1px solid var(--oc-pink-3); --panel-body-bg: var(--oc-pink-0); --panel-body-color: var(--oc-pink-9); - --panel-body-border-radius: 0 0 6px 6px; /* Primary Panel */ - --panel-primary-bg: linear-gradient(135deg, var(--oc-pink-0), var(--oc-pink-2)); - --panel-primary-border-color: var(--oc-pink-5); - --panel-primary-title-bg: linear-gradient(135deg, var(--oc-pink-5), var(--oc-pink-4)); - --panel-primary-title-color: var(--oc-white); - --panel-primary-body-bg: var(--oc-pink-0); - --panel-primary-body-color: var(--oc-pink-8); + --panel-primary-accent: var(--oc-pink-5); + --panel-primary-surface: linear-gradient(135deg, var(--oc-pink-0), var(--oc-pink-2)); + --panel-primary-emphasis: linear-gradient(135deg, var(--oc-pink-5), var(--oc-pink-4)); + --panel-primary-body-fg: var(--oc-pink-8); /* Info Panel */ - --panel-info-bg: linear-gradient(135deg, var(--oc-grape-0), var(--oc-grape-1)); - --panel-info-border-color: var(--oc-grape-4); - --panel-info-title-bg: linear-gradient(135deg, var(--oc-grape-4), var(--oc-grape-3)); - --panel-info-title-color: var(--oc-white); - --panel-info-body-bg: var(--oc-grape-0); - --panel-info-body-color: var(--oc-grape-8); + --panel-info-accent: var(--oc-grape-4); + --panel-info-surface: linear-gradient(135deg, var(--oc-grape-0), var(--oc-grape-1)); + --panel-info-emphasis: linear-gradient(135deg, var(--oc-grape-4), var(--oc-grape-3)); + --panel-info-body-fg: var(--oc-grape-8); /* Warning Panel */ - --panel-warning-bg: linear-gradient(135deg, var(--oc-orange-0), var(--oc-orange-1)); - --panel-warning-border-color: var(--oc-orange-4); - --panel-warning-title-bg: linear-gradient(135deg, var(--oc-orange-5), var(--oc-orange-4)); - --panel-warning-title-color: var(--oc-white); - --panel-warning-body-bg: var(--oc-orange-0); - --panel-warning-body-color: var(--oc-orange-8); + --panel-warning-accent: var(--oc-orange-4); + --panel-warning-surface: linear-gradient(135deg, var(--oc-orange-0), var(--oc-orange-1)); + --panel-warning-emphasis: linear-gradient(135deg, var(--oc-orange-5), var(--oc-orange-4)); + --panel-warning-body-fg: var(--oc-orange-8); /* Danger Panel */ - --panel-danger-bg: linear-gradient(135deg, var(--oc-red-0), var(--oc-red-2)); - --panel-danger-border-color: var(--oc-red-5); + --panel-danger-accent: var(--oc-red-5); + --panel-danger-surface: linear-gradient(135deg, var(--oc-red-0), var(--oc-red-2)); + --panel-danger-emphasis: linear-gradient(135deg, var(--oc-red-6), var(--oc-red-5)); --panel-danger-box-shadow: 0 2px 8px rgba(245, 101, 101, 0.2); - --panel-danger-title-bg: linear-gradient(135deg, var(--oc-red-6), var(--oc-red-5)); - --panel-danger-title-color: var(--oc-white); - --panel-danger-body-bg: var(--oc-red-0); - --panel-danger-body-color: var(--oc-red-8); + --panel-danger-body-fg: var(--oc-red-8); /* Success Panel */ - --panel-success-bg: linear-gradient(135deg, var(--oc-teal-0), var(--oc-teal-1)); - --panel-success-border-color: var(--oc-teal-4); - --panel-success-title-bg: linear-gradient(135deg, var(--oc-teal-5), var(--oc-teal-4)); - --panel-success-title-color: var(--oc-white); - --panel-success-body-bg: var(--oc-teal-0); - --panel-success-body-color: var(--oc-teal-8); - --md-toc-bg: var(--oc-white); - --md-toc-border-color: var(--base-border-color); - --md-toc-indicator-color: var(--oc-pink-1); - --md-toc-link-hover-bg: var(--oc-pink-0); - --md-toc-link-active-bg: var(--oc-pink-1); - - /* ========== 手风琴组件变量覆盖 ========== */ - --accordion-bg: var(--oc-pink-0); - --accordion-border: var(--oc-pink-2); - --accordion-summary-bg: linear-gradient(135deg, var(--oc-pink-6), var(--oc-pink-7)); - --accordion-summary-hover-bg: linear-gradient(135deg, var(--oc-pink-5), var(--oc-pink-6)); - --accordion-accent-color: linear-gradient(to bottom, var(--oc-pink-4), var(--oc-pink-6)); - --accordion-body-bg: var(--oc-pink-0); - --accordion-body-border: var(--oc-pink-1); - --accordion-body-color: var(--oc-pink-9); - --accordion-multiple-border: var(--oc-pink-2); - --accordion-multiple-item-border: var(--oc-pink-1); + --panel-success-accent: var(--oc-teal-4); + --panel-success-surface: linear-gradient(135deg, var(--oc-teal-0), var(--oc-teal-1)); + --panel-success-emphasis: linear-gradient(135deg, var(--oc-teal-5), var(--oc-teal-4)); + --panel-success-body-fg: var(--oc-teal-8); } /** 预览区域样式 */ diff --git a/packages/cherry-markdown/src/sass/themes/violet.scss b/packages/cherry-markdown/src/sass/themes/violet.scss index 4a5f64c6a..0f3853683 100644 --- a/packages/cherry-markdown/src/sass/themes/violet.scss +++ b/packages/cherry-markdown/src/sass/themes/violet.scss @@ -3,22 +3,32 @@ */ .cherry.theme__violet { - /* ========== 基础色彩变量覆盖 ========== */ - --primary-color: var(--oc-violet-9); - --secondary-color: var(--oc-violet-0); + /* ========== 新语义变量覆盖 ========== */ + --color-brand-primary: var(--oc-violet-9); + --color-brand-primary-hover: var(--oc-violet-7); + --color-text-primary: var(--oc-violet-9); + --color-text-secondary: var(--oc-violet-7); + --color-bg-canvas: var(--oc-white); + --color-bg-surface: var(--oc-white); + --color-bg-hover: var(--oc-violet-5); + --color-bg-active: var(--oc-violet-0); + --color-border-default: var(--oc-violet-8); - --base-font-color: var(--primary-color); - --base-editor-bg: var(--oc-white); - --base-previewer-bg: var(--oc-white); - --base-border-color: var(--oc-violet-8); + /* ========== 兼容旧语义别名 ========== */ + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); + --base-font-color: var(--color-text-primary); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --base-border-color: var(--color-border-default); /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-white); - --toolbar-btn-color: var(--primary-color); - --toolbar-btn-hover-bg: var(--oc-violet-5); + --toolbar-btn-color: var(--color-brand-primary); + --toolbar-btn-hover-bg: var(--color-bg-hover); --toolbar-btn-hover-color: var(--oc-violet-0); --toolbar-btn-active-bg: var(--oc-violet-7); - --toolbar-split-color: var(--oc-violet-8); + --toolbar-split-color: var(--color-border-default); /* ========== 编辑器相关变量 ========== */ --editor-header-color: var(--oc-violet-7); @@ -41,11 +51,27 @@ --md-inline-code-bg: var(--oc-violet-1); --md-blockquote-bg: var(--oc-violet-1); --md-hr-border: var(--oc-violet-8); - /* ========== table 相关变量 ========== */ + + /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-violet-8); --md-table-drag-border-bg: var(--primary-color); --md-table-sort-active-bg: var(--oc-violet-2); + /* ========== TOC 相关变量 ========== */ + --md-toc-bg: var(--oc-violet-0); + --md-toc-indicator-color: var(--oc-violet-1); + --md-toc-link-hover-bg: var(--oc-violet-1); + --md-toc-link-active-bg: var(--oc-violet-2); + + /* ========== Accordion 相关变量 ========== */ + --accordion-bg: var(--oc-violet-0); + --accordion-border: var(--oc-violet-2); + --accordion-summary-bg: var(--oc-violet-6); + --accordion-summary-hover-bg: var(--oc-violet-5); + --accordion-body-bg: var(--oc-violet-0); + --accordion-body-border: var(--oc-violet-1); + --accordion-body-color: var(--primary-color); + /* ========== Panel 相关变量 ========== */ --panel-border-radius: 4px; --panel-bg: var(--oc-white); @@ -53,64 +79,44 @@ --panel-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); --panel-title-bg: var(--oc-gray-1); --panel-title-color: var(--oc-gray-8); - --panel-title-border-radius: 2px 2px 0 0; --panel-title-border-bottom: 1px solid var(--oc-gray-3); --panel-body-bg: var(--oc-white); --panel-body-color: var(--oc-gray-8); - --panel-body-border-radius: 0 0 2px 2px; /* Primary Panel */ - --panel-primary-border-color: var(--oc-blue-5); - --panel-primary-title-bg: var(--oc-blue-1); - --panel-primary-title-color: var(--oc-blue-8); - --panel-primary-title-border-bottom: 1px solid var(--oc-blue-3); - --panel-primary-body-bg: var(--oc-blue-0); - --panel-primary-body-color: var(--oc-blue-9); + --panel-primary-accent: var(--oc-blue-5); + --panel-primary-surface: var(--oc-blue-0); + --panel-primary-emphasis: var(--oc-blue-1); + --panel-primary-title-fg: var(--oc-blue-8); + --panel-primary-body-fg: var(--oc-blue-9); /* Info Panel */ - --panel-info-border-color: var(--oc-cyan-5); - --panel-info-title-bg: var(--oc-cyan-1); - --panel-info-title-color: var(--oc-cyan-8); - --panel-info-title-border-bottom: 1px solid var(--oc-cyan-3); - --panel-info-body-bg: var(--oc-cyan-0); - --panel-info-body-color: var(--oc-cyan-9); + --panel-info-accent: var(--oc-cyan-5); + --panel-info-surface: var(--oc-cyan-0); + --panel-info-emphasis: var(--oc-cyan-1); + --panel-info-title-fg: var(--oc-cyan-8); + --panel-info-body-fg: var(--oc-cyan-9); /* Warning Panel */ - --panel-warning-border-color: var(--oc-yellow-5); - --panel-warning-title-bg: var(--oc-yellow-1); - --panel-warning-title-color: var(--oc-yellow-8); - --panel-warning-title-border-bottom: 1px solid var(--oc-yellow-3); - --panel-warning-body-bg: var(--oc-yellow-0); - --panel-warning-body-color: var(--oc-yellow-9); + --panel-warning-accent: var(--oc-yellow-5); + --panel-warning-surface: var(--oc-yellow-0); + --panel-warning-emphasis: var(--oc-yellow-1); + --panel-warning-title-fg: var(--oc-yellow-8); + --panel-warning-body-fg: var(--oc-yellow-9); /* Danger Panel */ - --panel-danger-border-color: var(--oc-red-5); - --panel-danger-title-bg: var(--oc-red-1); - --panel-danger-title-color: var(--oc-red-8); - --panel-danger-title-border-bottom: 1px solid var(--oc-red-3); - --panel-danger-body-bg: var(--oc-red-0); - --panel-danger-body-color: var(--oc-red-9); + --panel-danger-accent: var(--oc-red-5); + --panel-danger-surface: var(--oc-red-0); + --panel-danger-emphasis: var(--oc-red-1); + --panel-danger-title-fg: var(--oc-red-8); + --panel-danger-body-fg: var(--oc-red-9); /* Success Panel */ - --panel-success-border-color: var(--oc-green-5); - --panel-success-title-bg: var(--oc-green-1); - --panel-success-title-color: var(--oc-green-8); - --panel-success-title-border-bottom: 1px solid var(--oc-green-3); - --panel-success-body-bg: var(--oc-green-0); - --panel-success-body-color: var(--oc-green-9); - --md-toc-bg: var(--oc-violet-0); - --md-toc-indicator-color: var(--oc-violet-1); - --md-toc-link-hover-bg: var(--oc-violet-1); - --md-toc-link-active-bg: var(--oc-violet-2); - - /* ========== 手风琴组件变量覆盖 ========== */ - --accordion-bg: var(--oc-violet-0); - --accordion-border: var(--oc-violet-2); - --accordion-summary-bg: var(--oc-violet-6); - --accordion-summary-hover-bg: var(--oc-violet-5); - --accordion-body-bg: var(--oc-violet-0); - --accordion-body-border: var(--oc-violet-1); - --accordion-body-color: var(--primary-color); + --panel-success-accent: var(--oc-green-5); + --panel-success-surface: var(--oc-green-0); + --panel-success-emphasis: var(--oc-green-1); + --panel-success-title-fg: var(--oc-green-8); + --panel-success-body-fg: var(--oc-green-9); } /** 预览区域样式 */ diff --git a/packages/cherry-markdown/src/sass/variables/base.scss b/packages/cherry-markdown/src/sass/variables/base.scss index 85761ef17..d3dc76694 100644 --- a/packages/cherry-markdown/src/sass/variables/base.scss +++ b/packages/cherry-markdown/src/sass/variables/base.scss @@ -13,6 +13,7 @@ --spacing-3xl: 48px; // 圆角 + --radius-xs: 1px; --radius-none: 0; --radius-sm: 2px; --radius-md: 3px; diff --git a/packages/cherry-markdown/src/sass/variables/components/accordion.scss b/packages/cherry-markdown/src/sass/variables/components/accordion.scss new file mode 100644 index 000000000..7720ab7a7 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/accordion.scss @@ -0,0 +1,14 @@ +.cherry { + --accordion-bg: var(--base-previewer-bg); + --accordion-border: var(--base-border-color); + --accordion-radius: var(--radius-lg); + --accordion-shadow: var(--shadow-md); + + --accordion-summary-bg: var(--primary-color); + --accordion-summary-color: var(--oc-white); + --accordion-summary-hover-bg: var(--color-primary-hover); + + --accordion-body-bg: var(--base-previewer-bg); + --accordion-body-color: var(--base-font-color); + --accordion-body-border: var(--base-border-color); +} diff --git a/packages/cherry-markdown/src/sass/variables/components/index.scss b/packages/cherry-markdown/src/sass/variables/components/index.scss new file mode 100644 index 000000000..408627389 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/index.scss @@ -0,0 +1,4 @@ +@forward './table'; +@forward './accordion'; +@forward './panel'; +@forward './shortcut-panel'; diff --git a/packages/cherry-markdown/src/sass/variables/components/panel.scss b/packages/cherry-markdown/src/sass/variables/components/panel.scss new file mode 100644 index 000000000..2f239bb84 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/panel.scss @@ -0,0 +1,59 @@ +.cherry { + --panel-margin: 10px 0; + --panel-border-radius: var(--radius-xl); + --panel-border: 1px solid var(--color-border-default); + --panel-bg: var(--color-bg-surface); + --panel-box-shadow: none; + --panel-backdrop-filter: none; + + --panel-title-padding: 5px 20px; + --panel-title-bg: var(--color-bg-hover); + --panel-title-color: var(--color-text-primary); + --panel-title-border-radius: var(--panel-border-radius) var(--panel-border-radius) 0 0; + --panel-title-border-bottom: 1px solid var(--color-border-default); + + --panel-body-padding: 5px 20px; + --panel-body-bg: var(--color-bg-surface); + --panel-body-color: var(--color-text-primary); + --panel-body-border-radius: 0 0 var(--panel-border-radius) var(--panel-border-radius); + + --panel-primary-accent: var(--color-brand-primary); + --panel-primary-surface: var(--color-bg-active); + --panel-primary-emphasis: var(--panel-primary-accent); + --panel-primary-title-fg: #fff; + --panel-primary-body-fg: var(--panel-primary-accent); + --panel-primary-box-shadow: none; + --panel-primary-icon: '\EA6A'; + + --panel-info-accent: var(--oc-cyan-5); + --panel-info-surface: var(--oc-cyan-0); + --panel-info-emphasis: var(--oc-cyan-6); + --panel-info-title-fg: #fff; + --panel-info-body-fg: var(--oc-cyan-8); + --panel-info-box-shadow: none; + --panel-info-icon: '\EA69'; + + --panel-warning-accent: var(--oc-yellow-5); + --panel-warning-surface: var(--oc-yellow-0); + --panel-warning-emphasis: var(--oc-yellow-6); + --panel-warning-title-fg: #fff; + --panel-warning-body-fg: var(--oc-yellow-8); + --panel-warning-box-shadow: none; + --panel-warning-icon: '\EA6B'; + + --panel-danger-accent: var(--oc-red-5); + --panel-danger-surface: var(--oc-red-0); + --panel-danger-emphasis: var(--oc-red-6); + --panel-danger-title-fg: #fff; + --panel-danger-body-fg: var(--oc-red-8); + --panel-danger-box-shadow: none; + --panel-danger-icon: '\EA68'; + + --panel-success-accent: var(--oc-green-5); + --panel-success-surface: var(--oc-green-0); + --panel-success-emphasis: var(--oc-green-6); + --panel-success-title-fg: #fff; + --panel-success-body-fg: var(--oc-green-8); + --panel-success-box-shadow: none; + --panel-success-icon: '\EA67'; +} diff --git a/packages/cherry-markdown/src/sass/variables/components/shortcut-panel.scss b/packages/cherry-markdown/src/sass/variables/components/shortcut-panel.scss new file mode 100644 index 000000000..5fe1b5208 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/shortcut-panel.scss @@ -0,0 +1,10 @@ +.cherry { + --shortcut-key-config-panel-bg: var(--dropdown-bg); + --shortcut-key-config-panel-text-color: var(--dropdown-item-color); + + --shortcut-panel-padding-x: 15px; + --shortcut-panel-padding-y: 10px; + --shortcut-panel-font-size-xs: var(--font-size-xs); + --shortcut-panel-border-radius: 4px; + --shortcut-panel-transition: all 0.2s; +} diff --git a/packages/cherry-markdown/src/sass/variables/components/table.scss b/packages/cherry-markdown/src/sass/variables/components/table.scss new file mode 100644 index 000000000..6c50f490f --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/table.scss @@ -0,0 +1,6 @@ +.cherry { + --md-table-border: var(--base-border-color); + --md-table-operator-color: var(--primary-color); + --md-table-drag-border-bg: var(--primary-color); + --md-table-sort-active-bg: var(--secondary-color); +} diff --git a/packages/cherry-markdown/src/sass/variables/index.scss b/packages/cherry-markdown/src/sass/variables/index.scss index 6683a6b9f..ffb7d13b3 100644 --- a/packages/cherry-markdown/src/sass/variables/index.scss +++ b/packages/cherry-markdown/src/sass/variables/index.scss @@ -2,10 +2,13 @@ // 统一导入和导出所有 CSS 变量 // 导入一级变量(基础效果变量) -@import './base.scss'; +@forward './base'; // 导入二级变量(语义化界面变量) -@import './semantic.scss'; +@forward './semantic'; + +// 导入组件变量 +@forward './components/index'; // 导入 Open Color 颜色 -@import './open-color.scss'; +@forward './open-color'; diff --git a/packages/cherry-markdown/src/sass/variables/semantic.scss b/packages/cherry-markdown/src/sass/variables/semantic.scss index e40121bb5..7d431c774 100644 --- a/packages/cherry-markdown/src/sass/variables/semantic.scss +++ b/packages/cherry-markdown/src/sass/variables/semantic.scss @@ -2,7 +2,7 @@ // 基于现有组件和样式需求,映射到一级变量 .cherry { - /* ========== 基础色彩映射 ========== */ + /* ========== 历史语义默认值 ========== */ --base-font-color: #3f4a56; --base-sub-font-color: #6d6e6f; --base-border-color: #dfe6ee; @@ -18,15 +18,40 @@ --color-warning: var(--oc-yellow-6); --color-error: var(--oc-red-6); --color-info: var(--oc-blue-6); + --color-link-hover: var(--primary-color); + --color-primary-hover: var(--color-link-hover); + + /* ========== 新语义命名层 ========== */ + --color-text-primary: var(--base-font-color); + --color-text-secondary: var(--base-sub-font-color); + --color-text-link: var(--md-link-color); + --color-text-link-hover: var(--color-link-hover); + + --color-bg-canvas: var(--base-editor-bg); + --color-bg-surface: var(--base-previewer-bg); + --color-bg-subtle: var(--oc-gray-0); + --color-bg-hover: var(--oc-gray-1); + --color-bg-active: var(--secondary-color); + + --color-border-default: var(--base-border-color); + --color-border-strong: var(--oc-gray-4); + + --color-brand-primary: var(--primary-color); + --color-brand-primary-hover: var(--color-primary-hover); + + /* ========== 历史兼容变量 ========== */ + --border-color: var(--color-border-default); + --bg-color-lighter: var(--color-bg-hover); + --full-width-color: var(--color-brand-primary); /* ========== 工具栏相关 ========== */ --toolbar-bg: var(--oc-white); - --toolbar-border: var(--base-border-color); + --toolbar-border: var(--color-border-default); --toolbar-padding: var(--spacing-xs) var(--spacing-xl); --toolbar-font-size: var(--font-size-sm); - --toolbar-radius: none; + --toolbar-radius: var(--radius-none); --toolbar-shadow: var(--shadow-sm); - --toolbar-split-color: var(--base-border-color); + --toolbar-split-color: var(--color-border-default); --toolbar-min-height: 48px; // 单行工具栏的高度 // 侧边栏列表高度(由 JS 动态写入),默认 120px 作为无侧栏时的回退 @@ -35,8 +60,9 @@ // 工具栏按钮 --toolbar-btn-color: #3f4a56; --toolbar-btn-bg: transparent; - --toolbar-btn-hover-color: var(--primary-color); - --toolbar-btn-hover-bg: var(--secondary-color); + --toolbar-btn-hover-color: var(--color-brand-primary); + --toolbar-btn-hover-bg: var(--color-bg-active); + --toolbar-btn-active-bg: var(--color-bg-active); --toolbar-btn-disabled: #ccc; --toolbar-btn-radius: var(--radius-lg); --toolbar-btn-padding: 0 var(--spacing-md); @@ -44,7 +70,7 @@ /* ========== 工具栏的下拉菜单 ========== */ --dropdown-bg: var(--toolbar-bg); - --dropdown-border: var(--base-border-color); + --dropdown-border: var(--color-border-default); --dropdown-shadow: var(--shadow-md); --dropdown-radius: var(--radius-xl); --dropdown-padding: var(--spacing-xs) 0; @@ -53,15 +79,15 @@ --dropdown-item-height: var(--height-button); --dropdown-item-radius: var(--dropdown-radius); --dropdown-item-padding: var(--spacing-sm) var(--spacing-md); - --dropdown-item-hover-bg: var(--oc-gray-2); + --dropdown-item-hover-bg: var(--color-bg-hover); --dropdown-item-color: var(--toolbar-btn-color); - --dropdown-item-hover-color: var(--base-font-color); - --dropdown-item-active-bg: var(--secondary-color); - --dropdown-item-active-color: var(--primary-color); + --dropdown-item-hover-color: var(--color-text-primary); + --dropdown-item-active-bg: var(--color-bg-active); + --dropdown-item-active-color: var(--color-brand-primary); /* ========== 编辑气泡 ========== */ --bubble-bg: var(--toolbar-bg); - --bubble-border: var(--base-border-color); + --bubble-border: var(--color-border-default); --bubble-shadow: var(--shadow-md); --bubble-radius: var(--radius-xl); --bubble-padding: var(--toolbar-btn-padding); @@ -70,36 +96,36 @@ /* ========== 编辑器相关 ========== */ // ---base-editor-bg 编辑器背景颜色 - --editor-header-color: var(--base-font-color); + --editor-header-color: var(--color-text-primary); --editor-comment-color: var(--oc-blue-6); --editor-quote-color: var(--oc-blue-6); - --editor-string-color: var(--base-font-color); + --editor-string-color: var(--color-text-primary); --editor-link-color: var(--oc-blue-6); --editor-url-bg-color: #d7e6fe; - --editor-v2-color: var(--primary-color); - --editor-v3-color: var(--secondary-color); - --editor-keyword-color: var(--base-font-color); - --editor-cursor-color: var(--primary-color); + --editor-v2-color: var(--color-brand-primary); + --editor-v3-color: var(--color-bg-active); + --editor-keyword-color: var(--color-text-primary); + --editor-cursor-color: var(--color-brand-primary); --editor-selection-bg: var(--oc-blue-1); --editor-line-number-color: var(--oc-gray-4); --editor-active-line-bg: var(--oc-gray-0); /* ========== 预览器相关 ========== */ // --base-previewer-bg 预览器背景颜色 - --previewer-mobile-bg: var(--base-previewer-bg); + --previewer-mobile-bg: var(--color-bg-surface); /* ========== Markdown 元素样式 ========== */ // 标题 - --md-heading-color: var(--base-font-color); + --md-heading-color: var(--color-text-primary); // 段落 - --md-paragraph-color: var(--base-font-color); + --md-paragraph-color: var(--color-text-primary); --md-paragraph-line-height: var(--line-height-relaxed); - --md-paragraph-highlight-line-bg: var(--secondary-color); // 当前编辑行高光背景色 + --md-paragraph-highlight-line-bg: var(--color-bg-active); // 当前编辑行高光背景色 // 链接 --md-link-color: var(--oc-blue-6); - --md-link-hover-color: var(--color-link-hover); + --md-link-hover-color: var(--color-text-link-hover); // 行内代码 --md-inline-code-color: var(--color-error); @@ -108,18 +134,14 @@ // 引用 --md-blockquote-bg: rgba(102, 128, 153, 0.05); --md-blockquote-border: #D6DBDF; - --md-blockquote-color: var(--base-sub-font-color); - - // 表格 - --md-table-border: var(--base-border-color); - --md-table-operator-color: var(--primary-color); // 表格操作按钮颜色 + --md-blockquote-color: var(--color-text-secondary); // 分割线 - --md-hr-border: var(--base-border-color); + --md-hr-border: var(--color-border-default); // 目录 (TOC) --md-toc-bg: var(--oc-gray-0); - --md-toc-border-color: var(--base-border-color); + --md-toc-border-color: var(--color-border-default); --md-toc-radius: var(--radius-lg); --md-toc-padding: var(--spacing-lg); --md-toc-title-color: var(--md-heading-color); @@ -133,23 +155,6 @@ --md-toc-indicator-hover-color: var(--md-toc-link-hover-color); --md-toc-indicator-gap: var(--spacing-lg); - /* ========== 手风琴组件样式 ========== */ - // 基础样式 - --accordion-bg: var(--base-previewer-bg); - --accordion-border: var(--base-border-color); - --accordion-radius: var(--radius-lg); - --accordion-shadow: var(--shadow-md); - - // 标题样式 - --accordion-summary-bg: var(--primary-color); - --accordion-summary-color: var(--oc-white); - --accordion-summary-hover-bg: var(--color-primary-hover); - - // 内容区域 - --accordion-body-bg: var(--base-previewer-bg); - --accordion-body-color: var(--base-font-color); - --accordion-body-border: var(--base-border-color); - /* ========== Mermaid 源码工具栏 ========== */ --mermaid-toolbar-switch-bg: rgba(128, 128, 128, 0.12); --mermaid-toolbar-slider-bg: rgba(255, 255, 255, 0.85); @@ -158,5 +163,5 @@ --mermaid-container-border: rgba(128, 128, 128, 0.2); /* ========== 其余单个组件 ========== */ - --drag-border-color: #ebedee; + --drag-border-color: var(--color-border-default); } From 8d57355d15d6093e5fc44d29b59d134f9786f735 Mon Sep 17 00:00:00 2001 From: Seeridia Date: Sun, 5 Apr 2026 14:17:52 +0800 Subject: [PATCH 2/4] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E4=B8=8D?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E6=A0=B7=E5=BC=8F=E5=BC=95=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cherry-markdown/src/sass/markdown_pure.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cherry-markdown/src/sass/markdown_pure.scss b/packages/cherry-markdown/src/sass/markdown_pure.scss index 802d0da59..20da36dcf 100644 --- a/packages/cherry-markdown/src/sass/markdown_pure.scss +++ b/packages/cherry-markdown/src/sass/markdown_pure.scss @@ -1,6 +1,5 @@ @use 'sass:meta'; -@include meta.load-css('./variables/index'); @include meta.load-css('./markdown'); /** 引入自带的主题 */ @include meta.load-css('./themes/index'); From 7a6610bafb8732d13f611c23a70e2f11e77a8e3b Mon Sep 17 00:00:00 2001 From: Seeridia Date: Sun, 5 Apr 2026 14:48:17 +0800 Subject: [PATCH 3/4] =?UTF-8?q?refactor:=20=E6=8B=86=E5=88=86Components?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/cherry-markdown/src/sass/cherry.scss | 6 +- .../src/sass/themes/abyss.scss | 46 +++--- .../cherry-markdown/src/sass/themes/blue.scss | 20 +-- .../cherry-markdown/src/sass/themes/dark.scss | 14 +- .../src/sass/themes/default.scss | 16 +- .../cherry-markdown/src/sass/themes/gray.scss | 8 - .../src/sass/themes/green.scss | 20 +-- .../cherry-markdown/src/sass/themes/red.scss | 20 +-- .../src/sass/themes/violet.scss | 18 +- .../sass/variables/components/accordion.scss | 17 +- .../src/sass/variables/components/bubble.scss | 11 ++ .../sass/variables/components/dropdown.scss | 20 +++ .../src/sass/variables/components/editor.scss | 20 +++ .../src/sass/variables/components/index.scss | 7 + .../sass/variables/components/markdown.scss | 40 +++++ .../sass/variables/components/mermaid.scss | 10 ++ .../src/sass/variables/components/panel.scss | 4 + .../sass/variables/components/previewer.scss | 8 + .../variables/components/shortcut-panel.scss | 4 + .../src/sass/variables/components/table.scss | 11 +- .../sass/variables/components/toolbar.scss | 26 +++ .../src/sass/variables/semantic.scss | 155 ++---------------- .../cherry-markdown/src/utils/exportWord.js | 14 +- 23 files changed, 243 insertions(+), 272 deletions(-) create mode 100644 packages/cherry-markdown/src/sass/variables/components/bubble.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/dropdown.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/editor.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/markdown.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/mermaid.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/previewer.scss create mode 100644 packages/cherry-markdown/src/sass/variables/components/toolbar.scss diff --git a/packages/cherry-markdown/src/sass/cherry.scss b/packages/cherry-markdown/src/sass/cherry.scss index 6933d57c9..ad278d195 100644 --- a/packages/cherry-markdown/src/sass/cherry.scss +++ b/packages/cherry-markdown/src/sass/cherry.scss @@ -882,7 +882,7 @@ } .cm-editor .cm-fullWidth { - color: var(--full-width-color) !important; + color: var(--color-brand-primary) !important; z-index: 3; cursor: pointer; } @@ -1306,7 +1306,7 @@ .cherry-color-tab-group { display: flex; - background: var(--border-color); + background: var(--color-border-default); border-radius: var(--radius-lg); padding: 2px; width: auto; @@ -1446,7 +1446,7 @@ gap: 6px; .cherry-color-recent-empty { - background: var(--bg-color-lighter); + background: var(--color-bg-hover); border-style: dashed; cursor: default; diff --git a/packages/cherry-markdown/src/sass/themes/abyss.scss b/packages/cherry-markdown/src/sass/themes/abyss.scss index 4a85ea5a7..6788405df 100644 --- a/packages/cherry-markdown/src/sass/themes/abyss.scss +++ b/packages/cherry-markdown/src/sass/themes/abyss.scss @@ -14,14 +14,6 @@ --color-bg-active: #2C2E37; --color-border-default: var(--color-brand-primary); - /* ========== 兼容旧语义别名 ========== */ - --primary-color: var(--color-brand-primary); - --secondary-color: var(--color-bg-active); - --base-font-color: var(--color-text-primary); - --base-editor-bg: var(--color-bg-canvas); - --base-previewer-bg: var(--color-bg-surface); - --base-border-color: var(--color-border-default); - /* ========== 工具栏相关变量 ========== */ --toolbar-bg: #181C24; --toolbar-btn-color: var(--color-text-primary); @@ -33,7 +25,7 @@ /* ========== 工具栏的下拉菜单 ========== */ --dropdown-bg: var(--toolbar-bg); - --dropdown-border: var(--base-border-color); + --dropdown-border: var(--color-border-default); --dropdown-radius: var(--radius-xl); --dropdown-padding: var(--spacing-xs) 0; @@ -42,26 +34,26 @@ --dropdown-item-color: var(--toolbar-btn-color); /* ========== 编辑器相关变量 ========== */ - --editor-header-color: var(--primary-color); + --editor-header-color: var(--color-brand-primary); --editor-string-color: var(--oc-blue-4); --editor-comment-color: #A8A8A9; --editor-quote-color: var(--oc-gray-8); --editor-link-color: var(--oc-blue-4); --editor-url-bg-color: none; --editor-v2-color: var(--oc-gray-8); - --editor-v3-color: var(--primary-color); + --editor-v3-color: var(--color-brand-primary); --editor-keyword-color: var(--oc-blue-4); --editor-selection-bg: #636e87; /* ========== Markdown 相关变量 ========== */ - --md-heading-color: var(--primary-color); - --md-paragraph-color: var(--base-font-color); + --md-heading-color: var(--color-brand-primary); + --md-paragraph-color: var(--color-text-primary); --md-link-color: var(--oc-blue-4); - --md-link-hover-color: var(--primary-color); - --md-inline-code-color: var(--primary-color); + --md-link-hover-color: var(--color-brand-primary); + --md-inline-code-color: var(--color-brand-primary); --md-inline-code-bg: #00203d; --md-blockquote-bg: #2A2F3B; - --md-hr-border: var(--primary-color); + --md-hr-border: var(--color-brand-primary); /* ========== Table 相关变量 ========== */ --md-table-border: #47556D; --md-table-drag-border-bg: var(--oc-blue-3); @@ -69,22 +61,22 @@ /* ========== TOC 相关变量 ========== */ --md-toc-bg: #2A2F3B; - --md-toc-title-color: var(--primary-color); - --md-toc-link-color: var(--primary-color); - --md-toc-indicator-color: var(--secondary-color); - --md-toc-link-hover-color: var(--secondary-color); - --md-toc-link-hover-bg: var(--primary-color); - --md-toc-indicator-hover-color: var(--primary-color); + --md-toc-title-color: var(--color-brand-primary); + --md-toc-link-color: var(--color-brand-primary); + --md-toc-indicator-color: var(--color-bg-active); + --md-toc-link-hover-color: var(--color-bg-active); + --md-toc-link-hover-bg: var(--color-brand-primary); + --md-toc-indicator-hover-color: var(--color-brand-primary); /* ========== Accordion 相关变量 ========== */ --accordion-bg: #2A2F3B; --accordion-border: var(--oc-blue-5); --accordion-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - --accordion-summary-bg: var(--secondary-color); + --accordion-summary-bg: var(--color-bg-active); --accordion-summary-hover-bg: var(--toolbar-btn-hover-bg); --accordion-body-bg: #2A2F3B; --accordion-body-border: var(--oc-blue-5); - --accordion-body-color: var(--base-font-color); + --accordion-body-color: var(--color-text-primary); /* ========== Mermaid 相关变量 ========== */ --mermaid-toolbar-slider-bg: rgba(255, 255, 255, 0.15); @@ -152,16 +144,16 @@ path, rect, line { - stroke: var(--primary-color) !important; + stroke: var(--color-brand-primary) !important; } text { - fill: var(--primary-color) !important; + fill: var(--color-brand-primary) !important; stroke: none !important; } tspan { - fill: var(--primary-color) !important; + fill: var(--color-brand-primary) !important; } circle { diff --git a/packages/cherry-markdown/src/sass/themes/blue.scss b/packages/cherry-markdown/src/sass/themes/blue.scss index ba47056a1..eae7b002c 100644 --- a/packages/cherry-markdown/src/sass/themes/blue.scss +++ b/packages/cherry-markdown/src/sass/themes/blue.scss @@ -14,14 +14,6 @@ --color-bg-active: var(--oc-violet-0); --color-border-default: var(--oc-indigo-4); - /* ========== 兼容旧语义别名 ========== */ - --primary-color: var(--color-brand-primary); - --secondary-color: var(--color-bg-active); - --base-font-color: var(--color-text-primary); - --base-editor-bg: var(--color-bg-canvas); - --base-previewer-bg: var(--color-bg-surface); - --base-border-color: var(--color-border-default); - /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-violet-1); --toolbar-btn-color: var(--oc-indigo-7); @@ -34,22 +26,22 @@ --dropdown-bg: var(--oc-white); /* ========== 编辑器相关变量 ========== */ - --editor-header-color: var(--primary-color); + --editor-header-color: var(--color-brand-primary); --editor-string-color: var(--oc-indigo-5); --editor-comment-color: var(--oc-indigo-5); --editor-quote-color: var(--oc-indigo-8); --editor-link-color: var(--oc-indigo-5); --editor-url-bg-color: var(--oc-violet-1); --editor-v2-color: var(--oc-indigo-8); - --editor-v3-color: var(--primary-color); + --editor-v3-color: var(--color-brand-primary); --editor-keyword-color: var(--oc-indigo-5); --editor-selection-bg: var(--oc-violet-2); /* ========== Markdown 相关变量 ========== */ - --md-heading-color: var(--primary-color); + --md-heading-color: var(--color-brand-primary); --md-paragraph-color: var(--oc-indigo-8); --md-link-color: var(--oc-indigo-5); - --md-link-hover-color: var(--primary-color); + --md-link-hover-color: var(--color-brand-primary); --md-inline-code-color: var(--oc-indigo-5); --md-inline-code-bg: var(--oc-violet-1); --md-blockquote-bg: var(--oc-violet-1); @@ -57,13 +49,13 @@ /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-blue-5); - --md-table-drag-border-bg: var(--primary-color); + --md-table-drag-border-bg: var(--color-brand-primary); --md-table-sort-active-bg: rgba(184, 134, 253, 0.4); /* ========== TOC 相关变量 ========== */ --md-paragraph-highlight-line-bg: var(--oc-violet-1); --md-toc-bg: var(--oc-white); - --md-toc-border-color: var(--base-border-color); + --md-toc-border-color: var(--color-border-default); --md-toc-indicator-color: var(--oc-indigo-1); --md-toc-link-hover-bg: var(--oc-violet-0); --md-toc-link-active-bg: var(--oc-violet-1); diff --git a/packages/cherry-markdown/src/sass/themes/dark.scss b/packages/cherry-markdown/src/sass/themes/dark.scss index 75f09a53f..6c780ae18 100644 --- a/packages/cherry-markdown/src/sass/themes/dark.scss +++ b/packages/cherry-markdown/src/sass/themes/dark.scss @@ -14,14 +14,6 @@ --color-bg-active: #513838; --color-border-default: var(--oc-gray-5); - /* ========== 兼容旧语义别名 ========== */ - --primary-color: var(--color-brand-primary); - --secondary-color: var(--color-bg-active); - --base-font-color: var(--color-text-primary); - --base-editor-bg: var(--color-bg-canvas); - --base-previewer-bg: var(--color-bg-surface); - --base-border-color: var(--color-border-default); - /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-gray-7); --toolbar-btn-color: var(--oc-gray-4); @@ -33,14 +25,14 @@ /* ========== 工具栏的下拉菜单 ========== */ --dropdown-bg: var(--toolbar-bg); /* ========== 编辑器相关变量 ========== */ - --editor-header-color: var(--primary-color); + --editor-header-color: var(--color-brand-primary); --editor-string-color: var(--oc-yellow-3); --editor-comment-color: var(--oc-yellow-3); --editor-quote-color: var(--oc-gray-4); --editor-link-color: var(--oc-yellow-3); --editor-url-bg-color: rgb(81, 56, 56); --editor-v2-color: var(--oc-gray-4); - --editor-v3-color: var(--primary-color); + --editor-v3-color: var(--color-brand-primary); --editor-keyword-color: var(--oc-yellow-3); --editor-selection-bg: rgba(134, 142, 150, 0.8); @@ -60,7 +52,7 @@ --md-hr-border: var(--oc-gray-5); /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-gray-5); - --md-table-drag-border-bg: var(--primary-color); + --md-table-drag-border-bg: var(--color-brand-primary); --md-table-sort-active-bg: rgba(141, 104, 51, 0.493); /* ========== TOC 相关变量 ========== */ diff --git a/packages/cherry-markdown/src/sass/themes/default.scss b/packages/cherry-markdown/src/sass/themes/default.scss index bc9d5f9af..54ffb6fe0 100644 --- a/packages/cherry-markdown/src/sass/themes/default.scss +++ b/packages/cherry-markdown/src/sass/themes/default.scss @@ -14,14 +14,6 @@ --color-bg-active: var(--oc-blue-0); --color-border-default: var(--oc-blue-5); - /* ========== 兼容旧语义别名 ========== */ - --primary-color: var(--color-brand-primary); - --secondary-color: var(--color-bg-active); - --base-font-color: var(--color-text-primary); - --base-editor-bg: var(--color-bg-canvas); - --base-previewer-bg: var(--color-bg-surface); - --base-border-color: var(--color-border-default); - /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-white); --toolbar-btn-color: var(--oc-gray-8); @@ -31,22 +23,22 @@ --toolbar-split-color: var(--oc-blue-5); /* ========== 编辑器相关变量 ========== */ - --editor-header-color: var(--primary-color); + --editor-header-color: var(--color-brand-primary); --editor-string-color: var(--oc-blue-4); --editor-comment-color: var(--oc-blue-4); --editor-quote-color: var(--oc-gray-8); --editor-link-color: var(--oc-blue-4); --editor-url-bg-color: var(--oc-blue-0); --editor-v2-color: var(--oc-gray-8); - --editor-v3-color: var(--primary-color); + --editor-v3-color: var(--color-brand-primary); --editor-keyword-color: var(--oc-blue-4); --editor-selection-bg: var(--oc-blue-2); /* ========== Markdown 相关变量 ========== */ - --md-heading-color: var(--primary-color); + --md-heading-color: var(--color-brand-primary); --md-paragraph-color: var(--oc-gray-8); --md-link-color: var(--oc-blue-4); - --md-link-hover-color: var(--primary-color); + --md-link-hover-color: var(--color-brand-primary); --md-inline-code-color: var(--oc-blue-4); --md-inline-code-bg: var(--oc-blue-0); --md-blockquote-bg: var(--oc-blue-0); diff --git a/packages/cherry-markdown/src/sass/themes/gray.scss b/packages/cherry-markdown/src/sass/themes/gray.scss index e1e99627c..f62bccb9d 100644 --- a/packages/cherry-markdown/src/sass/themes/gray.scss +++ b/packages/cherry-markdown/src/sass/themes/gray.scss @@ -14,14 +14,6 @@ --color-bg-active: var(--oc-gray-3); --color-border-default: var(--oc-gray-4); - /* ========== 兼容旧语义别名 ========== */ - --primary-color: var(--color-brand-primary); - --secondary-color: var(--color-bg-active); - --base-font-color: var(--color-text-primary); - --base-editor-bg: var(--color-bg-canvas); - --base-previewer-bg: var(--color-bg-surface); - --base-border-color: var(--color-border-default); - /* ========== 编辑器相关变量 ========== */ --editor-url-bg-color: var(--oc-gray-2); diff --git a/packages/cherry-markdown/src/sass/themes/green.scss b/packages/cherry-markdown/src/sass/themes/green.scss index dd2b75554..478a40f7b 100644 --- a/packages/cherry-markdown/src/sass/themes/green.scss +++ b/packages/cherry-markdown/src/sass/themes/green.scss @@ -14,14 +14,6 @@ --color-bg-active: var(--oc-green-0); --color-border-default: var(--oc-green-8); - /* ========== 兼容旧语义别名 ========== */ - --primary-color: var(--color-brand-primary); - --secondary-color: var(--color-bg-active); - --base-font-color: var(--color-text-primary); - --base-editor-bg: var(--color-bg-canvas); - --base-previewer-bg: var(--color-bg-surface); - --base-border-color: var(--color-border-default); - /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-white); --toolbar-btn-color: var(--color-brand-primary); @@ -34,10 +26,10 @@ --editor-header-color: var(--oc-green-7); --editor-string-color: var(--oc-green-6); --editor-comment-color: var(--oc-green-6); - --editor-quote-color: var(--primary-color); + --editor-quote-color: var(--color-brand-primary); --editor-link-color: var(--oc-green-6); - --editor-url-bg-color: var(--secondary-color); - --editor-v2-color: var(--primary-color); + --editor-url-bg-color: var(--color-bg-active); + --editor-v2-color: var(--color-brand-primary); --editor-v3-color: var(--oc-green-7); --editor-keyword-color: var(--oc-green-6); --editor-selection-bg: var(--oc-green-2); @@ -47,7 +39,7 @@ /* ========== Markdown 相关变量 ========== */ --md-heading-color: var(--oc-green-7); - --md-paragraph-color: var(--primary-color); + --md-paragraph-color: var(--color-brand-primary); --md-link-color: var(--oc-green-6); --md-link-hover-color: var(--oc-green-7); --md-inline-code-color: var(--oc-green-6); @@ -57,7 +49,7 @@ /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-green-8); - --md-table-drag-border-bg: var(--primary-color); + --md-table-drag-border-bg: var(--color-brand-primary); --md-table-sort-active-bg: rgba(137, 245, 171, 0.493); /* ========== TOC 相关变量 ========== */ @@ -73,7 +65,7 @@ --accordion-summary-hover-bg: var(--oc-green-5); --accordion-body-bg: var(--oc-green-0); --accordion-body-border: var(--oc-green-1); - --accordion-body-color: var(--primary-color); + --accordion-body-color: var(--color-brand-primary); /* ========== Panel 相关变量 ========== */ --panel-border-radius: 12px; diff --git a/packages/cherry-markdown/src/sass/themes/red.scss b/packages/cherry-markdown/src/sass/themes/red.scss index a0fae37cf..7f6f836e8 100644 --- a/packages/cherry-markdown/src/sass/themes/red.scss +++ b/packages/cherry-markdown/src/sass/themes/red.scss @@ -14,14 +14,6 @@ --color-bg-active: var(--oc-pink-0); --color-border-default: var(--oc-pink-8); - /* ========== 兼容旧语义别名 ========== */ - --primary-color: var(--color-brand-primary); - --secondary-color: var(--color-bg-active); - --base-font-color: var(--color-text-primary); - --base-editor-bg: var(--color-bg-canvas); - --base-previewer-bg: var(--color-bg-surface); - --base-border-color: var(--color-border-default); - /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-pink-1); --toolbar-btn-color: var(--oc-pink-8); @@ -33,22 +25,22 @@ --dropdown-bg: var(--oc-white); /* ========== 编辑器相关变量 ========== */ - --editor-header-color: var(--primary-color); + --editor-header-color: var(--color-brand-primary); --editor-string-color: var(--oc-pink-5); --editor-comment-color: var(--oc-pink-5); --editor-quote-color: var(--oc-pink-9); --editor-link-color: var(--oc-pink-5); --editor-url-bg-color: var(--oc-pink-1); --editor-v2-color: var(--oc-pink-9); - --editor-v3-color: var(--primary-color); + --editor-v3-color: var(--color-brand-primary); --editor-keyword-color: var(--oc-pink-5); --editor-selection-bg: var(--oc-pink-2); /* ========== Markdown 相关变量 ========== */ - --md-heading-color: var(--primary-color); + --md-heading-color: var(--color-brand-primary); --md-paragraph-color: var(--oc-pink-9); --md-link-color: var(--oc-pink-5); - --md-link-hover-color: var(--primary-color); + --md-link-hover-color: var(--color-brand-primary); --md-inline-code-color: var(--oc-pink-5); --md-inline-code-bg: var(--oc-pink-1); --md-blockquote-bg: var(--oc-pink-1); @@ -56,13 +48,13 @@ /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-pink-8); - --md-table-drag-border-bg: var(--primary-color); + --md-table-drag-border-bg: var(--color-brand-primary); --md-table-sort-active-bg: var(--oc-pink-2); /* ========== TOC 相关变量 ========== */ --md-paragraph-highlight-line-bg: var(--oc-red-1); --md-toc-bg: var(--oc-white); - --md-toc-border-color: var(--base-border-color); + --md-toc-border-color: var(--color-border-default); --md-toc-indicator-color: var(--oc-pink-1); --md-toc-link-hover-bg: var(--oc-pink-0); --md-toc-link-active-bg: var(--oc-pink-1); diff --git a/packages/cherry-markdown/src/sass/themes/violet.scss b/packages/cherry-markdown/src/sass/themes/violet.scss index 0f3853683..b2e9a335d 100644 --- a/packages/cherry-markdown/src/sass/themes/violet.scss +++ b/packages/cherry-markdown/src/sass/themes/violet.scss @@ -14,14 +14,6 @@ --color-bg-active: var(--oc-violet-0); --color-border-default: var(--oc-violet-8); - /* ========== 兼容旧语义别名 ========== */ - --primary-color: var(--color-brand-primary); - --secondary-color: var(--color-bg-active); - --base-font-color: var(--color-text-primary); - --base-editor-bg: var(--color-bg-canvas); - --base-previewer-bg: var(--color-bg-surface); - --base-border-color: var(--color-border-default); - /* ========== 工具栏相关变量 ========== */ --toolbar-bg: var(--oc-white); --toolbar-btn-color: var(--color-brand-primary); @@ -34,17 +26,17 @@ --editor-header-color: var(--oc-violet-7); --editor-string-color: var(--oc-violet-6); --editor-comment-color: var(--oc-violet-6); - --editor-quote-color: var(--primary-color); + --editor-quote-color: var(--color-brand-primary); --editor-link-color: var(--oc-violet-6); --editor-url-bg-color: var(--oc-violet-0); - --editor-v2-color: var(--primary-color); + --editor-v2-color: var(--color-brand-primary); --editor-v3-color: var(--oc-violet-7); --editor-keyword-color: var(--oc-violet-6); --editor-selection-bg: var(--oc-violet-2); /* ========== Markdown 相关变量 ========== */ --md-heading-color: var(--oc-violet-7); - --md-paragraph-color: var(--primary-color); + --md-paragraph-color: var(--color-brand-primary); --md-link-color: var(--oc-violet-6); --md-link-hover-color: var(--oc-violet-7); --md-inline-code-color: var(--oc-violet-6); @@ -54,7 +46,7 @@ /* ========== Table 相关变量 ========== */ --md-table-border: var(--oc-violet-8); - --md-table-drag-border-bg: var(--primary-color); + --md-table-drag-border-bg: var(--color-brand-primary); --md-table-sort-active-bg: var(--oc-violet-2); /* ========== TOC 相关变量 ========== */ @@ -70,7 +62,7 @@ --accordion-summary-hover-bg: var(--oc-violet-5); --accordion-body-bg: var(--oc-violet-0); --accordion-body-border: var(--oc-violet-1); - --accordion-body-color: var(--primary-color); + --accordion-body-color: var(--color-brand-primary); /* ========== Panel 相关变量 ========== */ --panel-border-radius: 4px; diff --git a/packages/cherry-markdown/src/sass/variables/components/accordion.scss b/packages/cherry-markdown/src/sass/variables/components/accordion.scss index 7720ab7a7..052fdfeed 100644 --- a/packages/cherry-markdown/src/sass/variables/components/accordion.scss +++ b/packages/cherry-markdown/src/sass/variables/components/accordion.scss @@ -1,14 +1,19 @@ +/* ========== 手风琴 ========== */ + .cherry { - --accordion-bg: var(--base-previewer-bg); - --accordion-border: var(--base-border-color); + /* 外层容器 */ + --accordion-bg: var(--color-bg-surface); + --accordion-border: var(--color-border-default); --accordion-radius: var(--radius-lg); --accordion-shadow: var(--shadow-md); - --accordion-summary-bg: var(--primary-color); + /* summary 是可点击标题区 */ + --accordion-summary-bg: var(--color-brand-primary); --accordion-summary-color: var(--oc-white); --accordion-summary-hover-bg: var(--color-primary-hover); - --accordion-body-bg: var(--base-previewer-bg); - --accordion-body-color: var(--base-font-color); - --accordion-body-border: var(--base-border-color); + /* body 是展开后的内容区 */ + --accordion-body-bg: var(--color-bg-surface); + --accordion-body-color: var(--color-text-primary); + --accordion-body-border: var(--color-border-default); } diff --git a/packages/cherry-markdown/src/sass/variables/components/bubble.scss b/packages/cherry-markdown/src/sass/variables/components/bubble.scss new file mode 100644 index 000000000..2fff60dd3 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/bubble.scss @@ -0,0 +1,11 @@ +/* ========== 编辑气泡 ========== */ + +.cherry { + --bubble-bg: var(--toolbar-bg); + --bubble-border: var(--color-border-default); + --bubble-shadow: var(--shadow-md); + --bubble-radius: var(--radius-xl); + --bubble-padding: var(--toolbar-btn-padding); + --bubble-btn-height: var(--height-button); + --bubble-z-index: var(--z-index-popover); +} diff --git a/packages/cherry-markdown/src/sass/variables/components/dropdown.scss b/packages/cherry-markdown/src/sass/variables/components/dropdown.scss new file mode 100644 index 000000000..70613cb64 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/dropdown.scss @@ -0,0 +1,20 @@ +/* ========== 工具栏的下拉菜单 ========== */ + +.cherry { + /* 弹层本身 */ + --dropdown-bg: var(--toolbar-bg); + --dropdown-border: var(--color-border-default); + --dropdown-shadow: var(--shadow-md); + --dropdown-radius: var(--radius-xl); + --dropdown-padding: var(--spacing-xs) 0; + + /* 列表项 */ + --dropdown-item-height: var(--height-button); + --dropdown-item-radius: var(--dropdown-radius); + --dropdown-item-padding: var(--spacing-sm) var(--spacing-md); + --dropdown-item-hover-bg: var(--color-bg-hover); + --dropdown-item-color: var(--toolbar-btn-color); + --dropdown-item-hover-color: var(--color-text-primary); + --dropdown-item-active-bg: var(--color-bg-active); + --dropdown-item-active-color: var(--color-brand-primary); +} diff --git a/packages/cherry-markdown/src/sass/variables/components/editor.scss b/packages/cherry-markdown/src/sass/variables/components/editor.scss new file mode 100644 index 000000000..91ac9804c --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/editor.scss @@ -0,0 +1,20 @@ +/* ========== 编辑器相关 ========== */ + +.cherry { + /* 语法高亮与行内装饰,默认依赖语义层颜色 */ + --editor-header-color: var(--color-text-primary); + --editor-comment-color: var(--oc-blue-6); + --editor-quote-color: var(--oc-blue-6); + --editor-string-color: var(--color-text-primary); + --editor-link-color: var(--oc-blue-6); + --editor-url-bg-color: #d7e6fe; + --editor-v2-color: var(--color-brand-primary); + --editor-v3-color: var(--color-bg-active); + --editor-keyword-color: var(--color-text-primary); + + /* 交互态 */ + --editor-cursor-color: var(--color-brand-primary); + --editor-selection-bg: var(--oc-blue-1); + --editor-line-number-color: var(--oc-gray-4); + --editor-active-line-bg: var(--oc-gray-0); +} diff --git a/packages/cherry-markdown/src/sass/variables/components/index.scss b/packages/cherry-markdown/src/sass/variables/components/index.scss index 408627389..103d7805c 100644 --- a/packages/cherry-markdown/src/sass/variables/components/index.scss +++ b/packages/cherry-markdown/src/sass/variables/components/index.scss @@ -1,3 +1,10 @@ +@forward './toolbar'; +@forward './dropdown'; +@forward './bubble'; +@forward './editor'; +@forward './markdown'; +@forward './previewer'; +@forward './mermaid'; @forward './table'; @forward './accordion'; @forward './panel'; diff --git a/packages/cherry-markdown/src/sass/variables/components/markdown.scss b/packages/cherry-markdown/src/sass/variables/components/markdown.scss new file mode 100644 index 000000000..22b41633c --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/markdown.scss @@ -0,0 +1,40 @@ +/* ========== Markdown 元素样式 ========== */ + +.cherry { + /* 正文基础排版 */ + --md-heading-color: var(--color-text-primary); + + --md-paragraph-color: var(--color-text-primary); + --md-paragraph-line-height: var(--line-height-relaxed); + --md-paragraph-highlight-line-bg: var(--color-bg-active); + + /* 行内元素 */ + --md-link-color: var(--oc-blue-6); + --md-link-hover-color: var(--color-text-link-hover); + + --md-inline-code-color: var(--color-error); + --md-inline-code-bg: #e5e5e5; + + /* 引用与分隔 */ + --md-blockquote-bg: rgba(102, 128, 153, 0.05); + --md-blockquote-border: #D6DBDF; + --md-blockquote-color: var(--color-text-secondary); + + --md-hr-border: var(--color-border-default); + + /* TOC 目录 */ + --md-toc-bg: var(--oc-gray-0); + --md-toc-border-color: var(--color-border-default); + --md-toc-radius: var(--radius-lg); + --md-toc-padding: var(--spacing-lg); + --md-toc-title-color: var(--md-heading-color); + --md-toc-link-hover-bg: var(--oc-gray-1); + --md-toc-link-active-bg: var(--oc-gray-2); + --md-toc-link-radius: var(--radius-md); + --md-toc-link-color: var(--md-paragraph-color); + --md-toc-link-hover-color: var(--md-link-hover-color); + --md-toc-indicator-width: var(--border-width-4); + --md-toc-indicator-color: var(--oc-gray-3); + --md-toc-indicator-hover-color: var(--md-toc-link-hover-color); + --md-toc-indicator-gap: var(--spacing-lg); +} diff --git a/packages/cherry-markdown/src/sass/variables/components/mermaid.scss b/packages/cherry-markdown/src/sass/variables/components/mermaid.scss new file mode 100644 index 000000000..0034584a5 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/mermaid.scss @@ -0,0 +1,10 @@ +/* ========== Mermaid 源码工具栏 ========== */ + +.cherry { + /* mermaid 源码 / 预览切换工具条 */ + --mermaid-toolbar-switch-bg: rgba(128, 128, 128, 0.12); + --mermaid-toolbar-slider-bg: rgba(255, 255, 255, 0.85); + --mermaid-toolbar-tab-color: inherit; + --mermaid-toolbar-tab-active-color: #333; + --mermaid-container-border: rgba(128, 128, 128, 0.2); +} diff --git a/packages/cherry-markdown/src/sass/variables/components/panel.scss b/packages/cherry-markdown/src/sass/variables/components/panel.scss index 2f239bb84..77e1ea013 100644 --- a/packages/cherry-markdown/src/sass/variables/components/panel.scss +++ b/packages/cherry-markdown/src/sass/variables/components/panel.scss @@ -1,4 +1,7 @@ +/* ========== 面板 ========== */ + .cherry { + /* 面板共用容器样式 */ --panel-margin: 10px 0; --panel-border-radius: var(--radius-xl); --panel-border: 1px solid var(--color-border-default); @@ -17,6 +20,7 @@ --panel-body-color: var(--color-text-primary); --panel-body-border-radius: 0 0 var(--panel-border-radius) var(--panel-border-radius); + /* 各状态优先通过 accent / surface / emphasis 三层来覆写,而不是重写细项实现 */ --panel-primary-accent: var(--color-brand-primary); --panel-primary-surface: var(--color-bg-active); --panel-primary-emphasis: var(--panel-primary-accent); diff --git a/packages/cherry-markdown/src/sass/variables/components/previewer.scss b/packages/cherry-markdown/src/sass/variables/components/previewer.scss new file mode 100644 index 000000000..05cbaf4e4 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/previewer.scss @@ -0,0 +1,8 @@ +/* ========== 预览器相关 ========== */ + +.cherry { + /* mobile-bg 只作用于移动设备模拟预览区 */ + --previewer-mobile-bg: var(--color-bg-surface); + /* 拖拽分栏线 */ + --drag-border-color: var(--color-border-default); +} diff --git a/packages/cherry-markdown/src/sass/variables/components/shortcut-panel.scss b/packages/cherry-markdown/src/sass/variables/components/shortcut-panel.scss index 5fe1b5208..7baabceb4 100644 --- a/packages/cherry-markdown/src/sass/variables/components/shortcut-panel.scss +++ b/packages/cherry-markdown/src/sass/variables/components/shortcut-panel.scss @@ -1,7 +1,11 @@ +/* ========== 快捷键配置面板 ========== */ + .cherry { + /* 快捷键配置面板沿用 dropdown 的视觉基础 */ --shortcut-key-config-panel-bg: var(--dropdown-bg); --shortcut-key-config-panel-text-color: var(--dropdown-item-color); + /* 面板内部布局和动画 */ --shortcut-panel-padding-x: 15px; --shortcut-panel-padding-y: 10px; --shortcut-panel-font-size-xs: var(--font-size-xs); diff --git a/packages/cherry-markdown/src/sass/variables/components/table.scss b/packages/cherry-markdown/src/sass/variables/components/table.scss index 6c50f490f..a7837c10c 100644 --- a/packages/cherry-markdown/src/sass/variables/components/table.scss +++ b/packages/cherry-markdown/src/sass/variables/components/table.scss @@ -1,6 +1,9 @@ +/* ========== 表格 ========== */ + .cherry { - --md-table-border: var(--base-border-color); - --md-table-operator-color: var(--primary-color); - --md-table-drag-border-bg: var(--primary-color); - --md-table-sort-active-bg: var(--secondary-color); + /* 表格编辑态颜色:边框、操作按钮、拖拽指示与排序高亮 */ + --md-table-border: var(--color-border-default); + --md-table-operator-color: var(--color-brand-primary); + --md-table-drag-border-bg: var(--color-brand-primary); + --md-table-sort-active-bg: var(--color-bg-active); } diff --git a/packages/cherry-markdown/src/sass/variables/components/toolbar.scss b/packages/cherry-markdown/src/sass/variables/components/toolbar.scss new file mode 100644 index 000000000..5fb58e018 --- /dev/null +++ b/packages/cherry-markdown/src/sass/variables/components/toolbar.scss @@ -0,0 +1,26 @@ +/* ========== 工具栏相关 ========== */ + +.cherry { + /* 工具栏容器 */ + --toolbar-bg: var(--oc-white); + --toolbar-border: var(--color-border-default); + --toolbar-padding: var(--spacing-xs) var(--spacing-xl); + --toolbar-font-size: var(--font-size-sm); + --toolbar-radius: var(--radius-none); + --toolbar-shadow: var(--shadow-sm); + --toolbar-split-color: var(--color-border-default); + + --toolbar-min-height: 48px; + --sidebar-list-height: 120px; + + /* 工具栏按钮 */ + --toolbar-btn-color: #3f4a56; + --toolbar-btn-bg: transparent; + --toolbar-btn-hover-color: var(--color-brand-primary); + --toolbar-btn-hover-bg: var(--color-bg-active); + --toolbar-btn-active-bg: var(--color-bg-active); + --toolbar-btn-disabled: #ccc; + --toolbar-btn-radius: var(--radius-lg); + --toolbar-btn-padding: 0 var(--spacing-md); + --toolbar-btn-height: var(--height-button); +} diff --git a/packages/cherry-markdown/src/sass/variables/semantic.scss b/packages/cherry-markdown/src/sass/variables/semantic.scss index 7d431c774..c1fa1749f 100644 --- a/packages/cherry-markdown/src/sass/variables/semantic.scss +++ b/packages/cherry-markdown/src/sass/variables/semantic.scss @@ -2,166 +2,43 @@ // 基于现有组件和样式需求,映射到一级变量 .cherry { - /* ========== 历史语义默认值 ========== */ - --base-font-color: #3f4a56; - --base-sub-font-color: #6d6e6f; - --base-border-color: #dfe6ee; - --base-editor-bg: #ffffff; - --base-previewer-bg: #ffffff; - - /* ========== 主题色彩系统 ========== */ - --primary-color: #3582fb; - --secondary-color: #f0f4ff; - /* ========== 系统状态颜色 ========== */ --color-success: var(--oc-green-6); --color-warning: var(--oc-yellow-6); --color-error: var(--oc-red-6); --color-info: var(--oc-blue-6); - --color-link-hover: var(--primary-color); + --color-link-hover: #3582fb; --color-primary-hover: var(--color-link-hover); /* ========== 新语义命名层 ========== */ - --color-text-primary: var(--base-font-color); - --color-text-secondary: var(--base-sub-font-color); + --color-text-primary: #3f4a56; + --color-text-secondary: #6d6e6f; --color-text-link: var(--md-link-color); --color-text-link-hover: var(--color-link-hover); - --color-bg-canvas: var(--base-editor-bg); - --color-bg-surface: var(--base-previewer-bg); + --color-bg-canvas: #ffffff; + --color-bg-surface: #ffffff; --color-bg-subtle: var(--oc-gray-0); --color-bg-hover: var(--oc-gray-1); - --color-bg-active: var(--secondary-color); + --color-bg-active: #f0f4ff; - --color-border-default: var(--base-border-color); + --color-border-default: #dfe6ee; --color-border-strong: var(--oc-gray-4); - --color-brand-primary: var(--primary-color); + --color-brand-primary: #3582fb; --color-brand-primary-hover: var(--color-primary-hover); /* ========== 历史兼容变量 ========== */ + /* 仅保留给外部覆写或遗留调用,不建议新增内部依赖 */ + --base-font-color: var(--color-text-primary); + --base-sub-font-color: var(--color-text-secondary); + --base-border-color: var(--color-border-default); + --base-editor-bg: var(--color-bg-canvas); + --base-previewer-bg: var(--color-bg-surface); + --primary-color: var(--color-brand-primary); + --secondary-color: var(--color-bg-active); --border-color: var(--color-border-default); --bg-color-lighter: var(--color-bg-hover); --full-width-color: var(--color-brand-primary); - /* ========== 工具栏相关 ========== */ - --toolbar-bg: var(--oc-white); - --toolbar-border: var(--color-border-default); - --toolbar-padding: var(--spacing-xs) var(--spacing-xl); - --toolbar-font-size: var(--font-size-sm); - --toolbar-radius: var(--radius-none); - --toolbar-shadow: var(--shadow-sm); - --toolbar-split-color: var(--color-border-default); - - --toolbar-min-height: 48px; // 单行工具栏的高度 - // 侧边栏列表高度(由 JS 动态写入),默认 120px 作为无侧栏时的回退 - --sidebar-list-height: 120px; - - // 工具栏按钮 - --toolbar-btn-color: #3f4a56; - --toolbar-btn-bg: transparent; - --toolbar-btn-hover-color: var(--color-brand-primary); - --toolbar-btn-hover-bg: var(--color-bg-active); - --toolbar-btn-active-bg: var(--color-bg-active); - --toolbar-btn-disabled: #ccc; - --toolbar-btn-radius: var(--radius-lg); - --toolbar-btn-padding: 0 var(--spacing-md); - --toolbar-btn-height: var(--height-button); - - /* ========== 工具栏的下拉菜单 ========== */ - --dropdown-bg: var(--toolbar-bg); - --dropdown-border: var(--color-border-default); - --dropdown-shadow: var(--shadow-md); - --dropdown-radius: var(--radius-xl); - --dropdown-padding: var(--spacing-xs) 0; - - // 下拉菜单项 - --dropdown-item-height: var(--height-button); - --dropdown-item-radius: var(--dropdown-radius); - --dropdown-item-padding: var(--spacing-sm) var(--spacing-md); - --dropdown-item-hover-bg: var(--color-bg-hover); - --dropdown-item-color: var(--toolbar-btn-color); - --dropdown-item-hover-color: var(--color-text-primary); - --dropdown-item-active-bg: var(--color-bg-active); - --dropdown-item-active-color: var(--color-brand-primary); - - /* ========== 编辑气泡 ========== */ - --bubble-bg: var(--toolbar-bg); - --bubble-border: var(--color-border-default); - --bubble-shadow: var(--shadow-md); - --bubble-radius: var(--radius-xl); - --bubble-padding: var(--toolbar-btn-padding); - --bubble-btn-height: var(--height-button); - --bubble-z-index: var(--z-index-popover); - - /* ========== 编辑器相关 ========== */ - // ---base-editor-bg 编辑器背景颜色 - --editor-header-color: var(--color-text-primary); - --editor-comment-color: var(--oc-blue-6); - --editor-quote-color: var(--oc-blue-6); - --editor-string-color: var(--color-text-primary); - --editor-link-color: var(--oc-blue-6); - --editor-url-bg-color: #d7e6fe; - --editor-v2-color: var(--color-brand-primary); - --editor-v3-color: var(--color-bg-active); - --editor-keyword-color: var(--color-text-primary); - --editor-cursor-color: var(--color-brand-primary); - --editor-selection-bg: var(--oc-blue-1); - --editor-line-number-color: var(--oc-gray-4); - --editor-active-line-bg: var(--oc-gray-0); - - /* ========== 预览器相关 ========== */ - // --base-previewer-bg 预览器背景颜色 - --previewer-mobile-bg: var(--color-bg-surface); - - /* ========== Markdown 元素样式 ========== */ - // 标题 - --md-heading-color: var(--color-text-primary); - - // 段落 - --md-paragraph-color: var(--color-text-primary); - --md-paragraph-line-height: var(--line-height-relaxed); - --md-paragraph-highlight-line-bg: var(--color-bg-active); // 当前编辑行高光背景色 - - // 链接 - --md-link-color: var(--oc-blue-6); - --md-link-hover-color: var(--color-text-link-hover); - - // 行内代码 - --md-inline-code-color: var(--color-error); - --md-inline-code-bg: #e5e5e5; - - // 引用 - --md-blockquote-bg: rgba(102, 128, 153, 0.05); - --md-blockquote-border: #D6DBDF; - --md-blockquote-color: var(--color-text-secondary); - - // 分割线 - --md-hr-border: var(--color-border-default); - - // 目录 (TOC) - --md-toc-bg: var(--oc-gray-0); - --md-toc-border-color: var(--color-border-default); - --md-toc-radius: var(--radius-lg); - --md-toc-padding: var(--spacing-lg); - --md-toc-title-color: var(--md-heading-color); - --md-toc-link-hover-bg: var(--oc-gray-1); - --md-toc-link-active-bg: var(--oc-gray-2); - --md-toc-link-radius: var(--radius-md); - --md-toc-link-color: var(--md-paragraph-color); - --md-toc-link-hover-color: var(--md-link-hover-color); - --md-toc-indicator-width: var(--border-width-4); - --md-toc-indicator-color: var(--oc-gray-3); - --md-toc-indicator-hover-color: var(--md-toc-link-hover-color); - --md-toc-indicator-gap: var(--spacing-lg); - - /* ========== Mermaid 源码工具栏 ========== */ - --mermaid-toolbar-switch-bg: rgba(128, 128, 128, 0.12); - --mermaid-toolbar-slider-bg: rgba(255, 255, 255, 0.85); - --mermaid-toolbar-tab-color: inherit; - --mermaid-toolbar-tab-active-color: #333; // active 状态深色文字,确保在亮色 slider 上可见 - --mermaid-container-border: rgba(128, 128, 128, 0.2); - - /* ========== 其余单个组件 ========== */ - --drag-border-color: var(--color-border-default); } diff --git a/packages/cherry-markdown/src/utils/exportWord.js b/packages/cherry-markdown/src/utils/exportWord.js index 56ab812a6..5ab076761 100644 --- a/packages/cherry-markdown/src/utils/exportWord.js +++ b/packages/cherry-markdown/src/utils/exportWord.js @@ -201,8 +201,8 @@ function showExportWordTip() { top: 50%; left: 50%; transform: translate(-50%, -50%); - background: var(--base-editor-bg); - border: 1px solid var(--base-border-color); + background: var(--color-bg-canvas); + border: 1px solid var(--color-border-default); border-radius: var(--radius-xl); padding: var(--spacing-lg); box-shadow: var(--shadow-lg); @@ -211,16 +211,16 @@ function showExportWordTip() { text-align: center; font-family: var(--font-family-base, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif); "> -

内容已复制到剪贴板

-

+

内容已复制到剪贴板

+

请打开 Microsoft Word,然后按 Ctrl+V(Windows)或 Cmd+V(Mac)粘贴内容。

-

+

部分样式可能会丢失或变更