shadcn-unocss-docs-nuxt
Version:
Effortless and beautiful docs template built with Nuxt Content + shadcn-vue + unocss.
47 lines (37 loc) • 1.04 kB
text/typescript
import { type Theme, themes } from '@/lib/registry/themes'
interface Config {
theme?: Theme['name']
radius: number
}
export function useThemes() {
const { value: color } = useColorMode()
const isDark = color === 'dark'
const defaultTheme = useConfig().value.theme
const config = useCookie<Config>('theme', {
default: () => ({
theme: defaultTheme.color as Color,
radius: defaultTheme.radius,
}),
})
const theme = computed(() => config.value.theme)
const radius = computed(() => config.value.radius)
const themeClass = computed(() => `theme-${theme.value}`)
function setTheme(themeName: Theme['name']) {
config.value.theme = themeName
}
function setRadius(newRadius: number) {
config.value.radius = newRadius
}
const themePrimary = computed(() => {
const t = themes.find(t => t.name === theme.value)
return `hsl(${t?.cssVars[isDark ? 'dark' : 'light'].primary})`
})
return {
themeClass,
theme,
setTheme,
radius,
setRadius,
themePrimary,
}
}