import { type ComputedRef, type PropType, type Ref } from 'vue'; import type { CNode } from 'css-render'; import type { GlobalTheme } from '../config-provider'; import type { ThemeCommonVars } from '../_styles/common'; export interface Theme, R = any> { name: N; common?: ThemeCommonVars; peers?: R; self?: (vars: ThemeCommonVars) => T; } export interface ThemeProps { theme: PropType; themeOverrides: PropType>; builtinThemeOverrides: PropType>; } export interface ThemePropsReactive { theme?: T; themeOverrides?: ExtractThemeOverrides; builtinThemeOverrides?: ExtractThemeOverrides; } export type ExtractThemeVars = T extends Theme ? unknown extends U ? Record : U : Record; export type ExtractPeerOverrides = T extends Theme ? { peers?: { [k in keyof V]?: ExtractThemeOverrides; }; } : T; export type ExtractMergedPeerOverrides = T extends Theme ? { [k in keyof V]?: ExtractPeerOverrides; } : T; export type ExtractThemeOverrides = Partial> & ExtractPeerOverrides & { common?: Partial; }; export declare function createTheme(theme: Theme): Theme; type UseThemeProps = Readonly<{ theme?: T | undefined; themeOverrides?: ExtractThemeOverrides; builtinThemeOverrides?: ExtractThemeOverrides; }>; export type MergedTheme = T extends Theme ? { common: ThemeCommonVars; self: V; peers: W; peerOverrides: ExtractMergedPeerOverrides; } : T; declare function useTheme(resolveId: Exclude, mountId: string, style: CNode | undefined, defaultTheme: Theme, props: UseThemeProps>, clsPrefixRef: Ref | undefined): ComputedRef>>; declare namespace useTheme { var props: { readonly theme: ObjectConstructor; readonly themeOverrides: ObjectConstructor; readonly builtinThemeOverrides: ObjectConstructor; }; } /** * props.theme (Theme): * { * common: CommonThemeVars, * self(): ThemeVars, * peers: { Component: Theme } * } * provider.theme: * { * common: CommonThemeVars, * Button: Theme * ... * } * defaultTheme: * { * common: CommonThemeVars, * self(): ThemeVars, * peers: { Component: Theme } * } * * props.themeOverrides (ThemeOverrides): * { * common: CommonThemeVars, * peers: { Component: ThemeOverrides }, * ...ThemeVars * } * provider.themeOverrides: * { * common: CommonThemeVars, * Component: ThemeOverrides * ... * } * * mergedTheme: * { * common: CommonThemeVars, * self: ThemeVars, * peers: { Component: Theme }, * overrides: { Component: ThemeOverrides } * } */ export default useTheme;