feat: 新增 config-provider 夜间模式偏好配置

This commit is contained in:
就眠儀式 2022-04-07 07:18:50 +08:00
parent 3dcee656e0
commit 6fe947ef79
5 changed files with 75 additions and 23 deletions

View File

@ -4,7 +4,7 @@
"author": "就眠儀式", "author": "就眠儀式",
"license": "MIT", "license": "MIT",
"description": "a component library for Vue 3 base on layui-vue", "description": "a component library for Vue 3 base on layui-vue",
"homepage": "http://www.layui-vue.com", "homepage": "https://gitee.com/layui/layui-vue/blob/next/README.md",
"main": "es/index.js", "main": "es/index.js",
"unpkg": "umd/index.js", "unpkg": "umd/index.js",
"jsdelivr": "umd/index.js", "jsdelivr": "umd/index.js",
@ -39,7 +39,8 @@
"moment": "^2.29.1", "moment": "^2.29.1",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"vue-i18n": "^9.2.0-beta.34", "vue-i18n": "^9.2.0-beta.34",
"xlsx": "^0.18.4" "xlsx": "^0.18.4",
"animate.css": "^4.1.1"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.15.8", "@babel/core": "^7.15.8",

View File

@ -10,6 +10,8 @@ import { useI18n } from "vue-i18n";
import { import {
enable as enableDarkMode, enable as enableDarkMode,
disable as disableDarkMode, disable as disableDarkMode,
Theme,
DynamicThemeFix,
} from "darkreader"; } from "darkreader";
const { locale, setLocaleMessage, mergeLocaleMessage } = useI18n(); const { locale, setLocaleMessage, mergeLocaleMessage } = useI18n();
@ -19,6 +21,7 @@ export interface LayConfigProviderProps {
locales?: []; locales?: [];
theme?: string; theme?: string;
themeVariable?: any; themeVariable?: any;
darkPartial?: any;
} }
const props = withDefaults(defineProps<LayConfigProviderProps>(), { const props = withDefaults(defineProps<LayConfigProviderProps>(), {
@ -39,26 +42,31 @@ const changeLocales = (lang: string, locales: any, merge: boolean) => {
}; };
const changeTheme = (theme: string) => { const changeTheme = (theme: string) => {
if (theme === "dark") {
enableDarkMode( const defaultPartial: Partial<Theme> = {
{
mode: 1, mode: 1,
brightness: 100, brightness: 100,
contrast: 90, contrast: 90,
sepia: 0, sepia: 0,
}, grayscale: 0
{ };
const defaultFixes: DynamicThemeFix = {
css: "",
invert: [], invert: [],
css: ``, ignoreImageAnalysis: [],
disableStyleSheetsProxy: false,
ignoreInlineStyle: [ ignoreInlineStyle: [
".layui-colorpicker-trigger-span", ".layui-colorpicker-trigger-span",
"div.layui-color-picker *", "div.layui-color-picker *",
], ]
ignoreImageAnalysis: [], };
disableStyleSheetsProxy: false,
} Object.assign(defaultPartial, props.darkPartial);
);
} else { if (theme === "dark") {
enableDarkMode(defaultPartial, defaultFixes);
} else if(theme === "light"){
disableDarkMode(); disableDarkMode();
} }
}; };

View File

@ -16,6 +16,7 @@
<li> <li>
<h3>1.0.2 <span class="layui-badge-rim">2022-04-07</span></h3> <h3>1.0.2 <span class="layui-badge-rim">2022-04-07</span></h3>
<ul> <ul>
<li>[新增] config-provider 组件 dark-partial 属性, 夜间主题偏好配置。(by @就眠儀式)</li>
<li>[修复] page 组件 pages 属性为单数时, 页码计算错误。(by @就眠儀式)</li> <li>[修复] page 组件 pages 属性为单数时, 页码计算错误。(by @就眠儀式)</li>
<li>[修复] dark 模式 step 组件线条不显示。(by @莫名点)</li> <li>[修复] dark 模式 step 组件线条不显示。(by @莫名点)</li>
</ul> </ul>

View File

@ -18,3 +18,39 @@
const theme = ref('dark') const theme = ref('dark')
</script> </script>
``` ```
::: title 偏好设置
:::
::: describe 当内置的夜间样式不满足要求时, 我们提供 dark-partial 配置偏好。
:::
```vue
<template>
<lay-config-provider :theme="theme" :dark-partial="darkPartial">
<App />
</lay-config-provider>
</template>
<script setup>
const theme = ref('dark')
const darkPartial = {
brightness: 100,
contrast: 90,
grayscale: 0,
darkSchemeBackgroundColor: "black";
darkSchemeTextColor: "white";
}
</script>
```
::: describe brightness: 亮度
:::
::: describe contrast: 对比度
:::
::: describe grayscale: 灰度值
:::
::: describe darkSchemeBackgroundColor: 背景颜色
:::
::: describe darkSchemeTextColor: 文字颜色
:::

View File

@ -52,6 +52,7 @@ importers:
'@vue/compiler-sfc': ^3.2.31 '@vue/compiler-sfc': ^3.2.31
'@vue/server-renderer': ^3.2.31 '@vue/server-renderer': ^3.2.31
'@vueuse/core': ^7.6.2 '@vueuse/core': ^7.6.2
animate.css: ^4.1.1
async-validator: ^4.0.7 async-validator: ^4.0.7
cropperjs: ^1.5.12 cropperjs: ^1.5.12
darkreader: ^4.9.46 darkreader: ^4.9.46
@ -71,6 +72,7 @@ importers:
xlsx: ^0.18.4 xlsx: ^0.18.4
dependencies: dependencies:
'@vueuse/core': 7.7.1_vue@3.2.31 '@vueuse/core': 7.7.1_vue@3.2.31
animate.css: 4.1.1
async-validator: 4.0.7 async-validator: 4.0.7
cropperjs: 1.5.12 cropperjs: 1.5.12
darkreader: 4.9.46 darkreader: 4.9.46
@ -2071,6 +2073,10 @@ packages:
uri-js: 4.4.1 uri-js: 4.4.1
dev: true dev: true
/animate.css/4.1.1:
resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==}
dev: false
/ansi-escapes/3.2.0: /ansi-escapes/3.2.0:
resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==}
engines: {node: '>=4'} engines: {node: '>=4'}