UNPKG

shadcn-docs-nuxt

Version:

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

48 lines (38 loc) 1.08 kB
import type { Theme } from '@/lib/themes'; import { themes } from '@/lib/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, }; }