@@ -12,15 +12,19 @@ type ModifierMap<T> = {
1212 [ P in Prefixes < keyof T > ] ?: SuffixesOf < P , keyof T > ;
1313} ;
1414
15+ type SafeModifierList < TCSSModfuleClasses > = keyof ModifierMap < TCSSModfuleClasses > extends never
16+ ? string
17+ : keyof ModifierMap < TCSSModfuleClasses > ;
18+
1519function createPropsSchema <
1620 const TCSSModfuleClasses extends CSSModuleClasses ,
17- const TModifiers extends Array < keyof ModifierMap < TCSSModfuleClasses > >
18- > ( styles : TCSSModfuleClasses , modifiers : TModifiers ) {
21+ const TModifiers extends SafeModifierList < TCSSModfuleClasses >
22+ > ( styles : TCSSModfuleClasses , modifiers : TModifiers [ ] ) {
1923 type CSSModuleModifiers = ModifierMap < TCSSModfuleClasses > ;
2024
2125 const props = Object . keys ( styles ) . reduce ( ( acc , key ) => {
2226 const [ base , modifier ] = key . split ( '--' ) as [ keyof CSSModuleModifiers , string | undefined ] ;
23- if ( modifier && modifiers . includes ( base ) ) {
27+ if ( modifier && modifiers . includes ( base as unknown as TModifiers ) ) {
2428 acc . has ( base ) || acc . set ( base , new Set ( ) ) ;
2529 acc . get ( base ) . add ( modifier ) ;
2630 }
@@ -32,8 +36,8 @@ function createPropsSchema<
3236 Object . fromEntries (
3337 Array . from ( props . entries ( ) ) . map ( ( [ base , modifiers ] ) => [ base , optional ( picklist ( Array . from ( modifiers ) ) ) ] )
3438 ) as unknown as {
35- [ key in TModifiers [ number ] ] : OptionalSchema <
36- PicklistSchema < Array < CSSModuleModifiers [ key ] > , undefined > ,
39+ [ key in TModifiers ] : OptionalSchema <
40+ PicklistSchema < Array < key extends keyof CSSModuleModifiers ? CSSModuleModifiers [ key ] : string > , undefined > ,
3741 undefined
3842 > ;
3943 }
@@ -44,15 +48,15 @@ function createPropsSchema<
4448
4549export default function createIconComponent <
4650 const TProps extends { className ?: string | undefined } ,
47- const TModifiers extends Array < keyof ModifierMap < TCSSModfuleClasses > > ,
51+ const TModifiers extends SafeModifierList < TCSSModfuleClasses > ,
4852 const TCSSModfuleClasses extends CSSModuleClasses
49- > ( styles : TCSSModfuleClasses , modifiers : TModifiers , BaseIcon : ComponentType < TProps > ) {
53+ > ( styles : TCSSModfuleClasses , modifiers : TModifiers [ ] , BaseIcon : ComponentType < TProps > ) {
5054 type CSSModuleModifiers = ModifierMap < TCSSModfuleClasses > ;
5155
5256 // Do not bail if no CSS modules TypeScript plugin is provided.
53- type FinalCSSModuleModifiers = keyof CSSModuleModifiers extends never
54- ? Record < keyof TModifiers [ number ] , string >
55- : Pick < CSSModuleModifiers , TModifiers [ number ] > ;
57+ type FinalCSSModuleModifiers = TModifiers extends keyof CSSModuleModifiers
58+ ? Pick < CSSModuleModifiers , TModifiers >
59+ : Partial < Record < TModifiers , string > > ;
5660
5761 const modifierPropsSchema = createPropsSchema ( styles , modifiers ) ;
5862
0 commit comments