1
1
import { Dimensions , StyleSheet , Text , TextProps , TextStyle } from 'react-native' ;
2
2
import React , { ReactElement , ReactNode } from 'react' ;
3
3
4
- function clamp ( value : number , min : number , max : number ) : number {
5
- if ( value < min ) return min ;
6
- if ( value > max ) return max ;
7
- return value ;
8
- }
9
-
10
4
const window = Dimensions . get ( 'window' ) ;
11
5
const minLength = Math . min ( window . width , window . height ) ;
12
6
let dimenRatio : number ; /* 375 is our design screen width */
@@ -15,6 +9,26 @@ let fontScale: number;
15
9
export let _FONT_SCALE_ : number ;
16
10
let _defaultFontSize : number ;
17
11
12
+ declare global {
13
+ interface Number {
14
+ dimenScaled : ( ) => number ;
15
+ fontScaled : ( ) => number ;
16
+ }
17
+ }
18
+
19
+ function clamp ( value : number , min : number , max : number ) : number {
20
+ if ( value < min ) return min ;
21
+ if ( value > max ) return max ;
22
+ return value ;
23
+ }
24
+
25
+ /**
26
+ * Set initial configuration for scaled layout behavior
27
+ * @param designSpecWidth your design width viewport width(zeplin, pigma etc...). If your design viewport is 375 x 1000 then 375 is a right value.
28
+ * @param dimenScaleRange dimension scale factor minimum & maximum range. default is [0.5, 1.5]..
29
+ * @param fontScaleRange font scale factor minimum & maximum range. default is [0.75, 1.3].
30
+ * @param defaultFontsize default <Text> fontSize. default is 12.
31
+ */
18
32
export function initScaledSettings (
19
33
designSpecWidth = 375 ,
20
34
dimenScaleRange : { min : number ; max : number } = { min : 0.5 , max : 1.5 } ,
@@ -27,23 +41,17 @@ export function initScaledSettings(
27
41
dimenScale >= 1 ? Math . min ( dimenScale , fontScaleRange . max ) : Math . max ( dimenScale * dimenScale , fontScaleRange . min ) ;
28
42
_FONT_SCALE_ = fontScale ;
29
43
_defaultFontSize = defaultFontsize ;
30
- }
31
- initScaledSettings ( ) ;
32
44
33
- declare global {
34
- interface Number {
35
- dimenScaled : ( ) => number ;
36
- fontScaled : ( ) => number ;
37
- }
45
+ // eslint-disable-next-line no-extend-native
46
+ Number . prototype . dimenScaled = function dimenScaled ( ) : number {
47
+ return ( this as number ) * dimenScale ;
48
+ } ;
49
+ // eslint-disable-next-line no-extend-native
50
+ Number . prototype . fontScaled = function fontScaled ( ) : number {
51
+ return ( this as number ) * fontScale ;
52
+ } ;
38
53
}
39
- // eslint-disable-next-line no-extend-native
40
- Number . prototype . dimenScaled = function dimenScaled ( ) : number {
41
- return ( this as number ) * dimenScale ;
42
- } ;
43
- // eslint-disable-next-line no-extend-native
44
- Number . prototype . fontScaled = function fontScaled ( ) : number {
45
- return ( this as number ) * fontScale ;
46
- } ;
54
+ initScaledSettings ( ) ;
47
55
48
56
type ScaledTextProps = {
49
57
style ?: TextStyle ;
0 commit comments