UNPKG

shadcn-unocss-docs-nuxt

Version:

Effortless and beautiful docs template built with Nuxt Content + shadcn-vue + unocss.

47 lines (37 loc) 1.04 kB
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, } }