@@ -26,7 +26,6 @@ type ParseNestedObject<T, ShouldFlatten> = T extends (...args: infer A) => infer
2626 ? ( ...args : A ) => ParseNestedObject < R , false >
2727 : T extends object
2828 ? T extends { variants : infer R , compoundVariants : infer C }
29- // // if intersection of Base, Variants and Compound Variants is never, then flatten variants and compound variants to generic "string"
3029 ? ( ParseVariants < FlattenVariants < R , false > > & FlattenCompoundVariants < C , false > & ParseNestedObject < Omit < T , 'variants' | 'compoundVariants' > , false > ) extends never
3130 ? ParseVariants < FlattenVariants < R , true > > & FlattenCompoundVariants < C , true > & ParseNestedObject < Omit < T , 'variants' | 'compoundVariants' > , false >
3231 : ParseVariants < FlattenVariants < R , false > > & FlattenCompoundVariants < C , false > & ParseNestedObject < Omit < T , 'variants' | 'compoundVariants' > , false >
@@ -69,21 +68,37 @@ type FlattenCompoundVariants<T, ShouldFlatten> = T extends Array<infer _>
6968 ? ParseNestedObject < S , ShouldFlatten >
7069 : never
7170
72- type IsEmptyVariant < T > = T extends object
73- ? keyof T extends never
74- ? true
71+ type IsNonEmpty < T > = T extends object ? ( keyof T extends never ? false : true ) : false
72+
73+ type IntersectCategoryValues < T > = T extends object
74+ ? T extends Array < any >
75+ ? T
76+ : UnionToIntersection < T [ keyof T ] > extends infer R
77+ ? R extends never
78+ ? T [ keyof T ]
79+ : R
80+ : never
81+ : never
82+
83+ type MergeVariantCategories < T > = T extends object
84+ ? UnionToIntersection <
85+ {
86+ [ K in keyof T ] : IsNonEmpty < T [ K ] > extends true ? T [ K ] : never
87+ } [ keyof T ]
88+ > extends infer R
89+ ? R extends never
90+ ? NonNullable < T [ keyof T ] >
91+ : R
7592 : never
7693 : never
7794
7895type ParseVariants < T > = T extends object
7996 ? T [ keyof T ] extends object
8097 ? T [ keyof T ] extends Array < any >
8198 ? T
82- : UnionToIntersection < ParseVariants < T [ keyof T ] > > extends never
83- ? NonNullable < ParseVariants < T [ keyof T ] > >
84- : IsEmptyVariant < T [ keyof T ] > extends never
85- ? ParseVariants < T [ keyof T ] >
86- : UnionToIntersection < ParseVariants < T [ keyof T ] > >
99+ : MergeVariantCategories < {
100+ [ K in keyof T ] : T [ K ] extends object ? IntersectCategoryValues < T [ K ] > : never
101+ } >
87102 : T
88103 : T
89104
0 commit comments