import { NestedObject, Pretty, FlattenObject } from './utils/object.js'; import { If, IsNever, _String, Stringify } from './utils/types.js'; import { Tokens } from '@kuma-ui/sheet'; import { componentList } from './components/componentList.js'; import { StyledProps, PseudoProps } from '@kuma-ui/system'; type ThemeTokens = Theme extends Record ? Theme[T] : never; type NumberToken = "fontSizes" | "fontWeights" | "lineHeights" | "letterSpacings" | "breakpoints"; type InputThemeTokens = { [K in Tokens]?: K extends NumberToken ? NestedObject : NestedObject; }; type ResultThemeTokens = { [K in keyof T]: Pretty>>; }; type SystemThemeTokens = { [K in Tokens]: If>, _String, Stringify>>; }; type StyleProps = StyledProps & PseudoProps; type RawThemeComponent = { /** * @deprecated use `defaultProps` instead */ baseStyle?: StyleProps; variants?: { [key: string]: StyleProps; }; defaultProps?: { variant?: string; } & StyleProps & Record; }; type RawThemeComponents = { [_ in keyof typeof componentList]?: RawThemeComponent; }; type RawThemeInput = InputThemeTokens & { components?: RawThemeComponents; }; type ThemeComponent = { [K in keyof T]?: K extends "baseStyle" ? StyleProps : K extends "variants" ? { [_ in keyof T[K]]: StyleProps; } : K extends "defaultProps" ? { variant?: T extends RawThemeComponent ? keyof T["variants"] : never; } : never; }; type ThemeInput = RawThemeInput & { [K in keyof T]: K extends "components" ? T[K] extends RawThemeComponents ? { [K2 in keyof T[K]]?: ThemeComponent; } : never : K extends keyof InputThemeTokens ? T[K] extends NestedObject | undefined ? T[K] : never : never; }; type ThemeResult = Pretty> & ThemeComponentsResult>; type ThemeComponentsResult = { components: T extends Record<"components", unknown> ? T["components"] : undefined; }; interface Theme { } type ThemeComponents = Theme extends { components: unknown; } ? Theme["components"] : never; type ThemeSystem = { components: If, unknown, ThemeComponents>; } & Record; declare function createTheme>(theme: T): ThemeResult; export { InputThemeTokens as I, NumberToken as N, RawThemeInput as R, SystemThemeTokens as S, Theme as T, ThemeSystem as a, ResultThemeTokens as b, createTheme as c, ThemeInput as d };