useTheme.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { merge } from 'es-toolkit'
  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. // console.log({ lightTheme, darkTheme })
  11. // console.log({
  12. // lightThemeOverrides: merge(
  13. // commonThemeOverrides(color.value),
  14. // baseLightThemeOverrides(color.value),
  15. // ),
  16. // darkThemeOverrides: merge(
  17. // commonThemeOverrides(color.value),
  18. // baseDarkThemeOverrides(color.value),
  19. // ),
  20. // })
  21. // console.log({
  22. // lightThemeSelf: {
  23. // Popover: lightTheme.Popover.self?.(lightTheme.Popover.common ?? lightTheme.common),
  24. // Dropdown: lightTheme.Dropdown.self?.(lightTheme.Dropdown.common ?? lightTheme.common),
  25. // Tooltip: lightTheme.Tooltip.self?.(lightTheme.Tooltip.common ?? lightTheme.common),
  26. // },
  27. // })
  28. const getLightThemeOverrides = (primaryColor = color.value) => {
  29. return merge(commonThemeOverrides(primaryColor), baseLightThemeOverrides(primaryColor))
  30. }
  31. const getDarkThemeOverrides = (primaryColor = color.value) => {
  32. return merge(commonThemeOverrides(primaryColor), baseDarkThemeOverrides(primaryColor))
  33. }
  34. const themeOverrides = computed(() => {
  35. return isDark.value ? getDarkThemeOverrides(color.value) : getLightThemeOverrides(color.value)
  36. })
  37. const theme = computed(() => {
  38. return isDark.value ? darkTheme : lightTheme
  39. })
  40. return {
  41. color,
  42. isDark,
  43. theme,
  44. themeOverrides,
  45. getLightThemeOverrides,
  46. getDarkThemeOverrides,
  47. }
  48. }