@hero-design/rn 7.0.1 → 7.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/fonts/hero-icons.ttf +0 -0
- package/es/index.js +10043 -148
- package/jest.config.js +1 -0
- package/lib/index.js +10046 -147
- package/package.json +14 -3
- package/playground/components/Badge.tsx +50 -0
- package/playground/components/Card.tsx +223 -37
- package/playground/components/Icon.tsx +140 -0
- package/playground/components/Typography.tsx +21 -0
- package/playground/index.tsx +42 -11
- package/react-native.config.js +5 -0
- package/src/components/Badge/StyledBadge.tsx +34 -0
- package/src/components/Badge/__tests__/Badge.spec.tsx +50 -0
- package/src/components/Badge/__tests__/__snapshots__/Badge.spec.tsx.snap +161 -0
- package/src/components/Badge/index.tsx +35 -0
- package/src/components/Icon/HeroIcon/index.tsx +30 -0
- package/src/components/Icon/HeroIcon/selection.json +1 -0
- package/src/components/Icon/IconList.ts +298 -0
- package/src/components/Icon/__tests__/Icon.spec.tsx +36 -0
- package/src/components/Icon/__tests__/__snapshots__/Icon.spec.tsx.snap +43 -0
- package/src/components/Icon/index.tsx +47 -0
- package/src/components/Typography/Text/StyledText.tsx +69 -0
- package/src/components/Typography/Text/__test__/StyledText.spec.tsx +62 -0
- package/src/components/Typography/Text/__test__/__snapshots__/StyledText.spec.tsx.snap +172 -0
- package/src/components/Typography/Text/__test__/index.spec.tsx +11 -0
- package/src/components/Typography/Text/index.tsx +41 -0
- package/src/components/Typography/index.tsx +11 -0
- package/src/index.ts +15 -2
- package/src/testHelpers/renderWithTheme.tsx +8 -0
- package/src/theme/__tests__/__snapshots__/index.spec.ts.snap +71 -0
- package/src/theme/components/badge.ts +38 -0
- package/src/theme/components/icon.ts +24 -0
- package/src/theme/components/typography.ts +32 -0
- package/src/theme/global/typography.ts +4 -0
- package/src/theme/index.ts +12 -3
- package/testUtils/setup.ts +3 -0
- package/tsconfig.json +2 -6
- package/types/index.d.ts +3 -4
- package/types/playground/components/Badge.d.ts +2 -0
- package/types/playground/components/Card.d.ts +2 -0
- package/types/playground/components/Divider.d.ts +2 -0
- package/types/playground/components/Icon.d.ts +2 -0
- package/types/playground/components/Typography.d.ts +2 -0
- package/types/playground/index.d.ts +2 -0
- package/types/src/components/Badge/StyledBadge.d.ts +9 -0
- package/types/{components/Card/__tests__/Card.spec.d.ts → src/components/Badge/__tests__/Badge.spec.d.ts} +0 -0
- package/types/src/components/Badge/index.d.ts +22 -0
- package/types/{components → src/components}/Card/StyledCard.d.ts +0 -0
- package/types/{components/Card/__tests__/StyledCard.spec.d.ts → src/components/Card/__tests__/Card.spec.d.ts} +0 -0
- package/types/{components/Divider/__tests__/StyledDivider.spec.d.ts → src/components/Card/__tests__/StyledCard.spec.d.ts} +0 -0
- package/types/{components → src/components}/Card/index.d.ts +0 -0
- package/types/{components → src/components}/Divider/StyledDivider.d.ts +0 -0
- package/types/{theme/__tests__/index.spec.d.ts → src/components/Divider/__tests__/StyledDivider.spec.d.ts} +0 -0
- package/types/{components → src/components}/Divider/index.d.ts +0 -0
- package/types/src/components/Icon/HeroIcon/index.d.ts +7 -0
- package/types/src/components/Icon/IconList.d.ts +2 -0
- package/types/src/components/Icon/__tests__/Icon.spec.d.ts +1 -0
- package/types/src/components/Icon/index.d.ts +27 -0
- package/types/src/components/Typography/Text/StyledText.d.ts +7 -0
- package/types/src/components/Typography/Text/__test__/StyledText.spec.d.ts +1 -0
- package/types/src/components/Typography/Text/__test__/index.spec.d.ts +1 -0
- package/types/src/components/Typography/Text/index.d.ts +22 -0
- package/types/src/components/Typography/index.d.ts +6 -0
- package/types/src/index.d.ts +8 -0
- package/types/src/styled-components.d.ts +6 -0
- package/types/src/testHelpers/renderWithTheme.d.ts +3 -0
- package/types/src/theme/__tests__/index.spec.d.ts +1 -0
- package/types/src/theme/components/badge.d.ts +29 -0
- package/types/{theme → src/theme}/components/card.d.ts +0 -0
- package/types/{theme → src/theme}/components/divider.d.ts +0 -0
- package/types/src/theme/components/icon.d.ts +19 -0
- package/types/src/theme/components/typography.d.ts +25 -0
- package/types/{theme → src/theme}/global/borders.d.ts +0 -0
- package/types/src/theme/global/colors.d.ts +26 -0
- package/types/src/theme/global/index.d.ts +67 -0
- package/types/src/theme/global/space.d.ts +12 -0
- package/types/src/theme/global/typography.d.ts +25 -0
- package/types/src/theme/index.d.ts +19 -0
- package/types/theme/colors.d.ts +24 -0
- package/types/theme/components/demoStyle.d.ts +11 -0
- package/types/theme/global/colors.d.ts +0 -2
- package/types/theme/global/index.d.ts +0 -5
- package/types/theme/index.d.ts +2 -4
- package/types/theme/space.d.ts +12 -0
- package/types/theme/typography.d.ts +21 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hero-design/rn",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -17,12 +17,13 @@
|
|
|
17
17
|
"publish:npm": "yarn publish --access public"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@hero-design/colors": "7.0.
|
|
20
|
+
"@hero-design/colors": "7.0.4",
|
|
21
21
|
"styled-components": "6.0.0-alpha.5"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
24
|
"react": "17.0.2",
|
|
25
|
-
"react-native": "0.65.1"
|
|
25
|
+
"react-native": "0.65.1",
|
|
26
|
+
"react-native-vector-icons": "^9.1.0"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
28
29
|
"@babel/core": "^7.17.5",
|
|
@@ -42,6 +43,7 @@
|
|
|
42
43
|
"@types/jest": "^27.0.2",
|
|
43
44
|
"@types/react": "^17.0.39",
|
|
44
45
|
"@types/react-native": "^0.66.16",
|
|
46
|
+
"@types/react-native-vector-icons": "^6.4.10",
|
|
45
47
|
"@types/styled-components": "^5.1.24",
|
|
46
48
|
"@types/styled-components-react-native": "^5.1.3",
|
|
47
49
|
"@typescript-eslint/eslint-plugin": "^5.12.1",
|
|
@@ -62,6 +64,7 @@
|
|
|
62
64
|
"react-native": "0.65.1",
|
|
63
65
|
"react-native-safe-area-context": "^4.2.5",
|
|
64
66
|
"react-native-screens": "^3.13.1",
|
|
67
|
+
"react-native-vector-icons": "^9.1.0",
|
|
65
68
|
"react-test-renderer": "17.0.2",
|
|
66
69
|
"rollup": "^2.68.0",
|
|
67
70
|
"ts-jest": "^27.0.7",
|
|
@@ -92,6 +95,14 @@
|
|
|
92
95
|
"projects": "dependencies"
|
|
93
96
|
}
|
|
94
97
|
]
|
|
98
|
+
},
|
|
99
|
+
"dev": {
|
|
100
|
+
"dependsOn": [
|
|
101
|
+
{
|
|
102
|
+
"target": "build",
|
|
103
|
+
"projects": "dependencies"
|
|
104
|
+
}
|
|
105
|
+
]
|
|
95
106
|
}
|
|
96
107
|
}
|
|
97
108
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import { Badge, useTheme } from '../../src/index';
|
|
4
|
+
|
|
5
|
+
const BadgePlayground = () => {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<View
|
|
10
|
+
style={{
|
|
11
|
+
marginVertical: theme.space.medium,
|
|
12
|
+
marginHorizontal: theme.space.medium,
|
|
13
|
+
}}
|
|
14
|
+
>
|
|
15
|
+
<View
|
|
16
|
+
style={{
|
|
17
|
+
display: 'flex',
|
|
18
|
+
flexDirection: 'row',
|
|
19
|
+
marginBottom: theme.space.small,
|
|
20
|
+
}}
|
|
21
|
+
>
|
|
22
|
+
<Badge
|
|
23
|
+
content="APPROVED"
|
|
24
|
+
intent="success"
|
|
25
|
+
style={{ marginEnd: theme.space.small }}
|
|
26
|
+
/>
|
|
27
|
+
<Badge
|
|
28
|
+
content="PENDING"
|
|
29
|
+
intent="warning"
|
|
30
|
+
style={{ marginEnd: theme.space.small }}
|
|
31
|
+
/>
|
|
32
|
+
</View>
|
|
33
|
+
<View
|
|
34
|
+
style={{
|
|
35
|
+
display: 'flex',
|
|
36
|
+
flexDirection: 'row',
|
|
37
|
+
}}
|
|
38
|
+
>
|
|
39
|
+
<Badge
|
|
40
|
+
content="DECLINED"
|
|
41
|
+
intent="danger"
|
|
42
|
+
style={{ marginEnd: theme.space.small }}
|
|
43
|
+
/>
|
|
44
|
+
<Badge content="SUBMITTED" style={{ marginEnd: theme.space.small }} />
|
|
45
|
+
</View>
|
|
46
|
+
</View>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default BadgePlayground;
|
|
@@ -1,51 +1,237 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { View } from 'react-native';
|
|
3
|
-
import {
|
|
1
|
+
import React, { ComponentProps } from 'react';
|
|
2
|
+
import { View, ViewProps, StyleSheet } from 'react-native';
|
|
3
|
+
import { palette } from '@hero-design/colors';
|
|
4
|
+
import { Card, useTheme, Typography, Icon, Divider } from '../../src/index';
|
|
4
5
|
|
|
5
|
-
const
|
|
6
|
+
const TextBox = (props: ViewProps) => (
|
|
7
|
+
<View
|
|
8
|
+
style={{
|
|
9
|
+
flex: 1,
|
|
10
|
+
justifyContent: 'flex-end',
|
|
11
|
+
}}
|
|
12
|
+
{...props}
|
|
13
|
+
/>
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
const Screen = View;
|
|
17
|
+
type DashboardCardProps = ViewProps & {
|
|
18
|
+
icon: ComponentProps<typeof Icon>['icon'];
|
|
19
|
+
title: string;
|
|
20
|
+
subtitle: string;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const DashboardCard = ({
|
|
24
|
+
style,
|
|
25
|
+
icon,
|
|
26
|
+
title,
|
|
27
|
+
subtitle,
|
|
28
|
+
}: DashboardCardProps) => (
|
|
29
|
+
<Card testID="inductionContent" style={style}>
|
|
30
|
+
<View style={{ flex: 1, alignItems: 'flex-end' }}>
|
|
31
|
+
<Icon icon={icon} />
|
|
32
|
+
</View>
|
|
33
|
+
<TextBox>
|
|
34
|
+
<Typography.Text fontSize="xlarge" fontWeight="semi-bold">
|
|
35
|
+
{title}
|
|
36
|
+
</Typography.Text>
|
|
37
|
+
<Typography.Text fontSize="medium">{subtitle}</Typography.Text>
|
|
38
|
+
</TextBox>
|
|
39
|
+
</Card>
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const InductionCard = (props: ViewProps) => (
|
|
43
|
+
<DashboardCard
|
|
44
|
+
icon="file-verified"
|
|
45
|
+
title="Induction Content"
|
|
46
|
+
subtitle="2 files to acknowledge"
|
|
47
|
+
{...props}
|
|
48
|
+
/>
|
|
49
|
+
);
|
|
50
|
+
const PoliciesCard = (props: ViewProps) => (
|
|
51
|
+
<DashboardCard
|
|
52
|
+
icon="file-secured"
|
|
53
|
+
title="Policies"
|
|
54
|
+
subtitle="1 to acknowledge"
|
|
55
|
+
{...props}
|
|
56
|
+
/>
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const CertificationsCard = (props: ViewProps) => (
|
|
60
|
+
<DashboardCard
|
|
61
|
+
icon="file-certified"
|
|
62
|
+
title="Certification"
|
|
63
|
+
subtitle="1 to update"
|
|
64
|
+
{...props}
|
|
65
|
+
/>
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const Payslip = (props: ViewProps) => {
|
|
6
69
|
const theme = useTheme();
|
|
70
|
+
const { style, ...otherProps } = props;
|
|
7
71
|
return (
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
72
|
+
<Card
|
|
73
|
+
{...otherProps}
|
|
74
|
+
style={StyleSheet.flatten([
|
|
75
|
+
{
|
|
76
|
+
flexDirection: 'row',
|
|
77
|
+
alignItems: 'stretch',
|
|
78
|
+
backgroundColor: palette.greyLight75,
|
|
79
|
+
},
|
|
80
|
+
style,
|
|
81
|
+
])}
|
|
14
82
|
>
|
|
15
|
-
<
|
|
83
|
+
<View>
|
|
84
|
+
<View
|
|
85
|
+
style={{
|
|
86
|
+
padding: theme.space.small,
|
|
87
|
+
backgroundColor: '#C0ECE6',
|
|
88
|
+
borderRadius: 999,
|
|
89
|
+
alignContent: 'stretch',
|
|
90
|
+
}}
|
|
91
|
+
>
|
|
92
|
+
<Icon icon="coin" />
|
|
93
|
+
</View>
|
|
94
|
+
</View>
|
|
95
|
+
<View style={{ flex: 1, marginLeft: theme.space.small }}>
|
|
96
|
+
<Typography.Text fontSize="large" fontWeight="semi-bold">
|
|
97
|
+
Rosters
|
|
98
|
+
</Typography.Text>
|
|
99
|
+
<Typography.Text fontSize="medium">3 shifts this week</Typography.Text>
|
|
100
|
+
</View>
|
|
101
|
+
<View
|
|
16
102
|
style={{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
103
|
+
alignItems: 'center',
|
|
104
|
+
alignContent: 'center',
|
|
105
|
+
justifyContent: 'center',
|
|
20
106
|
}}
|
|
21
107
|
>
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
108
|
+
<Icon icon="arrow-right" />
|
|
109
|
+
</View>
|
|
110
|
+
</Card>
|
|
111
|
+
);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const MyLeaveCard = (props: ViewProps) => {
|
|
115
|
+
const theme = useTheme();
|
|
116
|
+
const { style, ...otherProps } = props;
|
|
117
|
+
return (
|
|
118
|
+
<Card
|
|
119
|
+
{...otherProps}
|
|
120
|
+
style={StyleSheet.flatten([
|
|
121
|
+
{
|
|
122
|
+
backgroundColor: palette.greyLight90,
|
|
123
|
+
paddingBottom: 0,
|
|
124
|
+
paddingTop: 0,
|
|
125
|
+
paddingRight: 0,
|
|
126
|
+
paddingLeft: 0,
|
|
127
|
+
},
|
|
128
|
+
style,
|
|
129
|
+
])}
|
|
130
|
+
>
|
|
131
|
+
<View
|
|
132
|
+
testID="header"
|
|
32
133
|
style={{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
134
|
+
marginHorizontal: theme.space.small,
|
|
135
|
+
marginTop: theme.space.small,
|
|
136
|
+
justifyContent: 'space-between',
|
|
36
137
|
flexDirection: 'row',
|
|
37
|
-
marginTop: theme.space.large,
|
|
38
138
|
}}
|
|
39
139
|
>
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
140
|
+
<Typography.Text fontSize="large" fontWeight="semi-bold">
|
|
141
|
+
My Leave
|
|
142
|
+
</Typography.Text>
|
|
143
|
+
|
|
144
|
+
<View style={{ flexDirection: 'row' }}>
|
|
145
|
+
<Typography.Text fontWeight="semi-bold">Add /view</Typography.Text>
|
|
146
|
+
<Icon
|
|
147
|
+
icon="circle-add-outlined"
|
|
148
|
+
size="xsmall"
|
|
149
|
+
style={{ margin: theme.space.xxsmall }}
|
|
150
|
+
/>
|
|
151
|
+
</View>
|
|
152
|
+
</View>
|
|
153
|
+
<Divider marginVertical="small" />
|
|
154
|
+
<View testID="content" style={{ margin: theme.space.small }}>
|
|
155
|
+
<Typography.Text fontSize="medium" fontWeight="semi-bold">
|
|
156
|
+
Leave Balances
|
|
157
|
+
</Typography.Text>
|
|
158
|
+
<View
|
|
159
|
+
testID="listItem1"
|
|
160
|
+
style={{ flexDirection: 'row', justifyContent: 'space-between' }}
|
|
161
|
+
>
|
|
162
|
+
<Typography.Text>Jury Duty</Typography.Text>
|
|
163
|
+
<Typography.Text fontWeight="semi-bold">12.06 hrs</Typography.Text>
|
|
164
|
+
</View>
|
|
165
|
+
<View
|
|
166
|
+
testID="listItem1"
|
|
167
|
+
style={{ flexDirection: 'row', justifyContent: 'space-between' }}
|
|
168
|
+
>
|
|
169
|
+
<Typography.Text>Annual Leave</Typography.Text>
|
|
170
|
+
<Typography.Text fontWeight="semi-bold">12.06 hrs</Typography.Text>
|
|
171
|
+
</View>
|
|
172
|
+
<View
|
|
173
|
+
testID="listItem1"
|
|
174
|
+
style={{ flexDirection: 'row', justifyContent: 'space-between' }}
|
|
175
|
+
>
|
|
176
|
+
<Typography.Text>Values Champion Award</Typography.Text>
|
|
177
|
+
<Typography.Text fontWeight="semi-bold">12.06 hrs</Typography.Text>
|
|
178
|
+
</View>
|
|
179
|
+
<View
|
|
180
|
+
testID="listItem1"
|
|
181
|
+
style={{ flexDirection: 'row', justifyContent: 'space-between' }}
|
|
182
|
+
>
|
|
183
|
+
<Typography.Text>Family and Domestic</Typography.Text>
|
|
184
|
+
<Typography.Text fontWeight="semi-bold">12.06 hrs</Typography.Text>
|
|
185
|
+
</View>
|
|
186
|
+
</View>
|
|
187
|
+
</Card>
|
|
188
|
+
);
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const CardPlayground = () => {
|
|
192
|
+
const theme = useTheme();
|
|
193
|
+
return (
|
|
194
|
+
<Screen>
|
|
195
|
+
<View style={{ flexDirection: 'row', height: 250 }}>
|
|
196
|
+
<View style={{ flex: 1 }}>
|
|
197
|
+
<InductionCard
|
|
198
|
+
style={{
|
|
199
|
+
flex: 1,
|
|
200
|
+
margin: theme.space.small,
|
|
201
|
+
backgroundColor: theme.colors.primaryLight,
|
|
202
|
+
}}
|
|
203
|
+
/>
|
|
204
|
+
</View>
|
|
205
|
+
<View style={{ flex: 1 }}>
|
|
206
|
+
<PoliciesCard
|
|
207
|
+
style={{
|
|
208
|
+
flex: 1,
|
|
209
|
+
backgroundColor: palette.dodgerBlueLight75,
|
|
210
|
+
margin: theme.space.small,
|
|
211
|
+
}}
|
|
212
|
+
testID="policies"
|
|
213
|
+
/>
|
|
214
|
+
<CertificationsCard
|
|
215
|
+
style={{
|
|
216
|
+
flex: 1,
|
|
217
|
+
margin: theme.space.small,
|
|
218
|
+
backgroundColor: palette.dodgerBlueLight75,
|
|
219
|
+
}}
|
|
220
|
+
testID="certifications"
|
|
221
|
+
/>
|
|
222
|
+
</View>
|
|
223
|
+
</View>
|
|
224
|
+
<Payslip
|
|
225
|
+
style={{
|
|
226
|
+
margin: theme.space.small,
|
|
227
|
+
}}
|
|
228
|
+
/>
|
|
229
|
+
<MyLeaveCard
|
|
230
|
+
style={{
|
|
231
|
+
margin: theme.space.small,
|
|
232
|
+
}}
|
|
233
|
+
/>
|
|
234
|
+
</Screen>
|
|
49
235
|
);
|
|
50
236
|
};
|
|
51
237
|
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ScrollView, View } from 'react-native';
|
|
3
|
+
import { Typography, Icon, useTheme } from '../../src/index';
|
|
4
|
+
|
|
5
|
+
const IconPlayground = () => {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<ScrollView
|
|
10
|
+
contentContainerStyle={{
|
|
11
|
+
padding: theme.space.medium,
|
|
12
|
+
}}
|
|
13
|
+
>
|
|
14
|
+
<Typography.Text style={{ marginBottom: theme.space.xsmall }}>
|
|
15
|
+
Bottom nav - active
|
|
16
|
+
</Typography.Text>
|
|
17
|
+
<View style={{ flexDirection: 'row', marginBottom: theme.space.large }}>
|
|
18
|
+
<Icon icon="home" style={{ marginEnd: theme.space.medium }} />
|
|
19
|
+
<Icon icon="speaker" style={{ marginEnd: theme.space.medium }} />
|
|
20
|
+
<Icon icon="bell" style={{ marginEnd: theme.space.medium }} />
|
|
21
|
+
<Icon icon="user" />
|
|
22
|
+
</View>
|
|
23
|
+
|
|
24
|
+
<Typography.Text style={{ marginBottom: theme.space.xsmall }}>
|
|
25
|
+
Bottom nav - inactive
|
|
26
|
+
</Typography.Text>
|
|
27
|
+
<View style={{ flexDirection: 'row', marginBottom: theme.space.large }}>
|
|
28
|
+
<Icon icon="home-outlined" style={{ marginEnd: theme.space.medium }} />
|
|
29
|
+
<Icon
|
|
30
|
+
icon="speaker-outlined"
|
|
31
|
+
style={{ marginEnd: theme.space.medium }}
|
|
32
|
+
/>
|
|
33
|
+
<Icon icon="bell-outlined" style={{ marginEnd: theme.space.medium }} />
|
|
34
|
+
<Icon icon="user-outlined" />
|
|
35
|
+
</View>
|
|
36
|
+
|
|
37
|
+
<Typography.Text style={{ marginBottom: theme.space.xsmall }}>
|
|
38
|
+
Dashboard - widgets
|
|
39
|
+
</Typography.Text>
|
|
40
|
+
<View style={{ flexDirection: 'row', marginBottom: theme.space.large }}>
|
|
41
|
+
<Icon icon="coin" style={{ marginEnd: theme.space.medium }} />
|
|
42
|
+
<Icon icon="calendar-clock" style={{ marginEnd: theme.space.medium }} />
|
|
43
|
+
<Icon icon="file-certified" style={{ marginEnd: theme.space.medium }} />
|
|
44
|
+
<Icon icon="file-secured" style={{ marginEnd: theme.space.medium }} />
|
|
45
|
+
<Icon icon="file-verified" />
|
|
46
|
+
</View>
|
|
47
|
+
|
|
48
|
+
<Typography.Text style={{ marginBottom: theme.space.xsmall }}>
|
|
49
|
+
Top nav
|
|
50
|
+
</Typography.Text>
|
|
51
|
+
<View style={{ flexDirection: 'row', marginBottom: theme.space.large }}>
|
|
52
|
+
<Icon icon="suitcase" style={{ marginEnd: theme.space.medium }} />
|
|
53
|
+
<Icon icon="credit-card" />
|
|
54
|
+
</View>
|
|
55
|
+
|
|
56
|
+
<Typography.Text style={{ marginBottom: theme.space.xsmall }}>
|
|
57
|
+
FAB icons
|
|
58
|
+
</Typography.Text>
|
|
59
|
+
<View style={{ flexDirection: 'row', marginBottom: theme.space.large }}>
|
|
60
|
+
<Icon icon="plane" style={{ marginEnd: theme.space.medium }} />
|
|
61
|
+
<Icon icon="reply" style={{ marginEnd: theme.space.medium }} />
|
|
62
|
+
<Icon icon="health-bag" style={{ marginEnd: theme.space.medium }} />
|
|
63
|
+
<Icon icon="clock" style={{ marginEnd: theme.space.medium }} />
|
|
64
|
+
<Icon icon="target" style={{ marginEnd: theme.space.medium }} />
|
|
65
|
+
<Icon icon="speaker" />
|
|
66
|
+
</View>
|
|
67
|
+
|
|
68
|
+
<Typography.Text style={{ marginBottom: theme.space.xsmall }}>
|
|
69
|
+
Icon with colors
|
|
70
|
+
</Typography.Text>
|
|
71
|
+
<View style={{ flexDirection: 'row', marginBottom: theme.space.large }}>
|
|
72
|
+
<Icon
|
|
73
|
+
icon="plane"
|
|
74
|
+
intent="text"
|
|
75
|
+
style={{ marginEnd: theme.space.medium }}
|
|
76
|
+
/>
|
|
77
|
+
<Icon
|
|
78
|
+
icon="reply"
|
|
79
|
+
intent="primary"
|
|
80
|
+
style={{ marginEnd: theme.space.medium }}
|
|
81
|
+
/>
|
|
82
|
+
<Icon
|
|
83
|
+
icon="health-bag"
|
|
84
|
+
intent="info"
|
|
85
|
+
style={{ marginEnd: theme.space.medium }}
|
|
86
|
+
/>
|
|
87
|
+
<Icon
|
|
88
|
+
icon="clock"
|
|
89
|
+
intent="danger"
|
|
90
|
+
style={{ marginEnd: theme.space.medium }}
|
|
91
|
+
/>
|
|
92
|
+
<Icon
|
|
93
|
+
icon="target"
|
|
94
|
+
intent="success"
|
|
95
|
+
style={{ marginEnd: theme.space.medium }}
|
|
96
|
+
/>
|
|
97
|
+
<Icon icon="speaker" intent="warning" />
|
|
98
|
+
</View>
|
|
99
|
+
|
|
100
|
+
<Typography.Text style={{ marginBottom: theme.space.xsmall }}>
|
|
101
|
+
Icon with different sizes
|
|
102
|
+
</Typography.Text>
|
|
103
|
+
<View
|
|
104
|
+
style={{
|
|
105
|
+
flexDirection: 'row',
|
|
106
|
+
marginBottom: theme.space.large,
|
|
107
|
+
alignItems: 'flex-end',
|
|
108
|
+
}}
|
|
109
|
+
>
|
|
110
|
+
<Icon
|
|
111
|
+
icon="activate"
|
|
112
|
+
intent="text"
|
|
113
|
+
size="xsmall"
|
|
114
|
+
style={{ marginEnd: theme.space.medium }}
|
|
115
|
+
/>
|
|
116
|
+
<Icon
|
|
117
|
+
icon="add-person"
|
|
118
|
+
intent="primary"
|
|
119
|
+
size="small"
|
|
120
|
+
style={{ marginEnd: theme.space.medium }}
|
|
121
|
+
/>
|
|
122
|
+
<Icon
|
|
123
|
+
icon="adjustment"
|
|
124
|
+
intent="info"
|
|
125
|
+
size="medium"
|
|
126
|
+
style={{ marginEnd: theme.space.medium }}
|
|
127
|
+
/>
|
|
128
|
+
<Icon
|
|
129
|
+
icon="alignment"
|
|
130
|
+
intent="danger"
|
|
131
|
+
size="large"
|
|
132
|
+
style={{ marginEnd: theme.space.medium }}
|
|
133
|
+
/>
|
|
134
|
+
<Icon icon="bank" intent="success" size="xlarge" />
|
|
135
|
+
</View>
|
|
136
|
+
</ScrollView>
|
|
137
|
+
);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export default IconPlayground;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import { Typography, useTheme } from '../../src/index';
|
|
4
|
+
|
|
5
|
+
const TypographyPlayground = () => {
|
|
6
|
+
const theme = useTheme();
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<View style={{ padding: theme.space.large }}>
|
|
10
|
+
<Typography.Text fontSize="xlarge" fontWeight="semi-bold">
|
|
11
|
+
This is a title
|
|
12
|
+
</Typography.Text>
|
|
13
|
+
<Typography.Text fontSize="large">This is a subtitle</Typography.Text>
|
|
14
|
+
<Typography.Text>This is a 2nd subtitle</Typography.Text>
|
|
15
|
+
<Typography.Text>This is body text</Typography.Text>
|
|
16
|
+
<Typography.Text intent="subdued">This is body text</Typography.Text>
|
|
17
|
+
</View>
|
|
18
|
+
);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default TypographyPlayground;
|
package/playground/index.tsx
CHANGED
|
@@ -1,19 +1,42 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
3
|
+
import { NavigationContainer, DefaultTheme } from '@react-navigation/native';
|
|
4
|
+
import {
|
|
5
|
+
createNativeStackNavigator,
|
|
6
|
+
NativeStackScreenProps,
|
|
7
|
+
} from '@react-navigation/native-stack';
|
|
8
|
+
import { useFonts } from 'expo-font';
|
|
9
|
+
/* eslint-enable import/no-extraneous-dependencies */
|
|
10
|
+
import { SafeAreaView, FlatList, Text } from 'react-native';
|
|
5
11
|
import { ThemeProvider, theme, useTheme } from '../src/index';
|
|
6
|
-
import
|
|
12
|
+
import BadgePlayground from './components/Badge';
|
|
7
13
|
import CardPlayground from './components/Card';
|
|
14
|
+
import DividerPlayground from './components/Divider';
|
|
15
|
+
import IconPlayground from './components/Icon';
|
|
16
|
+
import TypographyPlayground from './components/Typography';
|
|
8
17
|
|
|
9
|
-
|
|
18
|
+
const heroIconFontPath = require('../assets/fonts/hero-icons.ttf');
|
|
10
19
|
|
|
11
|
-
|
|
20
|
+
type RootStackParamList = {
|
|
21
|
+
Home: undefined;
|
|
22
|
+
Badge: undefined;
|
|
23
|
+
Card: undefined;
|
|
24
|
+
Divider: undefined;
|
|
25
|
+
Icon: undefined;
|
|
26
|
+
Typography: undefined;
|
|
27
|
+
};
|
|
12
28
|
|
|
13
|
-
|
|
14
|
-
|
|
29
|
+
type Navigation = NativeStackScreenProps<RootStackParamList>;
|
|
30
|
+
|
|
31
|
+
const Stack = createNativeStackNavigator<RootStackParamList>();
|
|
32
|
+
|
|
33
|
+
const components = [
|
|
34
|
+
{ name: 'Badge', component: BadgePlayground },
|
|
15
35
|
{ name: 'Card', component: CardPlayground },
|
|
16
|
-
|
|
36
|
+
{ name: 'Divider', component: DividerPlayground },
|
|
37
|
+
{ name: 'Icon', component: IconPlayground },
|
|
38
|
+
{ name: 'Typography', component: TypographyPlayground },
|
|
39
|
+
] as const;
|
|
17
40
|
|
|
18
41
|
const ComponentItem = ({
|
|
19
42
|
name,
|
|
@@ -36,13 +59,13 @@ const ComponentItem = ({
|
|
|
36
59
|
);
|
|
37
60
|
};
|
|
38
61
|
|
|
39
|
-
const ComponentList = ({ navigation }) => {
|
|
62
|
+
const ComponentList = ({ navigation }: Navigation) => {
|
|
40
63
|
const hdTheme = useTheme();
|
|
41
64
|
return (
|
|
42
65
|
<SafeAreaView style={{ marginHorizontal: hdTheme.space.large }}>
|
|
43
66
|
<FlatList
|
|
44
67
|
data={components}
|
|
45
|
-
renderItem={({ item }
|
|
68
|
+
renderItem={({ item }) => (
|
|
46
69
|
<ComponentItem
|
|
47
70
|
name={item.name}
|
|
48
71
|
onPress={() => navigation.navigate(item.name)}
|
|
@@ -62,6 +85,14 @@ const App = () => {
|
|
|
62
85
|
background: theme.colors.platformBackground,
|
|
63
86
|
},
|
|
64
87
|
};
|
|
88
|
+
|
|
89
|
+
const [fontsLoaded] = useFonts({
|
|
90
|
+
'hero-icons': heroIconFontPath,
|
|
91
|
+
});
|
|
92
|
+
if (!fontsLoaded) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
|
|
65
96
|
return (
|
|
66
97
|
<ThemeProvider theme={theme}>
|
|
67
98
|
<NavigationContainer theme={CustomNavigationTheme}>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Text, View } from 'react-native';
|
|
2
|
+
import styled, { css } from 'styled-components-native';
|
|
3
|
+
|
|
4
|
+
const BACKGROUND_INTENTS = {
|
|
5
|
+
success: 'successBackground',
|
|
6
|
+
warning: 'warningBackground',
|
|
7
|
+
danger: 'dangerBackground',
|
|
8
|
+
info: 'infoBackground',
|
|
9
|
+
} as const;
|
|
10
|
+
|
|
11
|
+
type ThemeIntent = 'success' | 'warning' | 'danger' | 'info';
|
|
12
|
+
|
|
13
|
+
const StyledView = styled(View)<{ themeIntent: ThemeIntent }>`
|
|
14
|
+
border-width: ${({ theme }) => theme.__hd__.badge.borderWidths.default};
|
|
15
|
+
border-radius: ${({ theme }) => theme.__hd__.badge.radii.default};
|
|
16
|
+
padding: ${({ theme }) => theme.__hd__.badge.padding.default};
|
|
17
|
+
|
|
18
|
+
${({ themeIntent }) => css`
|
|
19
|
+
border-color: ${({ theme }) => theme.__hd__.badge.colors[themeIntent]};
|
|
20
|
+
background-color: ${({ theme }) =>
|
|
21
|
+
theme.__hd__.badge.colors[BACKGROUND_INTENTS[themeIntent]]};
|
|
22
|
+
`};
|
|
23
|
+
`;
|
|
24
|
+
|
|
25
|
+
const StyledText = styled(Text)<{ themeIntent: ThemeIntent }>`
|
|
26
|
+
font-weight: ${({ theme }) => theme.__hd__.badge.fontWeights.default};
|
|
27
|
+
font-size: ${({ theme }) => theme.__hd__.badge.fontSizes.default};
|
|
28
|
+
|
|
29
|
+
${({ themeIntent }) => css`
|
|
30
|
+
color: ${({ theme }) => theme.__hd__.badge.colors[themeIntent]};
|
|
31
|
+
`};
|
|
32
|
+
`;
|
|
33
|
+
|
|
34
|
+
export { StyledView, StyledText };
|