@hero-design/rn 7.19.0 → 7.20.0
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/.eslintrc.json +6 -1
- package/.turbo/turbo-build.log +2 -2
- package/es/index.js +572 -194
- package/lib/index.js +572 -193
- package/package.json +4 -4
- package/src/components/Alert/StyledAlert.tsx +5 -5
- package/src/components/Alert/__tests__/__snapshots__/index.spec.tsx.snap +140 -19
- package/src/components/Alert/__tests__/index.spec.tsx +21 -0
- package/src/components/Alert/index.tsx +13 -6
- package/src/components/Avatar/StyledAvatar.tsx +2 -1
- package/src/components/Avatar/index.tsx +2 -1
- package/src/components/Box/StyledBox.tsx +54 -0
- package/src/components/Box/__tests__/__snapshots__/index.spec.tsx.snap +605 -0
- package/src/components/Box/__tests__/helpers.spec.ts +14 -0
- package/src/components/Box/__tests__/index.spec.tsx +155 -0
- package/src/components/Box/config.ts +201 -0
- package/src/components/Box/helpers.ts +10 -0
- package/src/components/Box/index.tsx +13 -0
- package/src/components/Box/types.ts +38 -0
- package/src/components/Calendar/__tests__/index.spec.tsx +13 -17
- package/src/components/Card/DataCard/StyledDataCard.tsx +8 -2
- package/src/components/Card/DataCard/__tests__/StyledDataCard.spec.tsx +1 -0
- package/src/components/Card/DataCard/__tests__/__snapshots__/StyledDataCard.spec.tsx.snap +16 -0
- package/src/components/Card/DataCard/index.tsx +1 -1
- package/src/components/Card/StyledCard.tsx +12 -19
- package/src/components/Card/__tests__/__snapshots__/index.spec.tsx.snap +147 -0
- package/src/components/Card/__tests__/index.spec.tsx +18 -0
- package/src/components/Card/index.tsx +6 -1
- package/src/components/Drawer/DragableDrawer/helpers.ts +3 -4
- package/src/components/FAB/ActionGroup/index.tsx +6 -8
- package/src/components/RichTextEditor/__tests__/RichTextEditor.spec.tsx +4 -8
- package/src/components/SectionHeading/__tests__/__snapshots__/StyledHeading.spec.tsx.snap +1 -1
- package/src/components/SectionHeading/__tests__/__snapshots__/index.spec.tsx.snap +4 -4
- package/src/components/Select/MultiSelect/__tests__/__snapshots__/OptionList.spec.tsx.snap +22 -20
- package/src/components/Select/MultiSelect/__tests__/__snapshots__/index.spec.tsx.snap +4 -4
- package/src/components/Select/SingleSelect/__tests__/__snapshots__/OptionList.spec.tsx.snap +22 -20
- package/src/components/Select/SingleSelect/__tests__/__snapshots__/index.spec.tsx.snap +4 -4
- package/src/components/Spinner/AnimatedSpinner.tsx +7 -7
- package/src/components/Spinner/StyledSpinner.tsx +24 -19
- package/src/components/Spinner/__tests__/AnimatedSpinner.spec.tsx +1 -1
- package/src/components/Spinner/__tests__/StyledSpinner.spec.tsx +32 -16
- package/src/components/Spinner/__tests__/__snapshots__/AnimatedSpinner.spec.tsx.snap +14 -12
- package/src/components/Spinner/__tests__/__snapshots__/StyledSpinner.spec.tsx.snap +273 -31
- package/src/components/Spinner/__tests__/__snapshots__/index.spec.tsx.snap +14 -12
- package/src/components/Spinner/index.tsx +10 -2
- package/src/components/Tabs/ScrollableTabs.tsx +9 -4
- package/src/components/Tabs/StyledScrollableTabs.tsx +6 -5
- package/src/components/Tabs/StyledTabs.tsx +6 -0
- package/src/components/Tabs/TabWithBadge.tsx +68 -0
- package/src/components/Tabs/__tests__/ScrollableTabs.spec.tsx +13 -0
- package/src/components/Tabs/__tests__/TabWithBadge.spec.tsx +48 -0
- package/src/components/Tabs/__tests__/__snapshots__/ScrollableTabs.spec.tsx.snap +205 -43
- package/src/components/Tabs/__tests__/__snapshots__/TabWithBadge.spec.tsx.snap +165 -0
- package/src/components/Tabs/__tests__/__snapshots__/index.spec.tsx.snap +135 -34
- package/src/components/Tabs/__tests__/index.spec.tsx +12 -0
- package/src/components/Tabs/index.tsx +11 -4
- package/src/components/Tag/StyledTag.tsx +1 -11
- package/src/components/Tag/__tests__/__snapshots__/Tag.spec.tsx.snap +4 -4
- package/src/components/Tag/index.tsx +2 -2
- package/src/components/TextInput/__tests__/index.spec.tsx +10 -14
- package/src/components/Toast/StyledToast.tsx +13 -7
- package/src/components/Toast/Toast.tsx +34 -9
- package/src/components/Toast/ToastProvider.tsx +15 -12
- package/src/components/Toast/__tests__/Toast.spec.tsx +17 -0
- package/src/components/Toast/__tests__/__snapshots__/Toast.spec.tsx.snap +299 -19
- package/src/components/Toast/types.ts +15 -1
- package/src/components/Typography/Text/StyledText.tsx +7 -1
- package/src/components/Typography/Text/__tests__/StyledText.spec.tsx +1 -0
- package/src/components/Typography/Text/__tests__/__snapshots__/StyledText.spec.tsx.snap +22 -0
- package/src/components/Typography/Text/index.tsx +7 -1
- package/src/index.ts +2 -0
- package/src/theme/__tests__/__snapshots__/index.spec.ts.snap +76 -23
- package/src/theme/components/.eslintrc.json +10 -0
- package/src/theme/components/alert.ts +5 -1
- package/src/theme/components/avatar.ts +2 -0
- package/src/theme/components/card.ts +6 -7
- package/src/theme/components/sectionHeading.ts +1 -1
- package/src/theme/components/spinner.ts +19 -7
- package/src/theme/components/tabs.ts +3 -2
- package/src/theme/components/tag.ts +13 -13
- package/src/theme/components/toast.ts +17 -3
- package/src/theme/components/typography.ts +2 -0
- package/src/theme/global/colors/swag.ts +23 -0
- package/src/theme/global/colors/types.ts +23 -0
- package/src/theme/global/colors/work.ts +5 -0
- package/tsconfig.json +4 -15
- package/types/components/Accordion/StyledAccordion.d.ts +14 -14
- package/types/components/Alert/StyledAlert.d.ts +16 -16
- package/types/components/Alert/index.d.ts +1 -1
- package/types/components/Avatar/StyledAvatar.d.ts +16 -16
- package/types/components/Avatar/index.d.ts +2 -2
- package/types/components/Badge/StyledBadge.d.ts +7 -7
- package/types/components/BottomNavigation/StyledBottomNavigation.d.ts +21 -21
- package/types/components/BottomSheet/Header.d.ts +1 -1
- package/types/components/BottomSheet/StyledBottomSheet.d.ts +19 -19
- package/types/components/Box/StyledBox.d.ts +15 -0
- package/types/components/Box/__tests__/helpers.spec.d.ts +1 -0
- package/types/components/Box/__tests__/index.spec.d.ts +1 -0
- package/types/components/Box/config.d.ts +170 -0
- package/types/components/Box/helpers.d.ts +1 -0
- package/types/components/Box/index.d.ts +5 -0
- package/types/components/Box/types.d.ts +31 -0
- package/types/components/Button/LoadingIndicator/StyledLoadingIndicator.d.ts +7 -7
- package/types/components/Button/StyledButton.d.ts +16 -16
- package/types/components/Button/UtilityButton/StyledUtilityButton.d.ts +8 -8
- package/types/components/Calendar/StyledCalendar.d.ts +25 -25
- package/types/components/Calendar/helpers.d.ts +2 -2
- package/types/components/Card/DataCard/StyledDataCard.d.ts +7 -7
- package/types/components/Card/DataCard/index.d.ts +1 -1
- package/types/components/Card/StyledCard.d.ts +7 -6
- package/types/components/Card/index.d.ts +5 -1
- package/types/components/Checkbox/StyledCheckbox.d.ts +10 -10
- package/types/components/Collapse/StyledCollapse.d.ts +8 -8
- package/types/components/ContentNavigator/StyledContentNavigator.d.ts +5 -5
- package/types/components/DatePicker/StyledDatePicker.d.ts +3 -3
- package/types/components/Divider/StyledDivider.d.ts +5 -5
- package/types/components/Drawer/StyledDrawer.d.ts +19 -19
- package/types/components/Empty/StyledEmpty.d.ts +12 -12
- package/types/components/FAB/ActionGroup/StyledActionGroup.d.ts +11 -11
- package/types/components/FAB/ActionGroup/StyledActionItem.d.ts +7 -7
- package/types/components/FAB/StyledFAB.d.ts +8 -8
- package/types/components/Icon/HeroIcon/index.d.ts +3 -3
- package/types/components/List/StyledBasicListItem.d.ts +14 -14
- package/types/components/List/StyledListItem.d.ts +23 -23
- package/types/components/PinInput/StyledPinInput.d.ts +30 -30
- package/types/components/Progress/StyledProgressBar.d.ts +5 -5
- package/types/components/Progress/StyledProgressCircle.d.ts +18 -18
- package/types/components/Radio/StyledRadio.d.ts +9 -9
- package/types/components/RichTextEditor/EditorToolbar.d.ts +1 -1
- package/types/components/RichTextEditor/MentionList.d.ts +1 -1
- package/types/components/RichTextEditor/StyledRichTextEditor.d.ts +6 -6
- package/types/components/RichTextEditor/StyledToolbar.d.ts +9 -9
- package/types/components/RichTextEditor/index.d.ts +2 -2
- package/types/components/SectionHeading/StyledHeading.d.ts +9 -9
- package/types/components/Select/MultiSelect/Option.d.ts +1 -1
- package/types/components/Select/SingleSelect/Option.d.ts +1 -1
- package/types/components/Select/StyledSelect.d.ts +11 -11
- package/types/components/Select/helpers.d.ts +1 -1
- package/types/components/Spinner/AnimatedSpinner.d.ts +3 -1
- package/types/components/Spinner/StyledSpinner.d.ts +14 -12
- package/types/components/Spinner/index.d.ts +5 -1
- package/types/components/Switch/StyledSwitch.d.ts +5 -5
- package/types/components/Tabs/StyledScrollableTabs.d.ts +24 -22
- package/types/components/Tabs/StyledTabs.d.ts +26 -20
- package/types/components/Tabs/TabWithBadge.d.ts +17 -0
- package/types/components/Tabs/__tests__/TabWithBadge.spec.d.ts +1 -0
- package/types/components/Tabs/index.d.ts +3 -1
- package/types/components/Tag/StyledTag.d.ts +6 -6
- package/types/components/Tag/index.d.ts +1 -1
- package/types/components/TextInput/StyledTextInput.d.ts +44 -44
- package/types/components/TextInput/index.d.ts +5 -5
- package/types/components/TimePicker/StyledTimePicker.d.ts +3 -3
- package/types/components/Toast/StyledToast.d.ts +19 -18
- package/types/components/Toast/types.d.ts +2 -1
- package/types/components/Toolbar/StyledToolbar.d.ts +9 -9
- package/types/components/Typography/Text/StyledText.d.ts +4 -4
- package/types/components/Typography/Text/index.d.ts +1 -1
- package/types/index.d.ts +2 -1
- package/types/testHelpers/renderWithTheme.d.ts +1 -1
- package/types/theme/ThemeSwitcher.d.ts +1 -1
- package/types/theme/components/alert.d.ts +5 -1
- package/types/theme/components/avatar.d.ts +2 -0
- package/types/theme/components/card.d.ts +6 -7
- package/types/theme/components/spinner.d.ts +17 -5
- package/types/theme/components/tabs.d.ts +1 -0
- package/types/theme/components/tag.d.ts +2 -2
- package/types/theme/components/toast.d.ts +18 -2
- package/types/theme/components/typography.d.ts +2 -0
- package/types/theme/global/colors/types.d.ts +17 -0
- package/types/theme/global/index.d.ts +17 -0
- package/types/utils/hooks.d.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hero-design/rn",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.20.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@emotion/native": "^11.9.3",
|
|
22
22
|
"@emotion/react": "^11.9.3",
|
|
23
|
-
"@hero-design/colors": "7.
|
|
23
|
+
"@hero-design/colors": "7.20.0",
|
|
24
24
|
"date-fns": "^2.16.1",
|
|
25
25
|
"events": "^3.2.0",
|
|
26
26
|
"hero-editor": "^1.9.9"
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"eslint-config-prettier": "^8.5.0",
|
|
63
63
|
"eslint-plugin-import": "^2.25.4",
|
|
64
64
|
"eslint-plugin-jsx-a11y": "^6.5.1",
|
|
65
|
+
"eslint-plugin-prettier": "^4.0.0",
|
|
65
66
|
"eslint-plugin-react": "^7.28.0",
|
|
66
67
|
"eslint-plugin-react-hooks": "^4.3.0",
|
|
67
68
|
"jest": "^27.3.1",
|
|
@@ -76,7 +77,6 @@
|
|
|
76
77
|
"rollup": "^2.68.0",
|
|
77
78
|
"rollup-plugin-copy": "^3.4.0",
|
|
78
79
|
"rollup-plugin-flow": "^1.1.1",
|
|
79
|
-
"ts-jest": "^27.0.7"
|
|
80
|
-
"typescript": "^4.5.5"
|
|
80
|
+
"ts-jest": "^27.0.7"
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -5,7 +5,7 @@ import type { ViewProps } from 'react-native';
|
|
|
5
5
|
|
|
6
6
|
const Container = styled(View)<{
|
|
7
7
|
themeVariant: 'default' | 'round';
|
|
8
|
-
themeIntent: 'success' | 'info' | 'warning' | 'error';
|
|
8
|
+
themeIntent: 'success' | 'info' | 'warning' | 'error' | 'notification';
|
|
9
9
|
}>(({ theme, themeVariant = 'default', themeIntent }) => ({
|
|
10
10
|
borderRadius: themeVariant === 'round' ? theme.__hd__.alert.radii.default : 0,
|
|
11
11
|
backgroundColor: theme.__hd__.alert.colors[themeIntent],
|
|
@@ -15,17 +15,17 @@ const Container = styled(View)<{
|
|
|
15
15
|
|
|
16
16
|
const IconContainer = styled(View)<ViewProps>(({ theme }) => ({
|
|
17
17
|
alignItems: 'center',
|
|
18
|
-
paddingLeft: theme.__hd__.alert.space.
|
|
18
|
+
paddingLeft: theme.__hd__.alert.space.iconLeftPadding,
|
|
19
19
|
}));
|
|
20
20
|
|
|
21
21
|
const TextContainer = styled(View)<ViewProps>(({ theme }) => ({
|
|
22
|
-
paddingHorizontal: theme.__hd__.alert.space.
|
|
22
|
+
paddingHorizontal: theme.__hd__.alert.space.textPaddingHorizontal,
|
|
23
23
|
flex: 1,
|
|
24
24
|
}));
|
|
25
25
|
|
|
26
26
|
const ContentContainer = styled(View)<{ showDivider: boolean }>(
|
|
27
27
|
({ theme, showDivider }) => ({
|
|
28
|
-
paddingVertical: theme.__hd__.alert.space.
|
|
28
|
+
paddingVertical: theme.__hd__.alert.space.contentPaddingHorizontal,
|
|
29
29
|
flex: 1,
|
|
30
30
|
borderRightWidth: showDivider ? theme.__hd__.alert.borderWidths.base : 0,
|
|
31
31
|
borderColor: theme.__hd__.alert.colors.divider,
|
|
@@ -36,7 +36,7 @@ const ContentContainer = styled(View)<{ showDivider: boolean }>(
|
|
|
36
36
|
const CTAWrapper = styled(TouchableOpacity)<
|
|
37
37
|
ComponentProps<typeof TouchableOpacity>
|
|
38
38
|
>(({ theme }) => ({
|
|
39
|
-
paddingHorizontal: theme.__hd__.alert.space.
|
|
39
|
+
paddingHorizontal: theme.__hd__.alert.space.ctaPadding,
|
|
40
40
|
justifyContent: 'center',
|
|
41
41
|
}));
|
|
42
42
|
|
|
@@ -25,7 +25,7 @@ exports[`Alert Icon render custom icon correctly 1`] = `
|
|
|
25
25
|
"borderRightWidth": 0,
|
|
26
26
|
"flex": 1,
|
|
27
27
|
"flexDirection": "row",
|
|
28
|
-
"paddingVertical":
|
|
28
|
+
"paddingVertical": 12,
|
|
29
29
|
},
|
|
30
30
|
undefined,
|
|
31
31
|
]
|
|
@@ -36,7 +36,7 @@ exports[`Alert Icon render custom icon correctly 1`] = `
|
|
|
36
36
|
Array [
|
|
37
37
|
Object {
|
|
38
38
|
"alignItems": "center",
|
|
39
|
-
"paddingLeft":
|
|
39
|
+
"paddingLeft": 12,
|
|
40
40
|
},
|
|
41
41
|
undefined,
|
|
42
42
|
]
|
|
@@ -63,7 +63,7 @@ exports[`Alert Icon render custom icon correctly 1`] = `
|
|
|
63
63
|
Array [
|
|
64
64
|
Object {
|
|
65
65
|
"flex": 1,
|
|
66
|
-
"paddingHorizontal":
|
|
66
|
+
"paddingHorizontal": 12,
|
|
67
67
|
},
|
|
68
68
|
undefined,
|
|
69
69
|
]
|
|
@@ -118,7 +118,7 @@ exports[`Alert renders correctly when intent is error 1`] = `
|
|
|
118
118
|
"borderRightWidth": 1,
|
|
119
119
|
"flex": 1,
|
|
120
120
|
"flexDirection": "row",
|
|
121
|
-
"paddingVertical":
|
|
121
|
+
"paddingVertical": 12,
|
|
122
122
|
},
|
|
123
123
|
undefined,
|
|
124
124
|
]
|
|
@@ -129,7 +129,7 @@ exports[`Alert renders correctly when intent is error 1`] = `
|
|
|
129
129
|
Array [
|
|
130
130
|
Object {
|
|
131
131
|
"alignItems": "center",
|
|
132
|
-
"paddingLeft":
|
|
132
|
+
"paddingLeft": 12,
|
|
133
133
|
},
|
|
134
134
|
undefined,
|
|
135
135
|
]
|
|
@@ -156,7 +156,7 @@ exports[`Alert renders correctly when intent is error 1`] = `
|
|
|
156
156
|
Array [
|
|
157
157
|
Object {
|
|
158
158
|
"flex": 1,
|
|
159
|
-
"paddingHorizontal":
|
|
159
|
+
"paddingHorizontal": 12,
|
|
160
160
|
},
|
|
161
161
|
undefined,
|
|
162
162
|
]
|
|
@@ -218,7 +218,7 @@ exports[`Alert renders correctly when intent is error 1`] = `
|
|
|
218
218
|
Object {
|
|
219
219
|
"justifyContent": "center",
|
|
220
220
|
"opacity": 1,
|
|
221
|
-
"paddingHorizontal":
|
|
221
|
+
"paddingHorizontal": 12,
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
testID="alert-close-icon"
|
|
@@ -266,7 +266,7 @@ exports[`Alert renders correctly when intent is info 1`] = `
|
|
|
266
266
|
"borderRightWidth": 1,
|
|
267
267
|
"flex": 1,
|
|
268
268
|
"flexDirection": "row",
|
|
269
|
-
"paddingVertical":
|
|
269
|
+
"paddingVertical": 12,
|
|
270
270
|
},
|
|
271
271
|
undefined,
|
|
272
272
|
]
|
|
@@ -277,7 +277,7 @@ exports[`Alert renders correctly when intent is info 1`] = `
|
|
|
277
277
|
Array [
|
|
278
278
|
Object {
|
|
279
279
|
"alignItems": "center",
|
|
280
|
-
"paddingLeft":
|
|
280
|
+
"paddingLeft": 12,
|
|
281
281
|
},
|
|
282
282
|
undefined,
|
|
283
283
|
]
|
|
@@ -304,7 +304,7 @@ exports[`Alert renders correctly when intent is info 1`] = `
|
|
|
304
304
|
Array [
|
|
305
305
|
Object {
|
|
306
306
|
"flex": 1,
|
|
307
|
-
"paddingHorizontal":
|
|
307
|
+
"paddingHorizontal": 12,
|
|
308
308
|
},
|
|
309
309
|
undefined,
|
|
310
310
|
]
|
|
@@ -366,7 +366,128 @@ exports[`Alert renders correctly when intent is info 1`] = `
|
|
|
366
366
|
Object {
|
|
367
367
|
"justifyContent": "center",
|
|
368
368
|
"opacity": 1,
|
|
369
|
-
"paddingHorizontal":
|
|
369
|
+
"paddingHorizontal": 12,
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
testID="alert-close-icon"
|
|
373
|
+
>
|
|
374
|
+
<HeroIcon
|
|
375
|
+
name="cancel"
|
|
376
|
+
style={
|
|
377
|
+
Array [
|
|
378
|
+
Object {
|
|
379
|
+
"color": "#001f23",
|
|
380
|
+
"fontSize": 20,
|
|
381
|
+
},
|
|
382
|
+
undefined,
|
|
383
|
+
]
|
|
384
|
+
}
|
|
385
|
+
themeIntent="text"
|
|
386
|
+
themeSize="small"
|
|
387
|
+
/>
|
|
388
|
+
</View>
|
|
389
|
+
</View>
|
|
390
|
+
`;
|
|
391
|
+
|
|
392
|
+
exports[`Alert renders correctly when intent is notification 1`] = `
|
|
393
|
+
<View
|
|
394
|
+
style={
|
|
395
|
+
Array [
|
|
396
|
+
Object {
|
|
397
|
+
"backgroundColor": "#ffffff",
|
|
398
|
+
"borderRadius": 0,
|
|
399
|
+
"flexDirection": "row",
|
|
400
|
+
"minHeight": 48,
|
|
401
|
+
},
|
|
402
|
+
undefined,
|
|
403
|
+
]
|
|
404
|
+
}
|
|
405
|
+
themeIntent="notification"
|
|
406
|
+
themeVariant="default"
|
|
407
|
+
>
|
|
408
|
+
<View
|
|
409
|
+
showDivider={true}
|
|
410
|
+
style={
|
|
411
|
+
Array [
|
|
412
|
+
Object {
|
|
413
|
+
"borderColor": "#e8e9ea",
|
|
414
|
+
"borderRightWidth": 1,
|
|
415
|
+
"flex": 1,
|
|
416
|
+
"flexDirection": "row",
|
|
417
|
+
"paddingVertical": 12,
|
|
418
|
+
},
|
|
419
|
+
undefined,
|
|
420
|
+
]
|
|
421
|
+
}
|
|
422
|
+
>
|
|
423
|
+
<View
|
|
424
|
+
style={
|
|
425
|
+
Array [
|
|
426
|
+
Object {
|
|
427
|
+
"flex": 1,
|
|
428
|
+
"paddingHorizontal": 12,
|
|
429
|
+
},
|
|
430
|
+
undefined,
|
|
431
|
+
]
|
|
432
|
+
}
|
|
433
|
+
>
|
|
434
|
+
<Text
|
|
435
|
+
style={
|
|
436
|
+
Array [
|
|
437
|
+
Object {
|
|
438
|
+
"color": "#001f23",
|
|
439
|
+
"fontFamily": "BeVietnamPro-SemiBold",
|
|
440
|
+
"fontSize": 14,
|
|
441
|
+
"letterSpacing": 0.42,
|
|
442
|
+
"lineHeight": 22,
|
|
443
|
+
},
|
|
444
|
+
undefined,
|
|
445
|
+
]
|
|
446
|
+
}
|
|
447
|
+
themeFontSize="medium"
|
|
448
|
+
themeFontWeight="semi-bold"
|
|
449
|
+
themeIntent="body"
|
|
450
|
+
>
|
|
451
|
+
Title
|
|
452
|
+
</Text>
|
|
453
|
+
<Text
|
|
454
|
+
style={
|
|
455
|
+
Array [
|
|
456
|
+
Object {
|
|
457
|
+
"color": "#001f23",
|
|
458
|
+
"fontFamily": "BeVietnamPro-Regular",
|
|
459
|
+
"fontSize": 14,
|
|
460
|
+
"letterSpacing": 0.42,
|
|
461
|
+
"lineHeight": 22,
|
|
462
|
+
},
|
|
463
|
+
undefined,
|
|
464
|
+
]
|
|
465
|
+
}
|
|
466
|
+
themeFontSize="medium"
|
|
467
|
+
themeFontWeight="regular"
|
|
468
|
+
themeIntent="body"
|
|
469
|
+
>
|
|
470
|
+
Content
|
|
471
|
+
</Text>
|
|
472
|
+
</View>
|
|
473
|
+
</View>
|
|
474
|
+
<View
|
|
475
|
+
accessible={true}
|
|
476
|
+
collapsable={false}
|
|
477
|
+
focusable={true}
|
|
478
|
+
nativeID="animatedComponent"
|
|
479
|
+
onClick={[Function]}
|
|
480
|
+
onResponderGrant={[Function]}
|
|
481
|
+
onResponderMove={[Function]}
|
|
482
|
+
onResponderRelease={[Function]}
|
|
483
|
+
onResponderTerminate={[Function]}
|
|
484
|
+
onResponderTerminationRequest={[Function]}
|
|
485
|
+
onStartShouldSetResponder={[Function]}
|
|
486
|
+
style={
|
|
487
|
+
Object {
|
|
488
|
+
"justifyContent": "center",
|
|
489
|
+
"opacity": 1,
|
|
490
|
+
"paddingHorizontal": 12,
|
|
370
491
|
}
|
|
371
492
|
}
|
|
372
493
|
testID="alert-close-icon"
|
|
@@ -414,7 +535,7 @@ exports[`Alert renders correctly when intent is success 1`] = `
|
|
|
414
535
|
"borderRightWidth": 1,
|
|
415
536
|
"flex": 1,
|
|
416
537
|
"flexDirection": "row",
|
|
417
|
-
"paddingVertical":
|
|
538
|
+
"paddingVertical": 12,
|
|
418
539
|
},
|
|
419
540
|
undefined,
|
|
420
541
|
]
|
|
@@ -425,7 +546,7 @@ exports[`Alert renders correctly when intent is success 1`] = `
|
|
|
425
546
|
Array [
|
|
426
547
|
Object {
|
|
427
548
|
"alignItems": "center",
|
|
428
|
-
"paddingLeft":
|
|
549
|
+
"paddingLeft": 12,
|
|
429
550
|
},
|
|
430
551
|
undefined,
|
|
431
552
|
]
|
|
@@ -452,7 +573,7 @@ exports[`Alert renders correctly when intent is success 1`] = `
|
|
|
452
573
|
Array [
|
|
453
574
|
Object {
|
|
454
575
|
"flex": 1,
|
|
455
|
-
"paddingHorizontal":
|
|
576
|
+
"paddingHorizontal": 12,
|
|
456
577
|
},
|
|
457
578
|
undefined,
|
|
458
579
|
]
|
|
@@ -514,7 +635,7 @@ exports[`Alert renders correctly when intent is success 1`] = `
|
|
|
514
635
|
Object {
|
|
515
636
|
"justifyContent": "center",
|
|
516
637
|
"opacity": 1,
|
|
517
|
-
"paddingHorizontal":
|
|
638
|
+
"paddingHorizontal": 12,
|
|
518
639
|
}
|
|
519
640
|
}
|
|
520
641
|
testID="alert-close-icon"
|
|
@@ -562,7 +683,7 @@ exports[`Alert renders correctly when intent is warning 1`] = `
|
|
|
562
683
|
"borderRightWidth": 1,
|
|
563
684
|
"flex": 1,
|
|
564
685
|
"flexDirection": "row",
|
|
565
|
-
"paddingVertical":
|
|
686
|
+
"paddingVertical": 12,
|
|
566
687
|
},
|
|
567
688
|
undefined,
|
|
568
689
|
]
|
|
@@ -573,7 +694,7 @@ exports[`Alert renders correctly when intent is warning 1`] = `
|
|
|
573
694
|
Array [
|
|
574
695
|
Object {
|
|
575
696
|
"alignItems": "center",
|
|
576
|
-
"paddingLeft":
|
|
697
|
+
"paddingLeft": 12,
|
|
577
698
|
},
|
|
578
699
|
undefined,
|
|
579
700
|
]
|
|
@@ -600,7 +721,7 @@ exports[`Alert renders correctly when intent is warning 1`] = `
|
|
|
600
721
|
Array [
|
|
601
722
|
Object {
|
|
602
723
|
"flex": 1,
|
|
603
|
-
"paddingHorizontal":
|
|
724
|
+
"paddingHorizontal": 12,
|
|
604
725
|
},
|
|
605
726
|
undefined,
|
|
606
727
|
]
|
|
@@ -662,7 +783,7 @@ exports[`Alert renders correctly when intent is warning 1`] = `
|
|
|
662
783
|
Object {
|
|
663
784
|
"justifyContent": "center",
|
|
664
785
|
"opacity": 1,
|
|
665
|
-
"paddingHorizontal":
|
|
786
|
+
"paddingHorizontal": 12,
|
|
666
787
|
}
|
|
667
788
|
}
|
|
668
789
|
testID="alert-close-icon"
|
|
@@ -21,12 +21,33 @@ describe('Alert', () => {
|
|
|
21
21
|
);
|
|
22
22
|
|
|
23
23
|
expect(toJSON()).toMatchSnapshot();
|
|
24
|
+
// Has default icon
|
|
24
25
|
expect(getByTestId('alert-left-icon')).toBeDefined();
|
|
26
|
+
|
|
25
27
|
expect(getByText('Title')).toBeDefined();
|
|
26
28
|
expect(getByText('Content')).toBeDefined();
|
|
27
29
|
expect(getByTestId('alert-close-icon')).toBeDefined();
|
|
28
30
|
});
|
|
29
31
|
|
|
32
|
+
it('renders correctly when intent is notification', () => {
|
|
33
|
+
const { toJSON, getByText, queryByTestId } = renderWithTheme(
|
|
34
|
+
<Alert
|
|
35
|
+
title="Title"
|
|
36
|
+
content="Content"
|
|
37
|
+
intent="notification"
|
|
38
|
+
onClose={jest.fn()}
|
|
39
|
+
/>
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
expect(toJSON()).toMatchSnapshot();
|
|
43
|
+
// Has no default icon
|
|
44
|
+
expect(queryByTestId('alert-left-icon')).toBeNull();
|
|
45
|
+
|
|
46
|
+
expect(getByText('Title')).toBeDefined();
|
|
47
|
+
expect(getByText('Content')).toBeDefined();
|
|
48
|
+
expect(queryByTestId('alert-close-icon')).toBeTruthy();
|
|
49
|
+
});
|
|
50
|
+
|
|
30
51
|
describe('Icon', () => {
|
|
31
52
|
it('not render icon when icon prop is null', () => {
|
|
32
53
|
const { queryByTestId } = renderWithTheme(
|
|
@@ -13,8 +13,8 @@ import {
|
|
|
13
13
|
import type { IconName } from '../Icon';
|
|
14
14
|
|
|
15
15
|
const getIntentIcon = (
|
|
16
|
-
intent: 'success' | 'info' | 'warning' | 'error'
|
|
17
|
-
)
|
|
16
|
+
intent: 'success' | 'info' | 'warning' | 'error' | 'notification'
|
|
17
|
+
) => {
|
|
18
18
|
switch (intent) {
|
|
19
19
|
case 'success':
|
|
20
20
|
return 'circle-ok';
|
|
@@ -24,9 +24,18 @@ const getIntentIcon = (
|
|
|
24
24
|
return 'circle-info';
|
|
25
25
|
case 'error':
|
|
26
26
|
return 'circle-warning';
|
|
27
|
+
default:
|
|
28
|
+
return undefined;
|
|
27
29
|
}
|
|
28
30
|
};
|
|
29
31
|
|
|
32
|
+
const AlertIcon = ({ icon }: { icon?: IconName }) =>
|
|
33
|
+
icon ? (
|
|
34
|
+
<IconContainer testID="alert-left-icon">
|
|
35
|
+
<Icon icon={icon} size="small" />
|
|
36
|
+
</IconContainer>
|
|
37
|
+
) : null;
|
|
38
|
+
|
|
30
39
|
interface AlertProps {
|
|
31
40
|
/**
|
|
32
41
|
* Alert title.
|
|
@@ -46,7 +55,7 @@ interface AlertProps {
|
|
|
46
55
|
/**
|
|
47
56
|
* Visual intent color to apply to alert.
|
|
48
57
|
*/
|
|
49
|
-
intent?: 'success' | 'info' | 'warning' | 'error';
|
|
58
|
+
intent?: 'success' | 'info' | 'warning' | 'error' | 'notification';
|
|
50
59
|
/**
|
|
51
60
|
* Closing callback. When onClose is available, an X button will be rendered on the right side of alert. The callback will be called when user clicks on X button.
|
|
52
61
|
*/
|
|
@@ -83,9 +92,7 @@ const Alert = ({
|
|
|
83
92
|
>
|
|
84
93
|
<ContentContainer showDivider={!!onClose}>
|
|
85
94
|
{icon !== null ? (
|
|
86
|
-
<
|
|
87
|
-
<Icon icon={icon || getIntentIcon(intent)} size="small" />
|
|
88
|
-
</IconContainer>
|
|
95
|
+
<AlertIcon icon={icon || getIntentIcon(intent)} />
|
|
89
96
|
) : null}
|
|
90
97
|
<TextContainer>
|
|
91
98
|
{typeof title === 'string' ? (
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import styled from '@emotion/native';
|
|
2
|
+
import { Theme } from '@emotion/react';
|
|
3
|
+
import { View } from 'react-native';
|
|
4
|
+
import { StyleProps, ThemeScale } from './types';
|
|
5
|
+
|
|
6
|
+
import config, { ConfigType, flexPropsKey } from './config';
|
|
7
|
+
import { pick } from './helpers';
|
|
8
|
+
|
|
9
|
+
export const getThemeValue = (
|
|
10
|
+
theme: Theme,
|
|
11
|
+
key: keyof StyleProps,
|
|
12
|
+
props: StyleProps
|
|
13
|
+
) => {
|
|
14
|
+
const propConfig = config[key];
|
|
15
|
+
const propValue = props[key];
|
|
16
|
+
|
|
17
|
+
if (!propValue) return undefined;
|
|
18
|
+
|
|
19
|
+
const { scale, property } = propConfig;
|
|
20
|
+
|
|
21
|
+
switch (scale) {
|
|
22
|
+
case 'colors':
|
|
23
|
+
return { [property]: theme.colors[propValue as ThemeScale['colors']] };
|
|
24
|
+
case 'space':
|
|
25
|
+
return { [property]: theme.space[propValue as ThemeScale['space']] };
|
|
26
|
+
case 'radii':
|
|
27
|
+
return { [property]: theme.radii[propValue as ThemeScale['radii']] };
|
|
28
|
+
case 'borderWidths':
|
|
29
|
+
return {
|
|
30
|
+
[property]: theme.borderWidths[propValue as ThemeScale['borderWidths']],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const mapStylePropToThemeValue = (theme: Theme, props: StyleProps) => {
|
|
36
|
+
const entries = Object.keys(props) as Array<keyof StyleProps>;
|
|
37
|
+
return entries.reduce(
|
|
38
|
+
(result, key) => ({
|
|
39
|
+
...result,
|
|
40
|
+
...getThemeValue(theme, key, props),
|
|
41
|
+
}),
|
|
42
|
+
{}
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const configKeys = Object.keys(config) as Array<keyof ConfigType>;
|
|
47
|
+
|
|
48
|
+
const StyledBox = styled(View)<StyleProps>(({ theme, ...otherProps }) => {
|
|
49
|
+
const styleProps = pick(configKeys, otherProps);
|
|
50
|
+
const flexProps = pick([...flexPropsKey], otherProps);
|
|
51
|
+
return { ...mapStylePropToThemeValue(theme, styleProps), ...flexProps };
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export { StyledBox };
|