diff --git a/src/_mixins/use-theme.ts b/src/_mixins/use-theme.ts index 6a71085a1..35990328b 100644 --- a/src/_mixins/use-theme.ts +++ b/src/_mixins/use-theme.ts @@ -17,7 +17,11 @@ export interface Theme { self?: (vars: ThemeCommonVars) => T } -export type ExtractThemeVars = T extends Theme ? U : {} +export type ExtractThemeVars = T extends Theme + ? unknown extends U + ? {} + : U + : {} export type ExtractPeerOverrides = T extends Theme ? { @@ -27,6 +31,12 @@ export type ExtractPeerOverrides = T extends Theme } : T +export type ExtractMergedPeerOverrides = T extends Theme + ? { + [k in keyof V]?: ExtractThemeVars + } + : T + export type ExtractThemeOverrides = Partial> & ExtractPeerOverrides & { common?: ThemeCommonVars } @@ -45,7 +55,7 @@ export type MergedTheme = T extends Theme common: ThemeCommonVars self: V peers: W - overrides: any + overrides: ExtractMergedPeerOverrides } : T @@ -114,7 +124,7 @@ function useTheme ( common: mergedCommon, self: mergedSelf, peers: merge({}, defaultTheme.peers, peers, injectedPeers), - overrides: merge(peersOverrides, injectedPeersOverrides) + overrides: merge({}, peersOverrides, injectedPeersOverrides) } }) return mergedThemeRef diff --git a/src/tree/styles/light.ts b/src/tree/styles/light.ts index 54c13ebe5..bf2ed1914 100644 --- a/src/tree/styles/light.ts +++ b/src/tree/styles/light.ts @@ -2,7 +2,7 @@ import { changeColor } from 'seemly' import { checkboxLight } from '../../checkbox/styles' import { commonLight } from '../../_styles/new-common' import type { ThemeCommonVars } from '../../_styles/new-common' -import { Theme } from '../../_mixins/use-theme' +import { createTheme } from '../../_mixins/use-theme' const self = (vars: ThemeCommonVars) => { const { @@ -30,14 +30,14 @@ const self = (vars: ThemeCommonVars) => { export type TreeThemeVars = ReturnType -const treeLight: Theme = { +const treeLight = createTheme({ name: 'Tree', common: commonLight, peers: { Checkbox: checkboxLight }, self -} +}) export default treeLight export type TreeTheme = typeof treeLight