useTheme.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { merge } from 'lodash-es'
  2. import { darkTheme, lightTheme } from 'naive-ui'
  3. import { computed } from 'vue'
  4. import { commonThemeOverrides } from '@/theme/common'
  5. import { baseDarkThemeOverrides } from '@/theme/dark'
  6. import { baseLightThemeOverrides } from '@/theme/light'
  7. import { usePersonalization } from './usePersonalization'
  8. export function useTheme() {
  9. const { color, isDark } = usePersonalization()
  10. const getLightThemeOverrides = (primaryColor = color.value) => {
  11. return merge(commonThemeOverrides(primaryColor), baseLightThemeOverrides(primaryColor))
  12. }
  13. const getDarkThemeOverrides = (primaryColor = color.value) => {
  14. return merge(commonThemeOverrides(primaryColor), baseDarkThemeOverrides(primaryColor))
  15. }
  16. const themeOverrides = computed(() => {
  17. return isDark.value ? getDarkThemeOverrides(color.value) : getLightThemeOverrides(color.value)
  18. })
  19. const theme = computed(() => {
  20. return isDark.value ? darkTheme : lightTheme
  21. })
  22. return {
  23. color,
  24. isDark,
  25. theme,
  26. themeOverrides,
  27. getLightThemeOverrides,
  28. getDarkThemeOverrides,
  29. }
  30. }