type RemoveString = T extends string ? never : T; export type RemoveClassNamesString = { [K in keyof T]: string | Record extends T[K] ? RemoveString : T[K]; }; export type DeepClassNameType = { [K in keyof T]?: string extends T[K] ? string | DeepClassNameType : DeepClassNameType; }; type CSS = React.CSSProperties; export type DeepStylesType = { [K in keyof T]?: CSS extends T[K] ? CSS : DeepStylesType; }; export type GenerateSemantic = { classNames: DeepClassNameType; classNamesNoString: RemoveClassNamesString>; classNamesFn: (info: { props: Props; }) => DeepClassNameType; classNamesAndFn: DeepClassNameType | ((info: { props: Props; }) => DeepClassNameType); styles: DeepStylesType; stylesFn: (info: { props: Props; }) => DeepStylesType; stylesAndFn: DeepStylesType | ((info: { props: Props; }) => DeepStylesType); }; export {};