1
1
import { ImageStyle , StyleSheet , TextStyle , ViewStyle } from 'react-native' ;
2
+ import { AnimatableNumericValue , DimensionValue } from 'react-native/Libraries/StyleSheet/StyleSheetTypes' ;
2
3
3
4
import { DEFAULT_SCALE_FACTOR } from './createScaleFactor' ;
4
5
5
6
type Styles = ViewStyle | TextStyle | ImageStyle ;
6
7
type StylePreprocessor < T extends Styles = Styles > = { [ key in keyof T ] : ( val : NonNullable < T [ key ] > ) => typeof val } ;
7
8
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
+ } ;
9
20
10
21
const preProcessor : Partial < StylePreprocessor > = {
11
22
'fontSize' : DEFAULT_SCALE_FACTOR ,
12
23
'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 ,
38
49
} ;
39
50
40
51
const preProcessorKeys = Object . keys ( preProcessor ) ;
@@ -46,7 +57,10 @@ const preProcessorLen = preProcessorKeys.length;
46
57
* @param styles
47
58
* @returns StyleSheet
48
59
* */
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 => {
50
64
Object . values ( styles ) . forEach ( ( style ) => {
51
65
// @ts -ignore
52
66
const styleKeys = Object . keys ( style ) ;
@@ -61,5 +75,6 @@ const createStyleSheet = <T extends StyleSheet.NamedStyles<T>>(styles: T | Style
61
75
62
76
return StyleSheet . create < T > ( styles ) ;
63
77
} ;
78
+ /* eslint-enable @typescript-eslint/no-explicit-any */
64
79
65
80
export default createStyleSheet ;
0 commit comments