This commit is contained in:
bietiaop
2025-02-08 22:43:53 +08:00
parent f8c396b1fe
commit 2e013ed4f5
7 changed files with 444 additions and 278 deletions

View File

@@ -64,6 +64,7 @@
"qrcode.react": "^4.2.0", "qrcode.react": "^4.2.0",
"quill": "^2.0.3", "quill": "^2.0.3",
"react": "^19.0.0", "react": "^19.0.0",
"react-color": "^2.19.3",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"react-dropzone": "^14.3.5", "react-dropzone": "^14.3.5",
"react-error-boundary": "^5.0.0", "react-error-boundary": "^5.0.0",

View File

@@ -0,0 +1,40 @@
import { Popover, PopoverContent, PopoverTrigger } from '@heroui/popover'
import React from 'react'
import { ColorResult, SketchPicker } from 'react-color'
// 假定 heroui 提供的 Popover组件
interface ColorPickerProps {
color: string
onChange: (color: string) => void
}
const ColorPicker: React.FC<ColorPickerProps> = ({ color, onChange }) => {
const handleChange = (colorResult: ColorResult) => {
const hsl = colorResult.hsl
const color = `${hsl.h} ${hsl.s}% ${hsl.l}%`
onChange(color)
}
return (
<Popover>
<PopoverTrigger>
<div
style={{
background: color,
width: 36,
height: 14,
borderRadius: 2,
cursor: 'pointer',
border: '1px solid #ddd'
}}
/>
</PopoverTrigger>
<PopoverContent>
<SketchPicker color={color} onChange={handleChange} />
</PopoverContent>
</Popover>
)
}
export default ColorPicker

View File

