11import { ImageStyle , StyleSheet , TextStyle , ViewStyle } from 'react-native' ;
2+ import { AnimatableNumericValue , DimensionValue } from 'react-native/Libraries/StyleSheet/StyleSheetTypes' ;
23
34import { DEFAULT_SCALE_FACTOR } from './createScaleFactor' ;
45
56type Styles = ViewStyle | TextStyle | ImageStyle ;
67type StylePreprocessor < T extends Styles = Styles > = { [ key in keyof T ] : ( val : NonNullable < T [ key ] > ) => typeof val } ;
78
8- const SCALE_FACTOR_WITH_STR = ( val : string | number ) => ( typeof val === 'string' ? val : DEFAULT_SCALE_FACTOR ( val ) ) ;
9+ const SCALE_FACTOR_WITH_DIMENSION_VALUE = (
10+ val : NonNullable < DimensionValue | undefined > ,
11+ ) : NonNullable < DimensionValue | undefined > => {
12+ return typeof val === 'number' ? DEFAULT_SCALE_FACTOR ( val ) : val ;
13+ } ;
14+
15+ const DEFAULT_SCALE_FACTOR_WITH_NUMERIC_VALUE = (
16+ val : NonNullable < AnimatableNumericValue | undefined > ,
17+ ) : NonNullable < AnimatableNumericValue | undefined > => {
18+ return typeof val === 'number' ? DEFAULT_SCALE_FACTOR ( val ) : val ;
19+ } ;
920
1021const preProcessor : Partial < StylePreprocessor > = {
1122 'fontSize' : DEFAULT_SCALE_FACTOR ,
1223 'lineHeight' : DEFAULT_SCALE_FACTOR ,
13- 'borderRadius' : DEFAULT_SCALE_FACTOR ,
14- 'minWidth' : SCALE_FACTOR_WITH_STR ,
15- 'maxWidth' : SCALE_FACTOR_WITH_STR ,
16- 'minHeight' : SCALE_FACTOR_WITH_STR ,
17- 'maxHeight' : SCALE_FACTOR_WITH_STR ,
18- 'height' : SCALE_FACTOR_WITH_STR ,
19- 'width' : SCALE_FACTOR_WITH_STR ,
20- 'padding' : SCALE_FACTOR_WITH_STR ,
21- 'paddingVertical' : SCALE_FACTOR_WITH_STR ,
22- 'paddingHorizontal' : SCALE_FACTOR_WITH_STR ,
23- 'paddingTop' : SCALE_FACTOR_WITH_STR ,
24- 'paddingBottom' : SCALE_FACTOR_WITH_STR ,
25- 'paddingLeft' : SCALE_FACTOR_WITH_STR ,
26- 'paddingRight' : SCALE_FACTOR_WITH_STR ,
27- 'margin' : SCALE_FACTOR_WITH_STR ,
28- 'marginVertical' : SCALE_FACTOR_WITH_STR ,
29- 'marginHorizontal' : SCALE_FACTOR_WITH_STR ,
30- 'marginTop' : SCALE_FACTOR_WITH_STR ,
31- 'marginBottom' : SCALE_FACTOR_WITH_STR ,
32- 'marginLeft' : SCALE_FACTOR_WITH_STR ,
33- 'marginRight' : SCALE_FACTOR_WITH_STR ,
34- 'left' : SCALE_FACTOR_WITH_STR ,
35- 'right' : SCALE_FACTOR_WITH_STR ,
36- 'top' : SCALE_FACTOR_WITH_STR ,
37- 'bottom' : SCALE_FACTOR_WITH_STR ,
24+ 'borderRadius' : DEFAULT_SCALE_FACTOR_WITH_NUMERIC_VALUE ,
25+ 'minWidth' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
26+ 'maxWidth' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
27+ 'minHeight' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
28+ 'maxHeight' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
29+ 'height' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
30+ 'width' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
31+ 'padding' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
32+ 'paddingVertical' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
33+ 'paddingHorizontal' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
34+ 'paddingTop' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
35+ 'paddingBottom' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
36+ 'paddingLeft' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
37+ 'paddingRight' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
38+ 'margin' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
39+ 'marginVertical' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
40+ 'marginHorizontal' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
41+ 'marginTop' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
42+ 'marginBottom' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
43+ 'marginLeft' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
44+ 'marginRight' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
45+ 'left' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
46+ 'right' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
47+ 'top' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
48+ 'bottom' : SCALE_FACTOR_WITH_DIMENSION_VALUE ,
3849} ;
3950
4051const preProcessorKeys = Object . keys ( preProcessor ) ;
@@ -46,7 +57,10 @@ const preProcessorLen = preProcessorKeys.length;
4657 * @param styles
4758 * @returns StyleSheet
4859 * */
49- const createStyleSheet = < T extends StyleSheet . NamedStyles < T > > ( styles : T | StyleSheet . NamedStyles < T > ) : T => {
60+ /* eslint-disable @typescript-eslint/no-explicit-any */
61+ const createStyleSheet = < T extends StyleSheet . NamedStyles < T > | StyleSheet . NamedStyles < any > > (
62+ styles : T & StyleSheet . NamedStyles < any > ,
63+ ) : T => {
5064 Object . values ( styles ) . forEach ( ( style ) => {
5165 // @ts -ignore
5266 const styleKeys = Object . keys ( style ) ;
@@ -61,5 +75,6 @@ const createStyleSheet = <T extends StyleSheet.NamedStyles<T>>(styles: T | Style
6175
6276 return StyleSheet . create < T > ( styles ) ;
6377} ;
78+ /* eslint-enable @typescript-eslint/no-explicit-any */
6479
6580export default createStyleSheet ;
0 commit comments