useTheme.ts 1.1 KB

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