useTheme 提供完整的主题定制能力,允许用户动态调整站点的视觉风格,包括颜色方案、字体选择、圆角大小、图标集以及明暗模式切换。所有配置自动持久化到 localStorage。
<script setup lang="ts">
const { primary, neutral, mode } = useTheme()
// 切换主色
primary.value = 'blue'
// 切换中性色
neutral.value = 'zinc'
// 切换颜色模式
mode.value = 'dark'
</script>
<script setup lang="ts">
const { font, radius, fonts, radiuses } = useTheme()
// 更改字体
font.value = 'Inter'
// 调整圆角(单位:rem)
radius.value = 0.5
// 获取所有可用选项
console.log('可用字体:', fonts)
console.log('可用圆角:', radiuses)
</script>
<script setup lang="ts">
const { icon, icons } = useTheme()
// 切换到 Phosphor 图标集
icon.value = 'phosphor'
// 列出所有图标集选项
console.log(icons)
// [
// { label: 'Lucide', icon: 'i-lucide-feather', value: 'lucide' },
// { label: 'Phosphor', icon: 'i-ph-phosphor-logo', value: 'phosphor' },
// { label: 'Tabler', icon: 'i-tabler-brand-tabler', value: 'tabler' }
// ]
</script>
<script setup lang="ts">
const {
exportCSS,
exportAppConfig,
hasCSSChanges,
hasAppConfigChanges
} = useTheme()
// 检查是否有自定义配置
if (hasCSSChanges.value) {
const cssCode = exportCSS()
console.log('CSS 配置:\n', cssCode)
}
if (hasAppConfigChanges.value) {
const appConfigCode = exportAppConfig()
console.log('App Config:\n', appConfigCode)
}
</script>
<script setup lang="ts">
const { resetTheme } = useTheme()
function handleReset() {
if (confirm('确定要重置主题到默认设置?')) {
resetTheme()
}
}
</script>
<template>
<UButton @click="handleReset" color="neutral" variant="outline">
重置主题
</UButton>
</template>
<script setup lang="ts">
const { setBlackAsPrimary } = useTheme()
// 启用黑色主色模式
// 在明亮模式下使用黑色,暗黑模式下使用白色作为主色
setBlackAsPrimary(true)
</script>
useTheme()返回主题配置管理对象,包含所有主题相关的状态和操作方法。
slate / gray / zinc / neutral / stone。0 / 0.125 / 0.25 / 0.375 / 0.5。Public Sans / DM Sans / Geist / Inter / Poppins / Outfit / Raleway。lucide / phosphor / tabler。app.config.ts 配置代码。所有主题配置会自动保存到 localStorage,键名格式为 {站点名称}-ui-{配置项}:
{站点名称}-ui-primary:主色配置{站点名称}-ui-neutral:中性色配置{站点名称}-ui-radius:圆角配置{站点名称}-ui-font:字体配置{站点名称}-ui-icons:图标集配置{站点名称}-ui-black-as-primary:黑色主色模式当启用 Vercel Analytics 的 debug 模式时,所有主题变更都会被追踪:
// 主题变更事件示例
track('Theme Changed', {
setting: 'primary',
value: 'blue'
})
track('Theme Exported', {
type: 'css'
})
track('Theme Reset')
42ba0 — feat: 新增工具函数和 Composables