From 737e3f444da1b879285f2079ba7cbe12c0900c59 Mon Sep 17 00:00:00 2001 From: GreatZP Date: Fri, 25 Aug 2023 15:48:30 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor(theme):=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=92=8Cdemo=E9=80=82=E9=85=8D=E4=B8=BB=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E5=8F=96=E4=BD=BF=E7=94=A8theme=E7=9A=84=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devui/code-review/src/code-review.scss | 144 +++++++++++++++++- .../devui/code-review/src/code-review.tsx | 5 +- .../src/components/color-edit/color-edit.scss | 7 +- .../src/components/panel/index.scss | 17 +-- .../devui/date-picker/src/date-picker.scss | 8 +- .../devui/editor-md/src/editor-md.scss | 5 + .../devui/editor-md/src/editor-md.tsx | 7 +- packages/devui-vue/devui/gantt/src/gantt.scss | 4 + .../devui/input-icon/src/input-icon.scss | 1 - .../devui-vue/devui/shared/utils/useTheme.ts | 32 ++++ .../devui/tag-input/src/tag-input.scss | 10 +- .../devui/tree-select/src/tree-select.scss | 23 +++ .../.vitepress/devui-theme/styles/code.scss | 2 +- .../docs/components/action-timeline/index.md | 2 +- .../docs/components/input-icon/index.md | 10 +- .../devui-vue/docs/components/layout/index.md | 97 ++++++------ .../docs/components/time-picker/index.md | 6 + 17 files changed, 294 insertions(+), 86 deletions(-) create mode 100644 packages/devui-vue/devui/shared/utils/useTheme.ts diff --git a/packages/devui-vue/devui/code-review/src/code-review.scss b/packages/devui-vue/devui/code-review/src/code-review.scss index 38fb97d37f..81c602ad8e 100644 --- a/packages/devui-vue/devui/code-review/src/code-review.scss +++ b/packages/devui-vue/devui/code-review/src/code-review.scss @@ -16,13 +16,17 @@ padding-right: 20px; border-bottom: 1px solid $devui-dividing-line; border-radius: $devui-border-radius-card; - background-color: $devui-global-bg-normal; + background-color: $devui-base-bg; cursor: pointer; &--unfold { border-radius: $devui-border-radius-card $devui-border-radius-card 0 0; - border-bottom: 1px solid #d8d8d8; - box-shadow: inset 0 -1px 0 0 $devui-brand-foil; + border-bottom: 1px solid $devui-dividing-line; + box-shadow: inset 0 -1px 0 0 $devui-shadow; + } + + .d2h-files-diff { + background-color: #f8fafd; } .file-info { @@ -138,6 +142,41 @@ border: none; } + .d2h-emptyplaceholder.d2h-cntx.d2h-code-side-linenumber, + .d2h-emptyplaceholder.d2h-cntx { + background-color: #fafafa; + } + + .d2h-code-side-linenumber, + .d2h-emptyplaceholder { + border-left: 1px solid; + border-right: 1px solid; + padding: 0; + } + + .d2h-info.d2h-code-side-linenumber { + background-color: #f8fafd; + } + + .d2h-code-side-line, + .d2h-code-side-linenumber { + background-color: transparent; + } + + .d2h-code-side-linenumber { + border-color: #eee; + color: rgba(0, 0, 0, 0.3); + height: 100%; + + &.d2h-cntx { + background-color: #fff; + } + } + + .d2h-code-side-linenumber.d2h-ins { + background-color: #dfd; + } + .d2h-code-linenumber::after, .d2h-code-side-linenumber::after { content: ''; @@ -193,9 +232,106 @@ width: 22px; height: 22px; border-radius: 50%; - background-color: $devui-base-bg; + background-color: $devui-brand-foil; transform: translateX(-50%); box-shadow: 0 0 1px 1px rgba(37, 43, 58, 0.16); cursor: pointer; } + + &.dp-md-dark { + color: #e8e8e8; + background-color: #2e303c; + + .d2h-files-diff { + background-color: #262831; + } + + .file-info .invert { + fill: #e8e8e8; + } + + &__content { + background-color: #2e303c; + } + + tr { + td.comment-icon-hover { + background-color: rgba(94, 124, 224, 0.2) !important; + } + &:hover .d2h-info { + background-color: rgba(94, 124, 224, 0.2); + } + } + + .d2h-info { + background-color: #262831; + color: #909090; + + .d2h-code-line-prefix { + color: #e8e8e8; + } + } + + .d2h-code-side-linenumber { + border-color: #262933; + color: #646464; + + &.d2h-cntx { + background-color: #262933; + } + } + + .d2h-cntx { + background-color: #2e303c; + } + + .d2h-del { + background-color: #4b3a39; + border-color: #985c5a; + } + + .d2h-ins { + background-color: #1f5231; + } + + .d2h-ins.d2h-code-side-linenumber { + border-color: #29a17c; + } + + .d2h-emptyplaceholder { + border-color: #262933; + } + + .d2h-code-side-linenumber.d2h-emptyplaceholder.d2h-cntx.d2h-emptyplaceholder { + background-color: #363946; + } + + .d2h-emptyplaceholder.d2h-cntx { + background-color: #363946; + } + + .d2h-code-line-prefix { + color: #e8e8e8; + } + + .hljs { + color: #abb2bf; + } + + .hljs-keyword { + color: #c678dd; + } + + .hljs-title.class_ { + color: #e6c07b; + } + + .hljs-built_in { + color: #e6c07b; + } + + .hljs-string { + color: #98c379; + } + } } diff --git a/packages/devui-vue/devui/code-review/src/code-review.tsx b/packages/devui-vue/devui/code-review/src/code-review.tsx index fd8d1afdfe..29c3f9fae5 100644 --- a/packages/devui-vue/devui/code-review/src/code-review.tsx +++ b/packages/devui-vue/devui/code-review/src/code-review.tsx @@ -9,6 +9,7 @@ import { useCodeReview } from './composables/use-code-review'; import { useCodeReviewFold } from './composables/use-code-review-fold'; import { useCodeReviewComment } from './composables/use-code-review-comment'; import './code-review.scss'; +import { useTheme } from '@devui/shared/utils/useTheme'; export default defineComponent({ name: 'DCodeReview', @@ -20,7 +21,7 @@ export default defineComponent({ const { isFold, toggleFold } = useCodeReviewFold(props, ctx); const { commentLeft, commentTop, mouseEvent, onCommentMouseLeave, onCommentIconClick, insertComment, removeComment } = useCodeReviewComment(reviewContentRef, props, ctx); - + const { isDarkMode } = useTheme(() => {}); onMounted(() => { ctx.emit('afterViewInit', { toggleFold, insertComment, removeComment }); }); @@ -28,7 +29,7 @@ export default defineComponent({ provide(CodeReviewInjectionKey, { reviewContentRef, diffInfo: diffFile.value[0], isFold, rootCtx: ctx }); return () => ( -
+
(isFold.value = !isFold.value)} />
{props.showBlob ? ( diff --git a/packages/devui-vue/devui/color-picker/src/components/color-edit/color-edit.scss b/packages/devui-vue/devui/color-picker/src/components/color-edit/color-edit.scss index 68937294b4..0ef033e95a 100644 --- a/packages/devui-vue/devui/color-picker/src/components/color-edit/color-edit.scss +++ b/packages/devui-vue/devui/color-picker/src/components/color-edit/color-edit.scss @@ -30,7 +30,6 @@ padding: 0 5px; input { - border: none; outline: none; width: 100%; text-align: center; @@ -63,5 +62,11 @@ border-bottom-right-radius: 5px; } } + + &-value { + background-color: $devui-base-bg; + border: 1px solid $devui-line; + color: $devui-text; + } } } diff --git a/packages/devui-vue/devui/date-picker/src/components/panel/index.scss b/packages/devui-vue/devui/date-picker/src/components/panel/index.scss index 85325f71f1..f000a295fc 100644 --- a/packages/devui-vue/devui/date-picker/src/components/panel/index.scss +++ b/packages/devui-vue/devui/date-picker/src/components/panel/index.scss @@ -4,12 +4,12 @@ $panel-width: 230px; $panel-height: 210px; $panel-padding: 5px; $panel-row-height: 24px; -$panel-cell-bg: #ffffff; -$panel-cell-color: #000000; -$panel-cell-active-bg: #0066cc; -$panel-cell-active-color: #f1f1f1; -$panel-cell-active-hover-bg: #0088dd; -$panel-cell-active-hover-color: #ffffff; +$panel-cell-bg: transparent; +$panel-cell-color: $devui-text; +$panel-cell-active-bg: $devui-list-item-active-bg; +$panel-cell-active-color: $devui-list-item-active-text; +$panel-cell-active-hover-bg: $devui-list-item-active-bg; +$panel-cell-active-hover-color: $devui-list-item-active-text; .#{$devui-prefix}-calendar-panel { width: $panel-width; @@ -37,7 +37,7 @@ $panel-cell-active-hover-color: #ffffff; color: $panel-cell-color; &:hover { - background-color: $devui-disabled-bg; + background-color: $devui-range-item-hover-bg; } &.selected { @@ -88,16 +88,15 @@ $panel-cell-active-hover-color: #ffffff; &.disabled { .today-button { - border: 1px solid #cccccc; cursor: not-allowed; } } .today-button { - border: 1px solid #0066cc; border-radius: 3px; padding: 2px 20px; font-size: 12px; + color: $devui-brand-active; } } } diff --git a/packages/devui-vue/devui/date-picker/src/date-picker.scss b/packages/devui-vue/devui/date-picker/src/date-picker.scss index 9578872273..d2b381e502 100644 --- a/packages/devui-vue/devui/date-picker/src/date-picker.scss +++ b/packages/devui-vue/devui/date-picker/src/date-picker.scss @@ -4,11 +4,10 @@ $cell-font-size: 13px; $border-width: 1px; $border-style: solid; $border-color: #dddddd; -$input-border-color: #0066cc; +$input-border-color: $devui-form-control-line; .#{$devui-prefix}-datepicker-container { .input-container { - border: 1px solid $input-border-color; border-radius: $devui-border-radius; display: flex; flex-direction: row; @@ -24,7 +23,6 @@ $input-border-color: #0066cc; width: 100%; input { - border: 0 solid #000000; outline: none; margin-right: 20px; } @@ -37,13 +35,9 @@ $input-border-color: #0066cc; } .#{$devui-prefix}-datepicker-panel { - border: 1px solid #000000; margin: 0; padding: 0; display: inline-block; - border-width: $border-width; - border-style: $border-style; - border-color: $border-color; border-radius: $devui-border-radius-card; box-shadow: $devui-shadow-length-base $devui-shadow; background-color: $devui-base-bg; diff --git a/packages/devui-vue/devui/editor-md/src/editor-md.scss b/packages/devui-vue/devui/editor-md/src/editor-md.scss index ddb43ab579..82ac7c681b 100644 --- a/packages/devui-vue/devui/editor-md/src/editor-md.scss +++ b/packages/devui-vue/devui/editor-md/src/editor-md.scss @@ -16,6 +16,11 @@ $font-family: helvetica, arial, 'PingFang', 'Microsoft YaHei', 'Hiragino Sans GB padding: 20px 0; } + .CodeMirror { + background: $devui-base-bg; + color: $devui-light-text; + } + .CodeMirror pre { padding: 0 20px; } diff --git a/packages/devui-vue/devui/editor-md/src/editor-md.tsx b/packages/devui-vue/devui/editor-md/src/editor-md.tsx index 9e839f2044..f917b33f2a 100644 --- a/packages/devui-vue/devui/editor-md/src/editor-md.tsx +++ b/packages/devui-vue/devui/editor-md/src/editor-md.tsx @@ -1,7 +1,7 @@ import { defineComponent, toRefs, provide, ref, SetupContext } from 'vue'; import { Fullscreen } from '../../fullscreen'; import { useEditorMd } from './composables/use-editor-md'; -import { useEditorMdTheme } from './composables/use-editor-md-theme'; +import { useTheme } from '@devui/shared/utils/useTheme'; import { EditorMdInjectionKey, EditorMdProps, editorMdProps } from './editor-md-types'; import Toolbar from './components/toolbar'; import MdRender from './components/md-render'; @@ -48,7 +48,7 @@ export default defineComponent({ onPreviewMouseover, } = useEditorMd(props, ctx); - const { isDarkMode } = useEditorMdTheme(() => {}); + const { isDarkMode } = useTheme(() => {}); provide(EditorMdInjectionKey, { showFullscreen, @@ -64,7 +64,8 @@ export default defineComponent({ class={[ 'dp-md-container', { 'dp-md-readonly': mode.value === 'readonly', 'dp-md-editonly': mode.value === 'editonly', 'dp-md-dark': isDarkMode.value }, - ]} onPaste={onPaste}> + ]} + onPaste={onPaste}>
diff --git a/packages/devui-vue/devui/gantt/src/gantt.scss b/packages/devui-vue/devui/gantt/src/gantt.scss index 4cc90984a0..df048c02ec 100644 --- a/packages/devui-vue/devui/gantt/src/gantt.scss +++ b/packages/devui-vue/devui/gantt/src/gantt.scss @@ -18,6 +18,10 @@ padding-top: 8px; } } + + button { + color: $devui-text; + } } .tool { diff --git a/packages/devui-vue/devui/input-icon/src/input-icon.scss b/packages/devui-vue/devui/input-icon/src/input-icon.scss index 4cd0479acd..bf83aedba8 100644 --- a/packages/devui-vue/devui/input-icon/src/input-icon.scss +++ b/packages/devui-vue/devui/input-icon/src/input-icon.scss @@ -10,7 +10,6 @@ $icon-left: 2px; label { flex: 1; - background-color: #cccccc; input { padding-right: $icon-size + $icon-offset + $icon-left; diff --git a/packages/devui-vue/devui/shared/utils/useTheme.ts b/packages/devui-vue/devui/shared/utils/useTheme.ts new file mode 100644 index 0000000000..02c6cf196e --- /dev/null +++ b/packages/devui-vue/devui/shared/utils/useTheme.ts @@ -0,0 +1,32 @@ +import { onBeforeMount, onBeforeUnmount, onMounted, ref } from 'vue'; + +export function useTheme(callback: () => void) { + const isDarkMode = ref(false); + let themeService: any; + + const themeChange = () => { + if (themeService) { + isDarkMode.value = themeService.currentTheme.isDark; + callback(); + } + }; + + onBeforeMount(() => { + themeService = window['devuiThemeService']; + }); + + onMounted(() => { + themeChange(); + if (themeService && themeService.eventBus) { + themeService.eventBus.add('themeChanged', themeChange); + } + }); + + onBeforeUnmount(() => { + if (themeService && themeService.eventBus) { + themeService.eventBus.remove('themeChanged', themeChange); + } + }); + + return { isDarkMode }; +} diff --git a/packages/devui-vue/devui/tag-input/src/tag-input.scss b/packages/devui-vue/devui/tag-input/src/tag-input.scss index 7f3f1443d1..ffd2dc82eb 100644 --- a/packages/devui-vue/devui/tag-input/src/tag-input.scss +++ b/packages/devui-vue/devui/tag-input/src/tag-input.scss @@ -98,7 +98,7 @@ vertical-align: top; font-size: $devui-font-size-page-title; border-radius: 50%; - background-color: $devui-line; + background-color: $devui-icon-fill; width: 12px; height: 12px; display: inline-block; @@ -123,13 +123,13 @@ span { &:hover { - color: $devui-list-item-hover-text; + color: $devui-icon-fill; } } .remove-button { &:hover { - background-color: $devui-list-item-hover-text; + background-color: $devui-icon-fill; } } } @@ -144,6 +144,7 @@ height: 22px; font-size: $devui-font-size; padding-left: 5px; + background-color: transparent; &::-ms-clear { display: none; @@ -176,7 +177,8 @@ font-size: $devui-font-size; line-height: 20px; border-radius: $devui-border-radius; - transition: color $devui-animation-duration-fast $devui-animation-ease-in-smooth, background-color $devui-animation-duration-fast $devui-animation-ease-in-smooth; + transition: color $devui-animation-duration-fast $devui-animation-ease-in-smooth, + background-color $devui-animation-duration-fast $devui-animation-ease-in-smooth; cursor: pointer; &:hover { diff --git a/packages/devui-vue/devui/tree-select/src/tree-select.scss b/packages/devui-vue/devui/tree-select/src/tree-select.scss index c1ea171f80..241dedb25d 100644 --- a/packages/devui-vue/devui/tree-select/src/tree-select.scss +++ b/packages/devui-vue/devui/tree-select/src/tree-select.scss @@ -8,6 +8,29 @@ $tree-select-item-font-size: 16px; .#{$devui-prefix}-tree-select { position: relative; width: 100%; + + svg.svg-icon path { + fill: $devui-icon-text; + } + + svg.svg-icon rect { + stroke: $devui-icon-text; + } + + &.#{$devui-prefix}-tree__node--open:not(.#{$devui-prefix}-tree-node__customIcon) { + & > .#{$devui-prefix}-tree__node-content svg.svg-icon path { + fill: $devui-icon-fill-active; + } + + & > .#{$devui-prefix}-tree__node-content svg.svg-icon rect { + stroke: $devui-icon-fill-active; + } + + & > .#{$devui-prefix}-tree__node-content svg.svg-icon.svg-icon-close rect:last-child { + stroke: none; + fill: $devui-icon-fill-active; + } + } } .#{$devui-prefix}-tree-select-disabled { diff --git a/packages/devui-vue/docs/.vitepress/devui-theme/styles/code.scss b/packages/devui-vue/docs/.vitepress/devui-theme/styles/code.scss index caf9ad04f0..9b442aa192 100644 --- a/packages/devui-vue/docs/.vitepress/devui-theme/styles/code.scss +++ b/packages/devui-vue/docs/.vitepress/devui-theme/styles/code.scss @@ -6,7 +6,7 @@ code { padding: 0.25rem 0.5rem; font-family: var(--code-font-family); font-size: 0.85em; - color: var(--devui-text,#252b3a) !important; + color: var(--devui-text, #252b3a); background-color: $devui-area !important; } diff --git a/packages/devui-vue/docs/components/action-timeline/index.md b/packages/devui-vue/docs/components/action-timeline/index.md index 72610019f7..b1add1b011 100644 --- a/packages/devui-vue/docs/components/action-timeline/index.md +++ b/packages/devui-vue/docs/components/action-timeline/index.md @@ -168,7 +168,7 @@ export default defineComponent({ ``` @@ -41,7 +42,6 @@ :::demo ```vue - ``` ::: -### 应用场景1 +### 应用场景 1 常用上中下布局。 :::demo ```vue -