forked from LedgerHQ/ledger-live-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
85 lines (80 loc) · 1.45 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* @flow */
import React from "react";
import { Text } from "react-native";
import { useTheme } from "@react-navigation/native";
import getFontStyle from "./getFontStyle";
export { getFontStyle };
export type Opts = {
bold?: boolean,
semiBold?: boolean,
secondary?: boolean,
monospace?: boolean,
color?: string,
bg?: string,
};
export type Res = {|
fontFamily: string,
fontWeight:
| "normal"
| "bold"
| "100"
| "200"
| "300"
| "400"
| "500"
| "600"
| "700"
| "800"
| "900",
|};
/**
* Usage:
*
* <LText>123</LText>
* <LText bold>toto</LText>
* <LText semiBold>foobar</LText>
* <LText secondary>alternate font</LText>
* <LText style={styles.text}>some specific styles</LText>
*/
export default function LText({
bold,
semiBold,
secondary,
monospace,
color,
bg,
style,
...newProps
}: {
...Opts,
style?: *,
...
}) {
const { colors } = useTheme();
const getColor = (clrs, key, defaultValue) => {
if (!key || !(key in clrs)) {
return defaultValue;
}
return clrs[key];
};
return (
// $FlowFixMe
<Text
{...newProps}
allowFontScaling={false}
style={[
{
color: getColor(colors, color, colors.darkBlue),
backgroundColor: getColor(colors, bg, "transparent"),
},
style,
getFontStyle({
bold,
semiBold,
secondary,
monospace,
}),
]}
/>
);
}