fix: 猪咪

This commit is contained in:
bietiaop
2025-02-08 23:05:48 +08:00
parent 2e013ed4f5
commit 970a49e2a5
4 changed files with 294 additions and 291 deletions

View File

@@ -14,13 +14,13 @@ export const QQVersionHandler: RequestHandler = (_, res) => {
sendSuccess(res, data);
};
export const GetThemeConfigHandler: RequestHandler = (_, res) => {
const data = WebUiConfig.GetTheme();
export const GetThemeConfigHandler: RequestHandler = async (_, res) => {
const data = await WebUiConfig.GetTheme();
sendSuccess(res, data);
};
export const SetThemeConfigHandler: RequestHandler = (req, res) => {
export const SetThemeConfigHandler: RequestHandler = async (req, res) => {
const { theme } = req.body;
const data = WebUiConfig.UpdateTheme(theme);
sendSuccess(res, data);
await WebUiConfig.UpdateTheme(theme);
sendSuccess(res, { message: '更新成功' });
};

View File

@@ -5,6 +5,9 @@ import fs, { constants } from 'node:fs/promises';
import { resolve } from 'node:path';
import { deepMerge } from '../utils/object';
import { themeType } from '../types/theme';
// 限制尝试端口的次数,避免死循环
// 定义配置的类型
@@ -14,285 +17,7 @@ const WebUiConfigSchema = Type.Object({
token: Type.String({ default: 'napcat' }),
loginRate: Type.Number({ default: 10 }),
autoLoginAccount: Type.String({ default: '' }),
theme: Type.Object(
{
dark: Type.Object(
{
'--heroui-background': Type.String({ default: '0 0% 0%' }),
'--heroui-foreground-50': Type.String({ default: '240 5.88% 10%' }),
'--heroui-foreground-100': Type.String({ default: '240 3.7% 15.88%' }),
'--heroui-foreground-200': Type.String({ default: '240 5.26% 26.08%' }),
'--heroui-foreground-300': Type.String({ default: '240 5.2% 33.92%' }),
'--heroui-foreground-400': Type.String({ default: '240 3.83% 46.08%' }),
'--heroui-foreground-500': Type.String({ default: '240 5.03% 64.9%' }),
'--heroui-foreground-600': Type.String({ default: '240 4.88% 83.92%' }),
'--heroui-foreground-700': Type.String({ default: '240 5.88% 90%' }),
'--heroui-foreground-800': Type.String({ default: '240 4.76% 95.88%' }),
'--heroui-foreground-900': Type.String({ default: '0 0% 98.04%' }),
'--heroui-foreground': Type.String({ default: '210 5.56% 92.94%' }),
'--heroui-focus': Type.String({ default: '212.01999999999998 100% 46.67%' }),
'--heroui-overlay': Type.String({ default: '0 0% 0%' }),
'--heroui-divider': Type.String({ default: '0 0% 100%' }),
'--heroui-divider-opacity': Type.String({ default: '0.15' }),
'--heroui-content1': Type.String({ default: '240 5.88% 10%' }),
'--heroui-content1-foreground': Type.String({ default: '0 0% 98.04%' }),
'--heroui-content2': Type.String({ default: '240 3.7% 15.88%' }),
'--heroui-content2-foreground': Type.String({ default: '240 4.76% 95.88%' }),
'--heroui-content3': Type.String({ default: '240 5.26% 26.08%' }),
'--heroui-content3-foreground': Type.String({ default: '240 5.88% 90%' }),
'--heroui-content4': Type.String({ default: '240 5.2% 33.92%' }),
'--heroui-content4-foreground': Type.String({ default: '240 4.88% 83.92%' }),
'--heroui-default-50': Type.String({ default: '240 5.88% 10%' }),
'--heroui-default-100': Type.String({ default: '240 3.7% 15.88%' }),
'--heroui-default-200': Type.String({ default: '240 5.26% 26.08%' }),
'--heroui-default-300': Type.String({ default: '240 5.2% 33.92%' }),
'--heroui-default-400': Type.String({ default: '240 3.83% 46.08%' }),
'--heroui-default-500': Type.String({ default: '240 5.03% 64.9%' }),
'--heroui-default-600': Type.String({ default: '240 4.88% 83.92%' }),
'--heroui-default-700': Type.String({ default: '240 5.88% 90%' }),
'--heroui-default-800': Type.String({ default: '240 4.76% 95.88%' }),
'--heroui-default-900': Type.String({ default: '0 0% 98.04%' }),
'--heroui-default-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-default': Type.String({ default: '240 5.26% 26.08%' }),
'--heroui-danger-50': Type.String({ default: '301.89 82.61% 22.55%' }),
'--heroui-danger-100': Type.String({ default: '308.18 76.39% 28.24%' }),
'--heroui-danger-200': Type.String({ default: '313.85 70.65% 36.08%' }),
'--heroui-danger-300': Type.String({ default: '319.73 65.64% 44.51%' }),
'--heroui-danger-400': Type.String({ default: '325.82 69.62% 53.53%' }),
'--heroui-danger-500': Type.String({ default: '331.82 75% 65.49%' }),
'--heroui-danger-600': Type.String({ default: '337.84 83.46% 73.92%' }),
'--heroui-danger-700': Type.String({ default: '343.42 90.48% 83.53%' }),
'--heroui-danger-800': Type.String({ default: '350.53 90.48% 91.76%' }),
'--heroui-danger-900': Type.String({ default: '324 90.91% 95.69%' }),
'--heroui-danger-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-danger': Type.String({ default: '325.82 69.62% 53.53%' }),
'--heroui-primary-50': Type.String({ default: '340 84.91% 10.39%' }),
'--heroui-primary-100': Type.String({ default: '339.33 86.54% 20.39%' }),
'--heroui-primary-200': Type.String({ default: '339.11 85.99% 30.78%' }),
'--heroui-primary-300': Type.String({ default: '339 86.54% 40.78%' }),
'--heroui-primary-400': Type.String({ default: '339.2 90.36% 51.18%' }),
'--heroui-primary-500': Type.String({ default: '339 90% 60.78%' }),
'--heroui-primary-600': Type.String({ default: '339.11 90.6% 70.78%' }),
'--heroui-primary-700': Type.String({ default: '339.33 90% 80.39%' }),
'--heroui-primary-800': Type.String({ default: '340 91.84% 90.39%' }),
'--heroui-primary-900': Type.String({ default: '339.13 92% 95.1%' }),
'--heroui-primary-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-primary': Type.String({ default: '339.2 90.36% 51.18%' }),
// 新增 secondary
'--heroui-secondary-50': Type.String({ default: '270 66.67% 9.41%' }),
'--heroui-secondary-100': Type.String({ default: '270 66.67% 18.82%' }),
'--heroui-secondary-200': Type.String({ default: '270 66.67% 28.24%' }),
'--heroui-secondary-300': Type.String({ default: '270 66.67% 37.65%' }),
'--heroui-secondary-400': Type.String({ default: '270 66.67% 47.06%' }),
'--heroui-secondary-500': Type.String({ default: '270 59.26% 57.65%' }),
'--heroui-secondary-600': Type.String({ default: '270 59.26% 68.24%' }),
'--heroui-secondary-700': Type.String({ default: '270 59.26% 78.82%' }),
'--heroui-secondary-800': Type.String({ default: '270 59.26% 89.41%' }),
'--heroui-secondary-900': Type.String({ default: '270 61.54% 94.9%' }),
'--heroui-secondary-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-secondary': Type.String({ default: '270 59.26% 57.65%' }),
// 新增 success
'--heroui-success-50': Type.String({ default: '145.71 77.78% 8.82%' }),
'--heroui-success-100': Type.String({ default: '146.2 79.78% 17.45%' }),
'--heroui-success-200': Type.String({ default: '145.79 79.26% 26.47%' }),
'--heroui-success-300': Type.String({ default: '146.01 79.89% 35.1%' }),
'--heroui-success-400': Type.String({ default: '145.96 79.46% 43.92%' }),
'--heroui-success-500': Type.String({ default: '146.01 62.45% 55.1%' }),
'--heroui-success-600': Type.String({ default: '145.79 62.57% 66.47%' }),
'--heroui-success-700': Type.String({ default: '146.2 61.74% 77.45%' }),
'--heroui-success-800': Type.String({ default: '145.71 61.4% 88.82%' }),
'--heroui-success-900': Type.String({ default: '146.67 64.29% 94.51%' }),
'--heroui-success-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-success': Type.String({ default: '145.96 79.46% 43.92%' }),
// 新增 warning
'--heroui-warning-50': Type.String({ default: '37.14 75% 10.98%' }),
'--heroui-warning-100': Type.String({ default: '37.14 75% 21.96%' }),
'--heroui-warning-200': Type.String({ default: '36.96 73.96% 33.14%' }),
'--heroui-warning-300': Type.String({ default: '37.01 74.22% 44.12%' }),
'--heroui-warning-400': Type.String({ default: '37.03 91.27% 55.1%' }),
'--heroui-warning-500': Type.String({ default: '37.01 91.26% 64.12%' }),
'--heroui-warning-600': Type.String({ default: '36.96 91.24% 73.14%' }),
'--heroui-warning-700': Type.String({ default: '37.14 91.3% 81.96%' }),
'--heroui-warning-800': Type.String({ default: '37.14 91.3% 90.98%' }),
'--heroui-warning-900': Type.String({ default: '54.55 91.67% 95.29%' }),
'--heroui-warning-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-warning': Type.String({ default: '37.03 91.27% 55.1%' }),
// 其它配置
'--heroui-code-background': Type.String({ default: '240 5.56% 7.06%' }),
'--heroui-strong': Type.String({ default: '190.14 94.67% 44.12%' }),
'--heroui-code-mdx': Type.String({ default: '190.14 94.67% 44.12%' }),
'--heroui-divider-weight': Type.String({ default: '1px' }),
'--heroui-disabled-opacity': Type.String({ default: '.5' }),
'--heroui-font-size-tiny': Type.String({ default: '0.75rem' }),
'--heroui-font-size-small': Type.String({ default: '0.875rem' }),
'--heroui-font-size-medium': Type.String({ default: '1rem' }),
'--heroui-font-size-large': Type.String({ default: '1.125rem' }),
'--heroui-line-height-tiny': Type.String({ default: '1rem' }),
'--heroui-line-height-small': Type.String({ default: '1.25rem' }),
'--heroui-line-height-medium': Type.String({ default: '1.5rem' }),
'--heroui-line-height-large': Type.String({ default: '1.75rem' }),
'--heroui-radius-small': Type.String({ default: '8px' }),
'--heroui-radius-medium': Type.String({ default: '12px' }),
'--heroui-radius-large': Type.String({ default: '14px' }),
'--heroui-border-width-small': Type.String({ default: '1px' }),
'--heroui-border-width-medium': Type.String({ default: '2px' }),
'--heroui-border-width-large': Type.String({ default: '3px' }),
'--heroui-box-shadow-small': Type.String({
default:
'0px 0px 5px 0px rgba(0, 0, 0, .05), 0px 2px 10px 0px rgba(0, 0, 0, .2), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)',
}),
'--heroui-box-shadow-medium': Type.String({
default:
'0px 0px 15px 0px rgba(0, 0, 0, .06), 0px 2px 30px 0px rgba(0, 0, 0, .22), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)',
}),
'--heroui-box-shadow-large': Type.String({
default:
'0px 0px 30px 0px rgba(0, 0, 0, .07), 0px 30px 60px 0px rgba(0, 0, 0, .26), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)',
}),
'--heroui-hover-opacity': Type.String({ default: '.9' }),
},
{ default: {} }
),
light: Type.Object(
{
'--heroui-background': Type.String({ default: '0 0% 100%' }),
'--heroui-foreground-50': Type.String({ default: '240 5.88% 95%' }),
'--heroui-foreground-100': Type.String({ default: '240 3.7% 90%' }),
'--heroui-foreground-200': Type.String({ default: '240 5.26% 80%' }),
'--heroui-foreground-300': Type.String({ default: '240 5.2% 70%' }),
'--heroui-foreground-400': Type.String({ default: '240 3.83% 60%' }),
'--heroui-foreground-500': Type.String({ default: '240 5.03% 50%' }),
'--heroui-foreground-600': Type.String({ default: '240 4.88% 40%' }),
'--heroui-foreground-700': Type.String({ default: '240 5.88% 30%' }),
'--heroui-foreground-800': Type.String({ default: '240 4.76% 20%' }),
'--heroui-foreground-900': Type.String({ default: '0 0% 10%' }),
'--heroui-foreground': Type.String({ default: '210 5.56% 7.06%' }),
'--heroui-focus': Type.String({ default: '212.01999999999998 100% 53.33%' }),
'--heroui-overlay': Type.String({ default: '0 0% 100%' }),
'--heroui-divider': Type.String({ default: '0 0% 0%' }),
'--heroui-divider-opacity': Type.String({ default: '0.85' }),
'--heroui-content1': Type.String({ default: '240 5.88% 95%' }),
'--heroui-content1-foreground': Type.String({ default: '0 0% 10%' }),
'--heroui-content2': Type.String({ default: '240 3.7% 90%' }),
'--heroui-content2-foreground': Type.String({ default: '240 4.76% 20%' }),
'--heroui-content3': Type.String({ default: '240 5.26% 80%' }),
'--heroui-content3-foreground': Type.String({ default: '240 5.88% 30%' }),
'--heroui-content4': Type.String({ default: '240 5.2% 70%' }),
'--heroui-content4-foreground': Type.String({ default: '240 4.88% 40%' }),
'--heroui-default-50': Type.String({ default: '240 5.88% 95%' }),
'--heroui-default-100': Type.String({ default: '240 3.7% 90%' }),
'--heroui-default-200': Type.String({ default: '240 5.26% 80%' }),
'--heroui-default-300': Type.String({ default: '240 5.2% 70%' }),
'--heroui-default-400': Type.String({ default: '240 3.83% 60%' }),
'--heroui-default-500': Type.String({ default: '240 5.03% 50%' }),
'--heroui-default-600': Type.String({ default: '240 4.88% 40%' }),
'--heroui-default-700': Type.String({ default: '240 5.88% 30%' }),
'--heroui-default-800': Type.String({ default: '240 4.76% 20%' }),
'--heroui-default-900': Type.String({ default: '0 0% 10%' }),
'--heroui-default-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-default': Type.String({ default: '240 5.26% 80%' }),
'--heroui-danger-50': Type.String({ default: '324 90.91% 95.69%' }),
'--heroui-danger-100': Type.String({ default: '350.53 90.48% 91.76%' }),
'--heroui-danger-200': Type.String({ default: '343.42 90.48% 83.53%' }),
'--heroui-danger-300': Type.String({ default: '337.84 83.46% 73.92%' }),
'--heroui-danger-400': Type.String({ default: '331.82 75% 65.49%' }),
'--heroui-danger-500': Type.String({ default: '325.82 69.62% 53.53%' }),
'--heroui-danger-600': Type.String({ default: '319.73 65.64% 44.51%' }),
'--heroui-danger-700': Type.String({ default: '313.85 70.65% 36.08%' }),
'--heroui-danger-800': Type.String({ default: '308.18 76.39% 28.24%' }),
'--heroui-danger-900': Type.String({ default: '301.89 82.61% 22.55%' }),
'--heroui-danger-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-danger': Type.String({ default: '325.82 69.62% 53.53%' }),
'--heroui-primary-50': Type.String({ default: '339.13 92% 95.1%' }),
'--heroui-primary-100': Type.String({ default: '340 91.84% 90.39%' }),
'--heroui-primary-200': Type.String({ default: '339.33 90% 80.39%' }),
'--heroui-primary-300': Type.String({ default: '339.11 90.6% 70.78%' }),
'--heroui-primary-400': Type.String({ default: '339 90% 60.78%' }),
'--heroui-primary-500': Type.String({ default: '339.2 90.36% 51.18%' }),
'--heroui-primary-600': Type.String({ default: '339 86.54% 40.78%' }),
'--heroui-primary-700': Type.String({ default: '339.11 85.99% 30.78%' }),
'--heroui-primary-800': Type.String({ default: '339.33 86.54% 20.39%' }),
'--heroui-primary-900': Type.String({ default: '340 84.91% 10.39%' }),
'--heroui-primary-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-primary': Type.String({ default: '339.2 90.36% 51.18%' }),
// 新增 secondary
'--heroui-secondary-50': Type.String({ default: '270 61.54% 94.9%' }),
'--heroui-secondary-100': Type.String({ default: '270 59.26% 89.41%' }),
'--heroui-secondary-200': Type.String({ default: '270 59.26% 78.82%' }),
'--heroui-secondary-300': Type.String({ default: '270 59.26% 68.24%' }),
'--heroui-secondary-400': Type.String({ default: '270 59.26% 57.65%' }),
'--heroui-secondary-500': Type.String({ default: '270 66.67% 47.06%' }),
'--heroui-secondary-600': Type.String({ default: '270 66.67% 37.65%' }),
'--heroui-secondary-700': Type.String({ default: '270 66.67% 28.24%' }),
'--heroui-secondary-800': Type.String({ default: '270 66.67% 18.82%' }),
'--heroui-secondary-900': Type.String({ default: '270 66.67% 9.41%' }),
'--heroui-secondary-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-secondary': Type.String({ default: '270 66.67% 47.06%' }),
// 新增 success
'--heroui-success-50': Type.String({ default: '146.67 64.29% 94.51%' }),
'--heroui-success-100': Type.String({ default: '145.71 61.4% 88.82%' }),
'--heroui-success-200': Type.String({ default: '146.2 61.74% 77.45%' }),
'--heroui-success-300': Type.String({ default: '145.79 62.57% 66.47%' }),
'--heroui-success-400': Type.String({ default: '146.01 62.45% 55.1%' }),
'--heroui-success-500': Type.String({ default: '145.96 79.46% 43.92%' }),
'--heroui-success-600': Type.String({ default: '146.01 79.89% 35.1%' }),
'--heroui-success-700': Type.String({ default: '145.79 79.26% 26.47%' }),
'--heroui-success-800': Type.String({ default: '146.2 79.78% 17.45%' }),
'--heroui-success-900': Type.String({ default: '145.71 77.78% 8.82%' }),
'--heroui-success-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-success': Type.String({ default: '145.96 79.46% 43.92%' }),
// 新增 warning
'--heroui-warning-50': Type.String({ default: '54.55 91.67% 95.29%' }),
'--heroui-warning-100': Type.String({ default: '37.14 91.3% 90.98%' }),
'--heroui-warning-200': Type.String({ default: '37.14 91.3% 81.96%' }),
'--heroui-warning-300': Type.String({ default: '36.96 91.24% 73.14%' }),
'--heroui-warning-400': Type.String({ default: '37.01 91.26% 64.12%' }),
'--heroui-warning-500': Type.String({ default: '37.03 91.27% 55.1%' }),
'--heroui-warning-600': Type.String({ default: '37.01 74.22% 44.12%' }),
'--heroui-warning-700': Type.String({ default: '36.96 73.96% 33.14%' }),
'--heroui-warning-800': Type.String({ default: '37.14 75% 21.96%' }),
'--heroui-warning-900': Type.String({ default: '37.14 75% 10.98%' }),
'--heroui-warning-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-warning': Type.String({ default: '37.03 91.27% 55.1%' }),
// 其它配置
'--heroui-code-background': Type.String({ default: '221.25 17.39% 18.04%' }),
'--heroui-strong': Type.String({ default: '316.95 100% 65.29%' }),
'--heroui-code-mdx': Type.String({ default: '316.95 100% 65.29%' }),
'--heroui-divider-weight': Type.String({ default: '1px' }),
'--heroui-disabled-opacity': Type.String({ default: '.5' }),
'--heroui-font-size-tiny': Type.String({ default: '0.75rem' }),
'--heroui-font-size-small': Type.String({ default: '0.875rem' }),
'--heroui-font-size-medium': Type.String({ default: '1rem' }),
'--heroui-font-size-large': Type.String({ default: '1.125rem' }),
'--heroui-line-height-tiny': Type.String({ default: '1rem' }),
'--heroui-line-height-small': Type.String({ default: '1.25rem' }),
'--heroui-line-height-medium': Type.String({ default: '1.5rem' }),
'--heroui-line-height-large': Type.String({ default: '1.75rem' }),
'--heroui-radius-small': Type.String({ default: '8px' }),
'--heroui-radius-medium': Type.String({ default: '12px' }),
'--heroui-radius-large': Type.String({ default: '14px' }),
'--heroui-border-width-small': Type.String({ default: '1px' }),
'--heroui-border-width-medium': Type.String({ default: '2px' }),
'--heroui-border-width-large': Type.String({ default: '3px' }),
'--heroui-box-shadow-small': Type.String({
default:
'0px 0px 5px 0px rgba(0, 0, 0, .02), 0px 2px 10px 0px rgba(0, 0, 0, .06), 0px 0px 1px 0px rgba(0, 0, 0, .3)',
}),
'--heroui-box-shadow-medium': Type.String({
default:
'0px 0px 15px 0px rgba(0, 0, 0, .03), 0px 2px 30px 0px rgba(0, 0, 0, .08), 0px 0px 1px 0px rgba(0, 0, 0, .3)',
}),
'--heroui-box-shadow-large': Type.String({
default:
'0px 0px 30px 0px rgba(0, 0, 0, .04), 0px 30px 60px 0px rgba(0, 0, 0, .12), 0px 0px 1px 0px rgba(0, 0, 0, .3)',
}),
'--heroui-hover-opacity': Type.String({ default: '.8' }),
},
{ default: {} }
),
},
{ default: {} }
),
theme: themeType,
});
export type WebUiConfigType = Static<typeof WebUiConfigSchema>;
@@ -352,7 +77,8 @@ export class WebUiConfigWrapper {
async UpdateWebUIConfig(newConfig: Partial<WebUiConfigType>): Promise<void> {
const configPath = resolve(webUiPathWrapper.configPath, './webui.json');
const currentConfig = await this.GetWebUIConfig();
const updatedConfig = this.validateAndApplyDefaults({ ...currentConfig, ...newConfig });
const mergedConfig = deepMerge({ ...currentConfig }, newConfig);
const updatedConfig = this.validateAndApplyDefaults(mergedConfig);
await this.writeConfig(configPath, updatedConfig);
this.WebUiConfigData = updatedConfig;
}
@@ -442,12 +168,7 @@ export class WebUiConfigWrapper {
// 获取主题内容
async GetTheme(): Promise<WebUiConfigType['theme']> {
const config = await this.GetWebUIConfig();
if (!config.theme || Object.keys(config.theme).length === 0) {
const defaultConfig = this.validateAndApplyDefaults({});
config.theme = defaultConfig.theme;
// 更新配置文件中的 theme 字段
await this.UpdateWebUIConfig({ theme: config.theme });
}
return config.theme;
}

View File

@@ -0,0 +1,260 @@
import { Type } from '@sinclair/typebox';
export const themeType = Type.Object(
{
dark: Type.Record(Type.String(), Type.String()),
light: Type.Record(Type.String(), Type.String()),
},
{
default: {
dark: {
'--heroui-background': '0 0% 0%',
'--heroui-foreground-50': '240 5.88% 10%',
'--heroui-foreground-100': '240 3.7% 15.88%',
'--heroui-foreground-200': '240 5.26% 26.08%',
'--heroui-foreground-300': '240 5.2% 33.92%',
'--heroui-foreground-400': '240 3.83% 46.08%',
'--heroui-foreground-500': '240 5.03% 64.9%',
'--heroui-foreground-600': '240 4.88% 83.92%',
'--heroui-foreground-700': '240 5.88% 90%',
'--heroui-foreground-800': '240 4.76% 95.88%',
'--heroui-foreground-900': '0 0% 98.04%',
'--heroui-foreground': '210 5.56% 92.94%',
'--heroui-focus': '212.01999999999998 100% 46.67%',
'--heroui-overlay': '0 0% 0%',
'--heroui-divider': '0 0% 100%',
'--heroui-divider-opacity': '0.15',
'--heroui-content1': '240 5.88% 10%',
'--heroui-content1-foreground': '0 0% 98.04%',
'--heroui-content2': '240 3.7% 15.88%',
'--heroui-content2-foreground': '240 4.76% 95.88%',
'--heroui-content3': '240 5.26% 26.08%',
'--heroui-content3-foreground': '240 5.88% 90%',
'--heroui-content4': '240 5.2% 33.92%',
'--heroui-content4-foreground': '240 4.88% 83.92%',
'--heroui-default-50': '240 5.88% 10%',
'--heroui-default-100': '240 3.7% 15.88%',
'--heroui-default-200': '240 5.26% 26.08%',
'--heroui-default-300': '240 5.2% 33.92%',
'--heroui-default-400': '240 3.83% 46.08%',
'--heroui-default-500': '240 5.03% 64.9%',
'--heroui-default-600': '240 4.88% 83.92%',
'--heroui-default-700': '240 5.88% 90%',
'--heroui-default-800': '240 4.76% 95.88%',
'--heroui-default-900': '0 0% 98.04%',
'--heroui-default-foreground': '0 0% 100%',
'--heroui-default': '240 5.26% 26.08%',
'--heroui-danger-50': '301.89 82.61% 22.55%',
'--heroui-danger-100': '308.18 76.39% 28.24%',
'--heroui-danger-200': '313.85 70.65% 36.08%',
'--heroui-danger-300': '319.73 65.64% 44.51%',
'--heroui-danger-400': '325.82 69.62% 53.53%',
'--heroui-danger-500': '331.82 75% 65.49%',
'--heroui-danger-600': '337.84 83.46% 73.92%',
'--heroui-danger-700': '343.42 90.48% 83.53%',
'--heroui-danger-800': '350.53 90.48% 91.76%',
'--heroui-danger-900': '324 90.91% 95.69%',
'--heroui-danger-foreground': '0 0% 100%',
'--heroui-danger': '325.82 69.62% 53.53%',
'--heroui-primary-50': '340 84.91% 10.39%',
'--heroui-primary-100': '339.33 86.54% 20.39%',
'--heroui-primary-200': '339.11 85.99% 30.78%',
'--heroui-primary-300': '339 86.54% 40.78%',
'--heroui-primary-400': '339.2 90.36% 51.18%',
'--heroui-primary-500': '339 90% 60.78%',
'--heroui-primary-600': '339.11 90.6% 70.78%',
'--heroui-primary-700': '339.33 90% 80.39%',
'--heroui-primary-800': '340 91.84% 90.39%',
'--heroui-primary-900': '339.13 92% 95.1%',
'--heroui-primary-foreground': '0 0% 100%',
'--heroui-primary': '339.2 90.36% 51.18%',
'--heroui-secondary-50': '270 66.67% 9.41%',
'--heroui-secondary-100': '270 66.67% 18.82%',
'--heroui-secondary-200': '270 66.67% 28.24%',
'--heroui-secondary-300': '270 66.67% 37.65%',
'--heroui-secondary-400': '270 66.67% 47.06%',
'--heroui-secondary-500': '270 59.26% 57.65%',
'--heroui-secondary-600': '270 59.26% 68.24%',
'--heroui-secondary-700': '270 59.26% 78.82%',
'--heroui-secondary-800': '270 59.26% 89.41%',
'--heroui-secondary-900': '270 61.54% 94.9%',
'--heroui-secondary-foreground': '0 0% 100%',
'--heroui-secondary': '270 59.26% 57.65%',
'--heroui-success-50': '145.71 77.78% 8.82%',
'--heroui-success-100': '146.2 79.78% 17.45%',
'--heroui-success-200': '145.79 79.26% 26.47%',
'--heroui-success-300': '146.01 79.89% 35.1%',
'--heroui-success-400': '145.96 79.46% 43.92%',
'--heroui-success-500': '146.01 62.45% 55.1%',
'--heroui-success-600': '145.79 62.57% 66.47%',
'--heroui-success-700': '146.2 61.74% 77.45%',
'--heroui-success-800': '145.71 61.4% 88.82%',
'--heroui-success-900': '146.67 64.29% 94.51%',
'--heroui-success-foreground': '0 0% 0%',
'--heroui-success': '145.96 79.46% 43.92%',
'--heroui-warning-50': '37.14 75% 10.98%',
'--heroui-warning-100': '37.14 75% 21.96%',
'--heroui-warning-200': '36.96 73.96% 33.14%',
'--heroui-warning-300': '37.01 74.22% 44.12%',
'--heroui-warning-400': '37.03 91.27% 55.1%',
'--heroui-warning-500': '37.01 91.26% 64.12%',
'--heroui-warning-600': '36.96 91.24% 73.14%',
'--heroui-warning-700': '37.14 91.3% 81.96%',
'--heroui-warning-800': '37.14 91.3% 90.98%',
'--heroui-warning-900': '54.55 91.67% 95.29%',
'--heroui-warning-foreground': '0 0% 0%',
'--heroui-warning': '37.03 91.27% 55.1%',
'--heroui-code-background': '240 5.56% 7.06%',
'--heroui-strong': '190.14 94.67% 44.12%',
'--heroui-code-mdx': '190.14 94.67% 44.12%',
'--heroui-divider-weight': '1px',
'--heroui-disabled-opacity': '.5',
'--heroui-font-size-tiny': '0.75rem',
'--heroui-font-size-small': '0.875rem',
'--heroui-font-size-medium': '1rem',
'--heroui-font-size-large': '1.125rem',
'--heroui-line-height-tiny': '1rem',
'--heroui-line-height-small': '1.25rem',
'--heroui-line-height-medium': '1.5rem',
'--heroui-line-height-large': '1.75rem',
'--heroui-radius-small': '8px',
'--heroui-radius-medium': '12px',
'--heroui-radius-large': '14px',
'--heroui-border-width-small': '1px',
'--heroui-border-width-medium': '2px',
'--heroui-border-width-large': '3px',
'--heroui-box-shadow-small':
'0px 0px 5px 0px rgba(0, 0, 0, .05), 0px 2px 10px 0px rgba(0, 0, 0, .2), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)',
'--heroui-box-shadow-medium':
'0px 0px 15px 0px rgba(0, 0, 0, .06), 0px 2px 30px 0px rgba(0, 0, 0, .22), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)',
'--heroui-box-shadow-large':
'0px 0px 30px 0px rgba(0, 0, 0, .07), 0px 30px 60px 0px rgba(0, 0, 0, .26), inset 0px 0px 1px 0px hsla(0, 0%, 100%, .15)',
'--heroui-hover-opacity': '.9',
},
light: {
'--heroui-background': '0 0% 100%',
'--heroui-foreground-50': '240 5.88% 95%',
'--heroui-foreground-100': '240 3.7% 90%',
'--heroui-foreground-200': '240 5.26% 80%',
'--heroui-foreground-300': '240 5.2% 70%',
'--heroui-foreground-400': '240 3.83% 60%',
'--heroui-foreground-500': '240 5.03% 50%',
'--heroui-foreground-600': '240 4.88% 40%',
'--heroui-foreground-700': '240 5.88% 30%',
'--heroui-foreground-800': '240 4.76% 20%',
'--heroui-foreground-900': '0 0% 10%',
'--heroui-foreground': '210 5.56% 7.06%',
'--heroui-focus': '212.01999999999998 100% 53.33%',
'--heroui-overlay': '0 0% 100%',
'--heroui-divider': '0 0% 0%',
'--heroui-divider-opacity': '0.85',
'--heroui-content1': '240 5.88% 95%',
'--heroui-content1-foreground': '0 0% 10%',
'--heroui-content2': '240 3.7% 90%',
'--heroui-content2-foreground': '240 4.76% 20%',
'--heroui-content3': '240 5.26% 80%',
'--heroui-content3-foreground': '240 5.88% 30%',
'--heroui-content4': '240 5.2% 70%',
'--heroui-content4-foreground': '240 4.88% 40%',
'--heroui-default-50': '240 5.88% 95%',
'--heroui-default-100': '240 3.7% 90%',
'--heroui-default-200': '240 5.26% 80%',
'--heroui-default-300': '240 5.2% 70%',
'--heroui-default-400': '240 3.83% 60%',
'--heroui-default-500': '240 5.03% 50%',
'--heroui-default-600': '240 4.88% 40%',
'--heroui-default-700': '240 5.88% 30%',
'--heroui-default-800': '240 4.76% 20%',
'--heroui-default-900': '0 0% 10%',
'--heroui-default-foreground': '0 0% 0%',
'--heroui-default': '240 5.26% 80%',
'--heroui-danger-50': '324 90.91% 95.69%',
'--heroui-danger-100': '350.53 90.48% 91.76%',
'--heroui-danger-200': '343.42 90.48% 83.53%',
'--heroui-danger-300': '337.84 83.46% 73.92%',
'--heroui-danger-400': '331.82 75% 65.49%',
'--heroui-danger-500': '325.82 69.62% 53.53%',
'--heroui-danger-600': '319.73 65.64% 44.51%',
'--heroui-danger-700': '313.85 70.65% 36.08%',
'--heroui-danger-800': '308.18 76.39% 28.24%',
'--heroui-danger-900': '301.89 82.61% 22.55%',
'--heroui-danger-foreground': '0 0% 100%',
'--heroui-danger': '325.82 69.62% 53.53%',
'--heroui-primary-50': '339.13 92% 95.1%',
'--heroui-primary-100': '340 91.84% 90.39%',
'--heroui-primary-200': '339.33 90% 80.39%',
'--heroui-primary-300': '339.11 90.6% 70.78%',
'--heroui-primary-400': '339 90% 60.78%',
'--heroui-primary-500': '339.2 90.36% 51.18%',
'--heroui-primary-600': '339 86.54% 40.78%',
'--heroui-primary-700': '339.11 85.99% 30.78%',
'--heroui-primary-800': '339.33 86.54% 20.39%',
'--heroui-primary-900': '340 84.91% 10.39%',
'--heroui-primary-foreground': '0 0% 100%',
'--heroui-primary': '339.2 90.36% 51.18%',
'--heroui-secondary-50': '270 61.54% 94.9%',
'--heroui-secondary-100': '270 59.26% 89.41%',
'--heroui-secondary-200': '270 59.26% 78.82%',
'--heroui-secondary-300': '270 59.26% 68.24%',
'--heroui-secondary-400': '270 59.26% 57.65%',
'--heroui-secondary-500': '270 66.67% 47.06%',
'--heroui-secondary-600': '270 66.67% 37.65%',
'--heroui-secondary-700': '270 66.67% 28.24%',
'--heroui-secondary-800': '270 66.67% 18.82%',
'--heroui-secondary-900': '270 66.67% 9.41%',
'--heroui-secondary-foreground': '0 0% 100%',
'--heroui-secondary': '270 66.67% 47.06%',
'--heroui-success-50': '146.67 64.29% 94.51%',
'--heroui-success-100': '145.71 61.4% 88.82%',
'--heroui-success-200': '146.2 61.74% 77.45%',
'--heroui-success-300': '145.79 62.57% 66.47%',
'--heroui-success-400': '146.01 62.45% 55.1%',
'--heroui-success-500': '145.96 79.46% 43.92%',
'--heroui-success-600': '146.01 79.89% 35.1%',
'--heroui-success-700': '145.79 79.26% 26.47%',
'--heroui-success-800': '146.2 79.78% 17.45%',
'--heroui-success-900': '145.71 77.78% 8.82%',
'--heroui-success-foreground': '0 0% 0%',
'--heroui-success': '145.96 79.46% 43.92%',
'--heroui-warning-50': '54.55 91.67% 95.29%',
'--heroui-warning-100': '37.14 91.3% 90.98%',
'--heroui-warning-200': '37.14 91.3% 81.96%',
'--heroui-warning-300': '36.96 91.24% 73.14%',
'--heroui-warning-400': '37.01 91.26% 64.12%',
'--heroui-warning-500': '37.03 91.27% 55.1%',
'--heroui-warning-600': '37.01 74.22% 44.12%',
'--heroui-warning-700': '36.96 73.96% 33.14%',
'--heroui-warning-800': '37.14 75% 21.96%',
'--heroui-warning-900': '37.14 75% 10.98%',
'--heroui-warning-foreground': '0 0% 0%',
'--heroui-warning': '37.03 91.27% 55.1%',
'--heroui-code-background': '221.25 17.39% 18.04%',
'--heroui-strong': '316.95 100% 65.29%',
'--heroui-code-mdx': '316.95 100% 65.29%',
'--heroui-divider-weight': '1px',
'--heroui-disabled-opacity': '.5',
'--heroui-font-size-tiny': '0.75rem',
'--heroui-font-size-small': '0.875rem',
'--heroui-font-size-medium': '1rem',
'--heroui-font-size-large': '1.125rem',
'--heroui-line-height-tiny': '1rem',
'--heroui-line-height-small': '1.25rem',
'--heroui-line-height-medium': '1.5rem',
'--heroui-line-height-large': '1.75rem',
'--heroui-radius-small': '8px',
'--heroui-radius-medium': '12px',
'--heroui-radius-large': '14px',
'--heroui-border-width-small': '1px',
'--heroui-border-width-medium': '2px',
'--heroui-border-width-large': '3px',
'--heroui-box-shadow-small':
'0px 0px 5px 0px rgba(0, 0, 0, .02), 0px 2px 10px 0px rgba(0, 0, 0, .06), 0px 0px 1px 0px rgba(0, 0, 0, .3)',
'--heroui-box-shadow-medium':
'0px 0px 15px 0px rgba(0, 0, 0, .03), 0px 2px 30px 0px rgba(0, 0, 0, .08), 0px 0px 1px 0px rgba(0, 0, 0, .3)',
'--heroui-box-shadow-large':
'0px 0px 30px 0px rgba(0, 0, 0, .04), 0px 30px 60px 0px rgba(0, 0, 0, .12), 0px 0px 1px 0px rgba(0, 0, 0, .3)',
'--heroui-hover-opacity': '.8',
},
},
}
);

View File

@@ -0,0 +1,22 @@
export function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {
for (const key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
// 如果 source[key] 为 undefined则跳过保留 target[key]
if (source[key] === undefined) {
continue;
}
if (
target[key] !== undefined &&
typeof target[key] === 'object' &&
!Array.isArray(target[key]) &&
typeof source[key] === 'object' &&
!Array.isArray(source[key])
) {
target[key] = deepMerge({ ...target[key] }, source[key]!) as T[Extract<keyof T, string>];
} else {
target[key] = source[key]! as T[Extract<keyof T, string>];
}
}
}
return target;
}