@@ -6,6 +6,7 @@ import { useNavigate, useSearchParams } from 'react-router-dom'
import ChangePasswordCard from './change_password' import ChangePasswordCard from './change_password'
import LoginConfigCard from './login' import LoginConfigCard from './login'
import OneBotConfigCard from './onebot' import OneBotConfigCard from './onebot'
import ThemeConfigCard from './theme'
import WebUIConfigCard from './webui' import WebUIConfigCard from './webui'
export interface ConfigPageProps { export interface ConfigPageProps {
@@ -58,7 +59,6 @@ export default function ConfigPage() {
<WebUIConfigCard /> <WebUIConfigCard />
</ConfingPageItem> </ConfingPageItem>
</Tab> </Tab>
<Tab title="登录配置" key="login"> <Tab title="登录配置" key="login">
<ConfingPageItem> <ConfingPageItem>
<LoginConfigCard /> <LoginConfigCard />
@@ -69,6 +69,12 @@ export default function ConfigPage() {
<ChangePasswordCard /> <ChangePasswordCard />
</ConfingPageItem> </ConfingPageItem>
</Tab> </Tab>
<Tab title="主题配置" key="theme">
<ConfingPageItem>
<ThemeConfigCard />
</ConfingPageItem>
</Tab>
</Tabs> </Tabs>
</section> </section>
) )

View File

@@ -47,11 +47,11 @@ const LoginConfigCard = () => {
} }
}) })
const onRefresh = async (shotTip = true) => { const onRefresh = async () => {
try { try {
setLoading(true) setLoading(true)
await refreshQuickLogin() await refreshQuickLogin()
if (shotTip) toast.success('刷新成功') toast.success('刷新成功')
} catch (error) { } catch (error) {
const msg = (error as Error).message const msg = (error as Error).message
toast.error(`刷新失败: ${msg}`) toast.error(`刷新失败: ${msg}`)
@@ -64,10 +64,6 @@ const LoginConfigCard = () => {
reset() reset()
}, [quickLoginData]) }, [quickLoginData])
useEffect(() => {
onRefresh(false)
}, [])
if (loading) return <PageLoading loading={true} /> if (loading) return <PageLoading loading={true} />
return ( return (

View File

@@ -0,0 +1,106 @@
import { useRequest } from 'ahooks'
import { useEffect } from 'react'
import { Controller, useForm } from 'react-hook-form'
import toast from 'react-hot-toast'
import ColorPicker from '@/components/ColorPicker'
import SaveButtons from '@/components/button/save_buttons'
import PageLoading from '@/components/page_loading'
import WebUIManager from '@/controllers/webui_manager'
const ThemeConfigCard = () => {
const { data, loading, error, refreshAsync } = useRequest(
WebUIManager.getThemeConfig
)
const {
control,
handleSubmit: handleOnebotSubmit,
formState: { isSubmitting },
setValue: setOnebotValue
} = useForm<{
theme: ThemeConfig
}>({
defaultValues: {
theme: {
dark: {},
light: {}
}
}
})
const reset = () => {
if (data) setOnebotValue('theme', data)
}
const onSubmit = handleOnebotSubmit((data) => {
try {
WebUIManager.setThemeConfig(data.theme)
toast.success('保存成功')
} catch (error) {
const msg = (error as Error).message
toast.error(`保存失败: ${msg}`)
}
})
const onRefresh = async () => {
try {
await refreshAsync()
toast.success('刷新成功')
} catch (error) {
const msg = (error as Error).message
toast.error(`刷新失败: ${msg}`)
}
}
if (loading) return <PageLoading loading={true} />
if (error)
return (
<div className="py-24 text-danger-500 text-center">{error.message}</div>
)
const colorKeys = [
'--heroui-background',
'--heroui-primary',
'--heroui-danger'
] as const
return (
<>
<title> - NapCat WebUI</title>
<div className="flex-shrink-0 w-full"></div>
{(['dark', 'light'] as const).map((mode) => (
<div key={mode}>
<h3>{mode === 'dark' ? '暗色主题' : '亮色主题'}</h3>
{colorKeys.map((key) => (
<div
key={key}
style={{ display: 'flex', alignItems: 'center', marginBottom: 8 }}
>
<label style={{ width: 150 }}>{key}</label>
<Controller
control={control}
name={`theme.${mode}.${key}`}
render={({ field: { value, onChange } }) => {
console.log(value)
const hslArray = value?.split(' ') ?? [0, 0, 0]
const color = `hsl(${hslArray[0]}, ${hslArray[1]}, ${hslArray[2]})`
return <ColorPicker color={color} onChange={onChange} />
}}
/>
</div>
))}
</div>
))}
<SaveButtons
onSubmit={onSubmit}
reset={reset}
isSubmitting={isSubmitting}
refresh={onRefresh}
/>
</>
)
}
export default ThemeConfigCard

View File

@@ -33,6 +33,7 @@
"@types/multer": "^1.4.12", "@types/multer": "^1.4.12",
"@types/node": "^22.0.1", "@types/node": "^22.0.1",
"@types/qrcode-terminal": "^0.12.2", "@types/qrcode-terminal": "^0.12.2",
"@types/react-color": "^3.0.13",
"@types/ws": "^8.5.12", "@types/ws": "^8.5.12",
"@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/eslint-plugin": "^8.3.0",
"@typescript-eslint/parser": "^8.3.0", "@typescript-eslint/parser": "^8.3.0",

View File

@@ -14,276 +14,285 @@ const WebUiConfigSchema = Type.Object({
token: Type.String({ default: 'napcat' }), token: Type.String({ default: 'napcat' }),
loginRate: Type.Number({ default: 10 }), loginRate: Type.Number({ default: 10 }),
autoLoginAccount: Type.String({ default: '' }), autoLoginAccount: Type.String({ default: '' }),
theme: Type.Object({ theme: Type.Object(
dark: Type.Object({ {
'--heroui-background': Type.String({ default: '0 0% 0%' }), dark: Type.Object(
'--heroui-foreground-50': Type.String({ default: '240 5.88% 10%' }), {
'--heroui-foreground-100': Type.String({ default: '240 3.7% 15.88%' }), '--heroui-background': Type.String({ default: '0 0% 0%' }),
'--heroui-foreground-200': Type.String({ default: '240 5.26% 26.08%' }), '--heroui-foreground-50': Type.String({ default: '240 5.88% 10%' }),
'--heroui-foreground-300': Type.String({ default: '240 5.2% 33.92%' }), '--heroui-foreground-100': Type.String({ default: '240 3.7% 15.88%' }),
'--heroui-foreground-400': Type.String({ default: '240 3.83% 46.08%' }), '--heroui-foreground-200': Type.String({ default: '240 5.26% 26.08%' }),
'--heroui-foreground-500': Type.String({ default: '240 5.03% 64.9%' }), '--heroui-foreground-300': Type.String({ default: '240 5.2% 33.92%' }),
'--heroui-foreground-600': Type.String({ default: '240 4.88% 83.92%' }), '--heroui-foreground-400': Type.String({ default: '240 3.83% 46.08%' }),
'--heroui-foreground-700': Type.String({ default: '240 5.88% 90%' }), '--heroui-foreground-500': Type.String({ default: '240 5.03% 64.9%' }),
'--heroui-foreground-800': Type.String({ default: '240 4.76% 95.88%' }), '--heroui-foreground-600': Type.String({ default: '240 4.88% 83.92%' }),
'--heroui-foreground-900': Type.String({ default: '0 0% 98.04%' }), '--heroui-foreground-700': Type.String({ default: '240 5.88% 90%' }),
'--heroui-foreground': Type.String({ default: '210 5.56% 92.94%' }), '--heroui-foreground-800': Type.String({ default: '240 4.76% 95.88%' }),
'--heroui-focus': Type.String({ default: '212.01999999999998 100% 46.67%' }), '--heroui-foreground-900': Type.String({ default: '0 0% 98.04%' }),
'--heroui-overlay': Type.String({ default: '0 0% 0%' }), '--heroui-foreground': Type.String({ default: '210 5.56% 92.94%' }),
'--heroui-divider': Type.String({ default: '0 0% 100%' }), '--heroui-focus': Type.String({ default: '212.01999999999998 100% 46.67%' }),
'--heroui-divider-opacity': Type.String({ default: '0.15' }), '--heroui-overlay': Type.String({ default: '0 0% 0%' }),
'--heroui-content1': Type.String({ default: '240 5.88% 10%' }), '--heroui-divider': Type.String({ default: '0 0% 100%' }),
'--heroui-content1-foreground': Type.String({ default: '0 0% 98.04%' }), '--heroui-divider-opacity': Type.String({ default: '0.15' }),
'--heroui-content2': Type.String({ default: '240 3.7% 15.88%' }), '--heroui-content1': Type.String({ default: '240 5.88% 10%' }),
'--heroui-content2-foreground': Type.String({ default: '240 4.76% 95.88%' }), '--heroui-content1-foreground': Type.String({ default: '0 0% 98.04%' }),
'--heroui-content3': Type.String({ default: '240 5.26% 26.08%' }), '--heroui-content2': Type.String({ default: '240 3.7% 15.88%' }),
'--heroui-content3-foreground': Type.String({ default: '240 5.88% 90%' }), '--heroui-content2-foreground': Type.String({ default: '240 4.76% 95.88%' }),
'--heroui-content4': Type.String({ default: '240 5.2% 33.92%' }), '--heroui-content3': Type.String({ default: '240 5.26% 26.08%' }),
'--heroui-content4-foreground': Type.String({ default: '240 4.88% 83.92%' }), '--heroui-content3-foreground': Type.String({ default: '240 5.88% 90%' }),
'--heroui-default-50': Type.String({ default: '240 5.88% 10%' }), '--heroui-content4': Type.String({ default: '240 5.2% 33.92%' }),
'--heroui-default-100': Type.String({ default: '240 3.7% 15.88%' }), '--heroui-content4-foreground': Type.String({ default: '240 4.88% 83.92%' }),
'--heroui-default-200': Type.String({ default: '240 5.26% 26.08%' }), '--heroui-default-50': Type.String({ default: '240 5.88% 10%' }),
'--heroui-default-300': Type.String({ default: '240 5.2% 33.92%' }), '--heroui-default-100': Type.String({ default: '240 3.7% 15.88%' }),
'--heroui-default-400': Type.String({ default: '240 3.83% 46.08%' }), '--heroui-default-200': Type.String({ default: '240 5.26% 26.08%' }),
'--heroui-default-500': Type.String({ default: '240 5.03% 64.9%' }), '--heroui-default-300': Type.String({ default: '240 5.2% 33.92%' }),
'--heroui-default-600': Type.String({ default: '240 4.88% 83.92%' }), '--heroui-default-400': Type.String({ default: '240 3.83% 46.08%' }),
'--heroui-default-700': Type.String({ default: '240 5.88% 90%' }), '--heroui-default-500': Type.String({ default: '240 5.03% 64.9%' }),
'--heroui-default-800': Type.String({ default: '240 4.76% 95.88%' }), '--heroui-default-600': Type.String({ default: '240 4.88% 83.92%' }),
'--heroui-default-900': Type.String({ default: '0 0% 98.04%' }), '--heroui-default-700': Type.String({ default: '240 5.88% 90%' }),
'--heroui-default-foreground': Type.String({ default: '0 0% 100%' }), '--heroui-default-800': Type.String({ default: '240 4.76% 95.88%' }),
'--heroui-default': Type.String({ default: '240 5.26% 26.08%' }), '--heroui-default-900': Type.String({ default: '0 0% 98.04%' }),
'--heroui-danger-50': Type.String({ default: '301.89 82.61% 22.55%' }), '--heroui-default-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-danger-100': Type.String({ default: '308.18 76.39% 28.24%' }), '--heroui-default': Type.String({ default: '240 5.26% 26.08%' }),
'--heroui-danger-200': Type.String({ default: '313.85 70.65% 36.08%' }), '--heroui-danger-50': Type.String({ default: '301.89 82.61% 22.55%' }),
'--heroui-danger-300': Type.String({ default: '319.73 65.64% 44.51%' }), '--heroui-danger-100': Type.String({ default: '308.18 76.39% 28.24%' }),
'--heroui-danger-400': Type.String({ default: '325.82 69.62% 53.53%' }), '--heroui-danger-200': Type.String({ default: '313.85 70.65% 36.08%' }),
'--heroui-danger-500': Type.String({ default: '331.82 75% 65.49%' }), '--heroui-danger-300': Type.String({ default: '319.73 65.64% 44.51%' }),
'--heroui-danger-600': Type.String({ default: '337.84 83.46% 73.92%' }), '--heroui-danger-400': Type.String({ default: '325.82 69.62% 53.53%' }),
'--heroui-danger-700': Type.String({ default: '343.42 90.48% 83.53%' }), '--heroui-danger-500': Type.String({ default: '331.82 75% 65.49%' }),
'--heroui-danger-800': Type.String({ default: '350.53 90.48% 91.76%' }), '--heroui-danger-600': Type.String({ default: '337.84 83.46% 73.92%' }),
'--heroui-danger-900': Type.String({ default: '324 90.91% 95.69%' }), '--heroui-danger-700': Type.String({ default: '343.42 90.48% 83.53%' }),
'--heroui-danger-foreground': Type.String({ default: '0 0% 100%' }), '--heroui-danger-800': Type.String({ default: '350.53 90.48% 91.76%' }),
'--heroui-danger': Type.String({ default: '325.82 69.62% 53.53%' }), '--heroui-danger-900': Type.String({ default: '324 90.91% 95.69%' }),
'--heroui-primary-50': Type.String({ default: '340 84.91% 10.39%' }), '--heroui-danger-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-primary-100': Type.String({ default: '339.33 86.54% 20.39%' }), '--heroui-danger': Type.String({ default: '325.82 69.62% 53.53%' }),
'--heroui-primary-200': Type.String({ default: '339.11 85.99% 30.78%' }), '--heroui-primary-50': Type.String({ default: '340 84.91% 10.39%' }),
'--heroui-primary-300': Type.String({ default: '339 86.54% 40.78%' }), '--heroui-primary-100': Type.String({ default: '339.33 86.54% 20.39%' }),
'--heroui-primary-400': Type.String({ default: '339.2 90.36% 51.18%' }), '--heroui-primary-200': Type.String({ default: '339.11 85.99% 30.78%' }),
'--heroui-primary-500': Type.String({ default: '339 90% 60.78%' }), '--heroui-primary-300': Type.String({ default: '339 86.54% 40.78%' }),
'--heroui-primary-600': Type.String({ default: '339.11 90.6% 70.78%' }), '--heroui-primary-400': Type.String({ default: '339.2 90.36% 51.18%' }),
'--heroui-primary-700': Type.String({ default: '339.33 90% 80.39%' }), '--heroui-primary-500': Type.String({ default: '339 90% 60.78%' }),
'--heroui-primary-800': Type.String({ default: '340 91.84% 90.39%' }), '--heroui-primary-600': Type.String({ default: '339.11 90.6% 70.78%' }),
'--heroui-primary-900': Type.String({ default: '339.13 92% 95.1%' }), '--heroui-primary-700': Type.String({ default: '339.33 90% 80.39%' }),
'--heroui-primary-foreground': Type.String({ default: '0 0% 100%' }), '--heroui-primary-800': Type.String({ default: '340 91.84% 90.39%' }),
'--heroui-primary': Type.String({ default: '339.2 90.36% 51.18%' }), '--heroui-primary-900': Type.String({ default: '339.13 92% 95.1%' }),
// 新增 secondary '--heroui-primary-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-secondary-50': Type.String({ default: '270 66.67% 9.41%' }), '--heroui-primary': Type.String({ default: '339.2 90.36% 51.18%' }),
'--heroui-secondary-100': Type.String({ default: '270 66.67% 18.82%' }), // 新增 secondary
'--heroui-secondary-200': Type.String({ default: '270 66.67% 28.24%' }), '--heroui-secondary-50': Type.String({ default: '270 66.67% 9.41%' }),
'--heroui-secondary-300': Type.String({ default: '270 66.67% 37.65%' }), '--heroui-secondary-100': Type.String({ default: '270 66.67% 18.82%' }),
'--heroui-secondary-400': Type.String({ default: '270 66.67% 47.06%' }), '--heroui-secondary-200': Type.String({ default: '270 66.67% 28.24%' }),
'--heroui-secondary-500': Type.String({ default: '270 59.26% 57.65%' }), '--heroui-secondary-300': Type.String({ default: '270 66.67% 37.65%' }),
'--heroui-secondary-600': Type.String({ default: '270 59.26% 68.24%' }), '--heroui-secondary-400': Type.String({ default: '270 66.67% 47.06%' }),
'--heroui-secondary-700': Type.String({ default: '270 59.26% 78.82%' }), '--heroui-secondary-500': Type.String({ default: '270 59.26% 57.65%' }),
'--heroui-secondary-800': Type.String({ default: '270 59.26% 89.41%' }), '--heroui-secondary-600': Type.String({ default: '270 59.26% 68.24%' }),
'--heroui-secondary-900': Type.String({ default: '270 61.54% 94.9%' }), '--heroui-secondary-700': Type.String({ default: '270 59.26% 78.82%' }),
'--heroui-secondary-foreground': Type.String({ default: '0 0% 100%' }), '--heroui-secondary-800': Type.String({ default: '270 59.26% 89.41%' }),
'--heroui-secondary': Type.String({ default: '270 59.26% 57.65%' }), '--heroui-secondary-900': Type.String({ default: '270 61.54% 94.9%' }),
// 新增 success '--heroui-secondary-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-success-50': Type.String({ default: '145.71 77.78% 8.82%' }), '--heroui-secondary': Type.String({ default: '270 59.26% 57.65%' }),
'--heroui-success-100': Type.String({ default: '146.2 79.78% 17.45%' }), // 新增 success
'--heroui-success-200': Type.String({ default: '145.79 79.26% 26.47%' }), '--heroui-success-50': Type.String({ default: '145.71 77.78% 8.82%' }),
'--heroui-success-300': Type.String({ default: '146.01 79.89% 35.1%' }), '--heroui-success-100': Type.String({ default: '146.2 79.78% 17.45%' }),
'--heroui-success-400': Type.String({ default: '145.96 79.46% 43.92%' }), '--heroui-success-200': Type.String({ default: '145.79 79.26% 26.47%' }),
'--heroui-success-500': Type.String({ default: '146.01 62.45% 55.1%' }), '--heroui-success-300': Type.String({ default: '146.01 79.89% 35.1%' }),
'--heroui-success-600': Type.String({ default: '145.79 62.57% 66.47%' }), '--heroui-success-400': Type.String({ default: '145.96 79.46% 43.92%' }),
'--heroui-success-700': Type.String({ default: '146.2 61.74% 77.45%' }), '--heroui-success-500': Type.String({ default: '146.01 62.45% 55.1%' }),
'--heroui-success-800': Type.String({ default: '145.71 61.4% 88.82%' }), '--heroui-success-600': Type.String({ default: '145.79 62.57% 66.47%' }),
'--heroui-success-900': Type.String({ default: '146.67 64.29% 94.51%' }), '--heroui-success-700': Type.String({ default: '146.2 61.74% 77.45%' }),
'--heroui-success-foreground': Type.String({ default: '0 0% 0%' }), '--heroui-success-800': Type.String({ default: '145.71 61.4% 88.82%' }),
'--heroui-success': Type.String({ default: '145.96 79.46% 43.92%' }), '--heroui-success-900': Type.String({ default: '146.67 64.29% 94.51%' }),
// 新增 warning '--heroui-success-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-warning-50': Type.String({ default: '37.14 75% 10.98%' }), '--heroui-success': Type.String({ default: '145.96 79.46% 43.92%' }),
'--heroui-warning-100': Type.String({ default: '37.14 75% 21.96%' }), // 新增 warning
'--heroui-warning-200': Type.String({ default: '36.96 73.96% 33.14%' }), '--heroui-warning-50': Type.String({ default: '37.14 75% 10.98%' }),
'--heroui-warning-300': Type.String({ default: '37.01 74.22% 44.12%' }), '--heroui-warning-100': Type.String({ default: '37.14 75% 21.96%' }),
'--heroui-warning-400': Type.String({ default: '37.03 91.27% 55.1%' }), '--heroui-warning-200': Type.String({ default: '36.96 73.96% 33.14%' }),
'--heroui-warning-500': Type.String({ default: '37.01 91.26% 64.12%' }), '--heroui-warning-300': Type.String({ default: '37.01 74.22% 44.12%' }),
'--heroui-warning-600': Type.String({ default: '36.96 91.24% 73.14%' }), '--heroui-warning-400': Type.String({ default: '37.03 91.27% 55.1%' }),
'--heroui-warning-700': Type.String({ default: '37.14 91.3% 81.96%' }), '--heroui-warning-500': Type.String({ default: '37.01 91.26% 64.12%' }),
'--heroui-warning-800': Type.String({ default: '37.14 91.3% 90.98%' }), '--heroui-warning-600': Type.String({ default: '36.96 91.24% 73.14%' }),
'--heroui-warning-900': Type.String({ default: '54.55 91.67% 95.29%' }), '--heroui-warning-700': Type.String({ default: '37.14 91.3% 81.96%' }),
'--heroui-warning-foreground': Type.String({ default: '0 0% 0%' }), '--heroui-warning-800': Type.String({ default: '37.14 91.3% 90.98%' }),
'--heroui-warning': Type.String({ default: '37.03 91.27% 55.1%' }), '--heroui-warning-900': Type.String({ default: '54.55 91.67% 95.29%' }),
// 其它配置 '--heroui-warning-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-code-background': Type.String({ default: '240 5.56% 7.06%' }), '--heroui-warning': Type.String({ default: '37.03 91.27% 55.1%' }),
'--heroui-strong': Type.String({ default: '190.14 94.67% 44.12%' }), // 其它配置
'--heroui-code-mdx': Type.String({ default: '190.14 94.67% 44.12%' }), '--heroui-code-background': Type.String({ default: '240 5.56% 7.06%' }),
'--heroui-divider-weight': Type.String({ default: '1px' }), '--heroui-strong': Type.String({ default: '190.14 94.67% 44.12%' }),
'--heroui-disabled-opacity': Type.String({ default: '.5' }), '--heroui-code-mdx': Type.String({ default: '190.14 94.67% 44.12%' }),
'--heroui-font-size-tiny': Type.String({ default: '0.75rem' }), '--heroui-divider-weight': Type.String({ default: '1px' }),
'--heroui-font-size-small': Type.String({ default: '0.875rem' }), '--heroui-disabled-opacity': Type.String({ default: '.5' }),
'--heroui-font-size-medium': Type.String({ default: '1rem' }), '--heroui-font-size-tiny': Type.String({ default: '0.75rem' }),
'--heroui-font-size-large': Type.String({ default: '1.125rem' }), '--heroui-font-size-small': Type.String({ default: '0.875rem' }),
'--heroui-line-height-tiny': Type.String({ default: '1rem' }), '--heroui-font-size-medium': Type.String({ default: '1rem' }),
'--heroui-line-height-small': Type.String({ default: '1.25rem' }), '--heroui-font-size-large': Type.String({ default: '1.125rem' }),
'--heroui-line-height-medium': Type.String({ default: '1.5rem' }), '--heroui-line-height-tiny': Type.String({ default: '1rem' }),
'--heroui-line-height-large': Type.String({ default: '1.75rem' }), '--heroui-line-height-small': Type.String({ default: '1.25rem' }),
'--heroui-radius-small': Type.String({ default: '8px' }), '--heroui-line-height-medium': Type.String({ default: '1.5rem' }),
'--heroui-radius-medium': Type.String({ default: '12px' }), '--heroui-line-height-large': Type.String({ default: '1.75rem' }),
'--heroui-radius-large': Type.String({ default: '14px' }), '--heroui-radius-small': Type.String({ default: '8px' }),
'--heroui-border-width-small': Type.String({ default: '1px' }), '--heroui-radius-medium': Type.String({ default: '12px' }),
'--heroui-border-width-medium': Type.String({ default: '2px' }), '--heroui-radius-large': Type.String({ default: '14px' }),
'--heroui-border-width-large': Type.String({ default: '3px' }), '--heroui-border-width-small': Type.String({ default: '1px' }),
'--heroui-box-shadow-small': Type.String({ '--heroui-border-width-medium': Type.String({ default: '2px' }),
default: '--heroui-border-width-large': Type.String({ default: '3px' }),
'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-small': Type.String({
}), default:
'--heroui-box-shadow-medium': Type.String({ '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)',
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-medium': Type.String({
}), default:
'--heroui-box-shadow-large': Type.String({ '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)',
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-box-shadow-large': Type.String({
}), default:
'--heroui-hover-opacity': Type.String({ default: '.9' }), '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)',
}, { default: {} }), }),
light: Type.Object({ '--heroui-hover-opacity': Type.String({ default: '.9' }),
'--heroui-background': Type.String({ default: '0 0% 100%' }), },
'--heroui-foreground-50': Type.String({ default: '240 5.88% 95%' }), { default: {} }
'--heroui-foreground-100': Type.String({ default: '240 3.7% 90%' }), ),
'--heroui-foreground-200': Type.String({ default: '240 5.26% 80%' }), light: Type.Object(
'--heroui-foreground-300': Type.String({ default: '240 5.2% 70%' }), {
'--heroui-foreground-400': Type.String({ default: '240 3.83% 60%' }), '--heroui-background': Type.String({ default: '0 0% 100%' }),
'--heroui-foreground-500': Type.String({ default: '240 5.03% 50%' }), '--heroui-foreground-50': Type.String({ default: '240 5.88% 95%' }),
'--heroui-foreground-600': Type.String({ default: '240 4.88% 40%' }), '--heroui-foreground-100': Type.String({ default: '240 3.7% 90%' }),
'--heroui-foreground-700': Type.String({ default: '240 5.88% 30%' }), '--heroui-foreground-200': Type.String({ default: '240 5.26% 80%' }),
'--heroui-foreground-800': Type.String({ default: '240 4.76% 20%' }), '--heroui-foreground-300': Type.String({ default: '240 5.2% 70%' }),
'--heroui-foreground-900': Type.String({ default: '0 0% 10%' }), '--heroui-foreground-400': Type.String({ default: '240 3.83% 60%' }),
'--heroui-foreground': Type.String({ default: '210 5.56% 7.06%' }), '--heroui-foreground-500': Type.String({ default: '240 5.03% 50%' }),
'--heroui-focus': Type.String({ default: '212.01999999999998 100% 53.33%' }), '--heroui-foreground-600': Type.String({ default: '240 4.88% 40%' }),
'--heroui-overlay': Type.String({ default: '0 0% 100%' }), '--heroui-foreground-700': Type.String({ default: '240 5.88% 30%' }),
'--heroui-divider': Type.String({ default: '0 0% 0%' }), '--heroui-foreground-800': Type.String({ default: '240 4.76% 20%' }),
'--heroui-divider-opacity': Type.String({ default: '0.85' }), '--heroui-foreground-900': Type.String({ default: '0 0% 10%' }),
'--heroui-content1': Type.String({ default: '240 5.88% 95%' }), '--heroui-foreground': Type.String({ default: '210 5.56% 7.06%' }),
'--heroui-content1-foreground': Type.String({ default: '0 0% 10%' }), '--heroui-focus': Type.String({ default: '212.01999999999998 100% 53.33%' }),
'--heroui-content2': Type.String({ default: '240 3.7% 90%' }), '--heroui-overlay': Type.String({ default: '0 0% 100%' }),
'--heroui-content2-foreground': Type.String({ default: '240 4.76% 20%' }), '--heroui-divider': Type.String({ default: '0 0% 0%' }),
'--heroui-content3': Type.String({ default: '240 5.26% 80%' }), '--heroui-divider-opacity': Type.String({ default: '0.85' }),
'--heroui-content3-foreground': Type.String({ default: '240 5.88% 30%' }), '--heroui-content1': Type.String({ default: '240 5.88% 95%' }),
'--heroui-content4': Type.String({ default: '240 5.2% 70%' }), '--heroui-content1-foreground': Type.String({ default: '0 0% 10%' }),
'--heroui-content4-foreground': Type.String({ default: '240 4.88% 40%' }), '--heroui-content2': Type.String({ default: '240 3.7% 90%' }),
'--heroui-default-50': Type.String({ default: '240 5.88% 95%' }), '--heroui-content2-foreground': Type.String({ default: '240 4.76% 20%' }),
'--heroui-default-100': Type.String({ default: '240 3.7% 90%' }), '--heroui-content3': Type.String({ default: '240 5.26% 80%' }),
'--heroui-default-200': Type.String({ default: '240 5.26% 80%' }), '--heroui-content3-foreground': Type.String({ default: '240 5.88% 30%' }),
'--heroui-default-300': Type.String({ default: '240 5.2% 70%' }), '--heroui-content4': Type.String({ default: '240 5.2% 70%' }),
'--heroui-default-400': Type.String({ default: '240 3.83% 60%' }), '--heroui-content4-foreground': Type.String({ default: '240 4.88% 40%' }),
'--heroui-default-500': Type.String({ default: '240 5.03% 50%' }), '--heroui-default-50': Type.String({ default: '240 5.88% 95%' }),
'--heroui-default-600': Type.String({ default: '240 4.88% 40%' }), '--heroui-default-100': Type.String({ default: '240 3.7% 90%' }),
'--heroui-default-700': Type.String({ default: '240 5.88% 30%' }), '--heroui-default-200': Type.String({ default: '240 5.26% 80%' }),
'--heroui-default-800': Type.String({ default: '240 4.76% 20%' }), '--heroui-default-300': Type.String({ default: '240 5.2% 70%' }),
'--heroui-default-900': Type.String({ default: '0 0% 10%' }), '--heroui-default-400': Type.String({ default: '240 3.83% 60%' }),
'--heroui-default-foreground': Type.String({ default: '0 0% 0%' }), '--heroui-default-500': Type.String({ default: '240 5.03% 50%' }),
'--heroui-default': Type.String({ default: '240 5.26% 80%' }), '--heroui-default-600': Type.String({ default: '240 4.88% 40%' }),
'--heroui-danger-50': Type.String({ default: '324 90.91% 95.69%' }), '--heroui-default-700': Type.String({ default: '240 5.88% 30%' }),
'--heroui-danger-100': Type.String({ default: '350.53 90.48% 91.76%' }), '--heroui-default-800': Type.String({ default: '240 4.76% 20%' }),
'--heroui-danger-200': Type.String({ default: '343.42 90.48% 83.53%' }), '--heroui-default-900': Type.String({ default: '0 0% 10%' }),
'--heroui-danger-300': Type.String({ default: '337.84 83.46% 73.92%' }), '--heroui-default-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-danger-400': Type.String({ default: '331.82 75% 65.49%' }), '--heroui-default': Type.String({ default: '240 5.26% 80%' }),
'--heroui-danger-500': Type.String({ default: '325.82 69.62% 53.53%' }), '--heroui-danger-50': Type.String({ default: '324 90.91% 95.69%' }),
'--heroui-danger-600': Type.String({ default: '319.73 65.64% 44.51%' }), '--heroui-danger-100': Type.String({ default: '350.53 90.48% 91.76%' }),
'--heroui-danger-700': Type.String({ default: '313.85 70.65% 36.08%' }), '--heroui-danger-200': Type.String({ default: '343.42 90.48% 83.53%' }),
'--heroui-danger-800': Type.String({ default: '308.18 76.39% 28.24%' }), '--heroui-danger-300': Type.String({ default: '337.84 83.46% 73.92%' }),
'--heroui-danger-900': Type.String({ default: '301.89 82.61% 22.55%' }), '--heroui-danger-400': Type.String({ default: '331.82 75% 65.49%' }),
'--heroui-danger-foreground': Type.String({ default: '0 0% 100%' }), '--heroui-danger-500': Type.String({ default: '325.82 69.62% 53.53%' }),
'--heroui-danger': Type.String({ default: '325.82 69.62% 53.53%' }), '--heroui-danger-600': Type.String({ default: '319.73 65.64% 44.51%' }),
'--heroui-primary-50': Type.String({ default: '339.13 92% 95.1%' }), '--heroui-danger-700': Type.String({ default: '313.85 70.65% 36.08%' }),
'--heroui-primary-100': Type.String({ default: '340 91.84% 90.39%' }), '--heroui-danger-800': Type.String({ default: '308.18 76.39% 28.24%' }),
'--heroui-primary-200': Type.String({ default: '339.33 90% 80.39%' }), '--heroui-danger-900': Type.String({ default: '301.89 82.61% 22.55%' }),
'--heroui-primary-300': Type.String({ default: '339.11 90.6% 70.78%' }), '--heroui-danger-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-primary-400': Type.String({ default: '339 90% 60.78%' }), '--heroui-danger': Type.String({ default: '325.82 69.62% 53.53%' }),
'--heroui-primary-500': Type.String({ default: '339.2 90.36% 51.18%' }), '--heroui-primary-50': Type.String({ default: '339.13 92% 95.1%' }),
'--heroui-primary-600': Type.String({ default: '339 86.54% 40.78%' }), '--heroui-primary-100': Type.String({ default: '340 91.84% 90.39%' }),
'--heroui-primary-700': Type.String({ default: '339.11 85.99% 30.78%' }), '--heroui-primary-200': Type.String({ default: '339.33 90% 80.39%' }),
'--heroui-primary-800': Type.String({ default: '339.33 86.54% 20.39%' }), '--heroui-primary-300': Type.String({ default: '339.11 90.6% 70.78%' }),
'--heroui-primary-900': Type.String({ default: '340 84.91% 10.39%' }), '--heroui-primary-400': Type.String({ default: '339 90% 60.78%' }),
'--heroui-primary-foreground': Type.String({ default: '0 0% 100%' }), '--heroui-primary-500': Type.String({ default: '339.2 90.36% 51.18%' }),
'--heroui-primary': Type.String({ default: '339.2 90.36% 51.18%' }), '--heroui-primary-600': Type.String({ default: '339 86.54% 40.78%' }),
// 新增 secondary '--heroui-primary-700': Type.String({ default: '339.11 85.99% 30.78%' }),
'--heroui-secondary-50': Type.String({ default: '270 61.54% 94.9%' }), '--heroui-primary-800': Type.String({ default: '339.33 86.54% 20.39%' }),
'--heroui-secondary-100': Type.String({ default: '270 59.26% 89.41%' }), '--heroui-primary-900': Type.String({ default: '340 84.91% 10.39%' }),
'--heroui-secondary-200': Type.String({ default: '270 59.26% 78.82%' }), '--heroui-primary-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-secondary-300': Type.String({ default: '270 59.26% 68.24%' }), '--heroui-primary': Type.String({ default: '339.2 90.36% 51.18%' }),
'--heroui-secondary-400': Type.String({ default: '270 59.26% 57.65%' }), // 新增 secondary
'--heroui-secondary-500': Type.String({ default: '270 66.67% 47.06%' }), '--heroui-secondary-50': Type.String({ default: '270 61.54% 94.9%' }),
'--heroui-secondary-600': Type.String({ default: '270 66.67% 37.65%' }), '--heroui-secondary-100': Type.String({ default: '270 59.26% 89.41%' }),
'--heroui-secondary-700': Type.String({ default: '270 66.67% 28.24%' }), '--heroui-secondary-200': Type.String({ default: '270 59.26% 78.82%' }),
'--heroui-secondary-800': Type.String({ default: '270 66.67% 18.82%' }), '--heroui-secondary-300': Type.String({ default: '270 59.26% 68.24%' }),
'--heroui-secondary-900': Type.String({ default: '270 66.67% 9.41%' }), '--heroui-secondary-400': Type.String({ default: '270 59.26% 57.65%' }),
'--heroui-secondary-foreground': Type.String({ default: '0 0% 100%' }), '--heroui-secondary-500': Type.String({ default: '270 66.67% 47.06%' }),
'--heroui-secondary': Type.String({ default: '270 66.67% 47.06%' }), '--heroui-secondary-600': Type.String({ default: '270 66.67% 37.65%' }),
// 新增 success '--heroui-secondary-700': Type.String({ default: '270 66.67% 28.24%' }),
'--heroui-success-50': Type.String({ default: '146.67 64.29% 94.51%' }), '--heroui-secondary-800': Type.String({ default: '270 66.67% 18.82%' }),
'--heroui-success-100': Type.String({ default: '145.71 61.4% 88.82%' }), '--heroui-secondary-900': Type.String({ default: '270 66.67% 9.41%' }),
'--heroui-success-200': Type.String({ default: '146.2 61.74% 77.45%' }), '--heroui-secondary-foreground': Type.String({ default: '0 0% 100%' }),
'--heroui-success-300': Type.String({ default: '145.79 62.57% 66.47%' }), '--heroui-secondary': Type.String({ default: '270 66.67% 47.06%' }),
'--heroui-success-400': Type.String({ default: '146.01 62.45% 55.1%' }), // 新增 success
'--heroui-success-500': Type.String({ default: '145.96 79.46% 43.92%' }), '--heroui-success-50': Type.String({ default: '146.67 64.29% 94.51%' }),
'--heroui-success-600': Type.String({ default: '146.01 79.89% 35.1%' }), '--heroui-success-100': Type.String({ default: '145.71 61.4% 88.82%' }),
'--heroui-success-700': Type.String({ default: '145.79 79.26% 26.47%' }), '--heroui-success-200': Type.String({ default: '146.2 61.74% 77.45%' }),
'--heroui-success-800': Type.String({ default: '146.2 79.78% 17.45%' }), '--heroui-success-300': Type.String({ default: '145.79 62.57% 66.47%' }),
'--heroui-success-900': Type.String({ default: '145.71 77.78% 8.82%' }), '--heroui-success-400': Type.String({ default: '146.01 62.45% 55.1%' }),
'--heroui-success-foreground': Type.String({ default: '0 0% 0%' }), '--heroui-success-500': Type.String({ default: '145.96 79.46% 43.92%' }),
'--heroui-success': Type.String({ default: '145.96 79.46% 43.92%' }), '--heroui-success-600': Type.String({ default: '146.01 79.89% 35.1%' }),
// 新增 warning '--heroui-success-700': Type.String({ default: '145.79 79.26% 26.47%' }),
'--heroui-warning-50': Type.String({ default: '54.55 91.67% 95.29%' }), '--heroui-success-800': Type.String({ default: '146.2 79.78% 17.45%' }),
'--heroui-warning-100': Type.String({ default: '37.14 91.3% 90.98%' }), '--heroui-success-900': Type.String({ default: '145.71 77.78% 8.82%' }),
'--heroui-warning-200': Type.String({ default: '37.14 91.3% 81.96%' }), '--heroui-success-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-warning-300': Type.String({ default: '36.96 91.24% 73.14%' }), '--heroui-success': Type.String({ default: '145.96 79.46% 43.92%' }),
'--heroui-warning-400': Type.String({ default: '37.01 91.26% 64.12%' }), // 新增 warning
'--heroui-warning-500': Type.String({ default: '37.03 91.27% 55.1%' }), '--heroui-warning-50': Type.String({ default: '54.55 91.67% 95.29%' }),
'--heroui-warning-600': Type.String({ default: '37.01 74.22% 44.12%' }), '--heroui-warning-100': Type.String({ default: '37.14 91.3% 90.98%' }),
'--heroui-warning-700': Type.String({ default: '36.96 73.96% 33.14%' }), '--heroui-warning-200': Type.String({ default: '37.14 91.3% 81.96%' }),
'--heroui-warning-800': Type.String({ default: '37.14 75% 21.96%' }), '--heroui-warning-300': Type.String({ default: '36.96 91.24% 73.14%' }),
'--heroui-warning-900': Type.String({ default: '37.14 75% 10.98%' }), '--heroui-warning-400': Type.String({ default: '37.01 91.26% 64.12%' }),
'--heroui-warning-foreground': Type.String({ default: '0 0% 0%' }), '--heroui-warning-500': Type.String({ default: '37.03 91.27% 55.1%' }),
'--heroui-warning': 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-code-background': Type.String({ default: '221.25 17.39% 18.04%' }), '--heroui-warning-800': Type.String({ default: '37.14 75% 21.96%' }),
'--heroui-strong': Type.String({ default: '316.95 100% 65.29%' }), '--heroui-warning-900': Type.String({ default: '37.14 75% 10.98%' }),
'--heroui-code-mdx': Type.String({ default: '316.95 100% 65.29%' }), '--heroui-warning-foreground': Type.String({ default: '0 0% 0%' }),
'--heroui-divider-weight': Type.String({ default: '1px' }), '--heroui-warning': Type.String({ default: '37.03 91.27% 55.1%' }),
'--heroui-disabled-opacity': Type.String({ default: '.5' }), // 其它配置
'--heroui-font-size-tiny': Type.String({ default: '0.75rem' }), '--heroui-code-background': Type.String({ default: '221.25 17.39% 18.04%' }),
'--heroui-font-size-small': Type.String({ default: '0.875rem' }), '--heroui-strong': Type.String({ default: '316.95 100% 65.29%' }),
'--heroui-font-size-medium': Type.String({ default: '1rem' }), '--heroui-code-mdx': Type.String({ default: '316.95 100% 65.29%' }),
'--heroui-font-size-large': Type.String({ default: '1.125rem' }), '--heroui-divider-weight': Type.String({ default: '1px' }),
'--heroui-line-height-tiny': Type.String({ default: '1rem' }), '--heroui-disabled-opacity': Type.String({ default: '.5' }),
'--heroui-line-height-small': Type.String({ default: '1.25rem' }), '--heroui-font-size-tiny': Type.String({ default: '0.75rem' }),
'--heroui-line-height-medium': Type.String({ default: '1.5rem' }), '--heroui-font-size-small': Type.String({ default: '0.875rem' }),
'--heroui-line-height-large': Type.String({ default: '1.75rem' }), '--heroui-font-size-medium': Type.String({ default: '1rem' }),
'--heroui-radius-small': Type.String({ default: '8px' }), '--heroui-font-size-large': Type.String({ default: '1.125rem' }),
'--heroui-radius-medium': Type.String({ default: '12px' }), '--heroui-line-height-tiny': Type.String({ default: '1rem' }),
'--heroui-radius-large': Type.String({ default: '14px' }), '--heroui-line-height-small': Type.String({ default: '1.25rem' }),
'--heroui-border-width-small': Type.String({ default: '1px' }), '--heroui-line-height-medium': Type.String({ default: '1.5rem' }),
'--heroui-border-width-medium': Type.String({ default: '2px' }), '--heroui-line-height-large': Type.String({ default: '1.75rem' }),
'--heroui-border-width-large': Type.String({ default: '3px' }), '--heroui-radius-small': Type.String({ default: '8px' }),
'--heroui-box-shadow-small': Type.String({ '--heroui-radius-medium': Type.String({ default: '12px' }),
default: '--heroui-radius-large': Type.String({ default: '14px' }),
'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-border-width-small': Type.String({ default: '1px' }),
}), '--heroui-border-width-medium': Type.String({ default: '2px' }),
'--heroui-box-shadow-medium': Type.String({ '--heroui-border-width-large': Type.String({ default: '3px' }),
default: '--heroui-box-shadow-small': Type.String({
'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)', 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-large': Type.String({ }),
default: '--heroui-box-shadow-medium': Type.String({
'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)', 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-hover-opacity': Type.String({ default: '.8' }), }),
}, { default: {} }), '--heroui-box-shadow-large': Type.String({
}, { default: {} }), 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: {} }
),
}); });
export type WebUiConfigType = Static<typeof WebUiConfigSchema>; export type WebUiConfigType = Static<typeof WebUiConfigSchema>;
@@ -432,7 +441,14 @@ export class WebUiConfigWrapper {
// 获取主题内容 // 获取主题内容
async GetTheme(): Promise<WebUiConfigType['theme']> { async GetTheme(): Promise<WebUiConfigType['theme']> {
return (await this.GetWebUIConfig()).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;
} }
// 更新主题内容 // 更新主题内容