@react-navigation/bottom-tabs 7.0.0-rc.2 → 7.0.0-rc.21
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/lib/commonjs/TransitionConfigs/TransitionPresets.js +2 -2
- package/lib/commonjs/index.js +9 -9
- package/lib/commonjs/navigators/createBottomTabNavigator.js +11 -11
- package/lib/commonjs/navigators/createBottomTabNavigator.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/utils/useBottomTabBarHeight.js +1 -1
- package/lib/commonjs/views/Badge.js +6 -4
- package/lib/commonjs/views/Badge.js.map +1 -1
- package/lib/commonjs/views/BottomTabBar.js +148 -118
- package/lib/commonjs/views/BottomTabBar.js.map +1 -1
- package/lib/commonjs/views/BottomTabItem.js +109 -63
- package/lib/commonjs/views/BottomTabItem.js.map +1 -1
- package/lib/commonjs/views/BottomTabView.js +108 -97
- package/lib/commonjs/views/BottomTabView.js.map +1 -1
- package/lib/commonjs/views/ScreenFallback.js +15 -9
- package/lib/commonjs/views/ScreenFallback.js.map +1 -1
- package/lib/commonjs/views/TabBarIcon.js +59 -37
- package/lib/commonjs/views/TabBarIcon.js.map +1 -1
- package/lib/module/TransitionConfigs/TransitionPresets.js +2 -2
- package/lib/module/TransitionConfigs/TransitionPresets.js.map +1 -1
- package/lib/module/index.js +9 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigators/createBottomTabNavigator.js +11 -9
- package/lib/module/navigators/createBottomTabNavigator.js.map +1 -1
- package/lib/module/package.json +1 -0
- package/lib/module/utils/useBottomTabBarHeight.js +1 -1
- package/lib/module/utils/useBottomTabBarHeight.js.map +1 -1
- package/lib/module/views/Badge.js +6 -4
- package/lib/module/views/Badge.js.map +1 -1
- package/lib/module/views/BottomTabBar.js +148 -118
- package/lib/module/views/BottomTabBar.js.map +1 -1
- package/lib/module/views/BottomTabItem.js +110 -64
- package/lib/module/views/BottomTabItem.js.map +1 -1
- package/lib/module/views/BottomTabView.js +108 -97
- package/lib/module/views/BottomTabView.js.map +1 -1
- package/lib/module/views/ScreenFallback.js +15 -9
- package/lib/module/views/ScreenFallback.js.map +1 -1
- package/lib/module/views/TabBarIcon.js +59 -37
- package/lib/module/views/TabBarIcon.js.map +1 -1
- package/lib/typescript/src/navigators/createBottomTabNavigator.d.ts +2 -3
- package/lib/typescript/src/navigators/createBottomTabNavigator.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +5 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/views/Badge.d.ts +1 -2
- package/lib/typescript/src/views/Badge.d.ts.map +1 -1
- package/lib/typescript/src/views/BottomTabBar.d.ts +2 -3
- package/lib/typescript/src/views/BottomTabBar.d.ts.map +1 -1
- package/lib/typescript/src/views/BottomTabItem.d.ts +9 -1
- package/lib/typescript/src/views/BottomTabItem.d.ts.map +1 -1
- package/lib/typescript/src/views/BottomTabView.d.ts +1 -2
- package/lib/typescript/src/views/BottomTabView.d.ts.map +1 -1
- package/lib/typescript/src/views/ScreenFallback.d.ts +2 -2
- package/lib/typescript/src/views/ScreenFallback.d.ts.map +1 -1
- package/lib/typescript/src/views/TabBarIcon.d.ts +3 -2
- package/lib/typescript/src/views/TabBarIcon.d.ts.map +1 -1
- package/package.json +30 -14
- package/src/navigators/createBottomTabNavigator.tsx +1 -4
- package/src/types.tsx +7 -0
- package/src/views/BottomTabBar.tsx +90 -60
- package/src/views/BottomTabItem.tsx +156 -63
- package/src/views/TabBarIcon.tsx +55 -18
package/src/views/TabBarIcon.tsx
CHANGED
|
@@ -12,7 +12,8 @@ import { Badge } from './Badge';
|
|
|
12
12
|
|
|
13
13
|
type Props = {
|
|
14
14
|
route: Route<string>;
|
|
15
|
-
|
|
15
|
+
variant: 'uikit' | 'material';
|
|
16
|
+
size: 'compact' | 'regular';
|
|
16
17
|
badge?: string | number;
|
|
17
18
|
badgeStyle?: StyleProp<TextStyle>;
|
|
18
19
|
activeOpacity: number;
|
|
@@ -27,11 +28,22 @@ type Props = {
|
|
|
27
28
|
style: StyleProp<ViewStyle>;
|
|
28
29
|
};
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Icon sizes taken from Apple HIG
|
|
33
|
+
* https://developer.apple.com/design/human-interface-guidelines/tab-bars
|
|
34
|
+
*/
|
|
35
|
+
const ICON_SIZE_WIDE = 31;
|
|
36
|
+
const ICON_SIZE_WIDE_COMPACT = 23;
|
|
37
|
+
const ICON_SIZE_TALL = 28;
|
|
38
|
+
const ICON_SIZE_TALL_COMPACT = 20;
|
|
39
|
+
const ICON_SIZE_ROUND = 25;
|
|
40
|
+
const ICON_SIZE_ROUND_COMPACT = 18;
|
|
41
|
+
const ICON_SIZE_MATERIAL = 24;
|
|
31
42
|
|
|
32
43
|
export function TabBarIcon({
|
|
33
44
|
route: _,
|
|
34
|
-
|
|
45
|
+
variant,
|
|
46
|
+
size,
|
|
35
47
|
badge,
|
|
36
48
|
badgeStyle,
|
|
37
49
|
activeOpacity,
|
|
@@ -41,30 +53,53 @@ export function TabBarIcon({
|
|
|
41
53
|
renderIcon,
|
|
42
54
|
style,
|
|
43
55
|
}: Props) {
|
|
56
|
+
const iconSize =
|
|
57
|
+
variant === 'material'
|
|
58
|
+
? ICON_SIZE_MATERIAL
|
|
59
|
+
: size === 'compact'
|
|
60
|
+
? ICON_SIZE_ROUND_COMPACT
|
|
61
|
+
: ICON_SIZE_ROUND;
|
|
62
|
+
|
|
44
63
|
// We render the icon twice at the same position on top of each other:
|
|
45
64
|
// active and inactive one, so we can fade between them.
|
|
46
65
|
return (
|
|
47
66
|
<View
|
|
48
|
-
style={[
|
|
67
|
+
style={[
|
|
68
|
+
variant === 'material'
|
|
69
|
+
? styles.wrapperMaterial
|
|
70
|
+
: size === 'compact'
|
|
71
|
+
? styles.wrapperUikitCompact
|
|
72
|
+
: styles.wrapperUikit,
|
|
73
|
+
style,
|
|
74
|
+
]}
|
|
49
75
|
>
|
|
50
|
-
<View
|
|
76
|
+
<View
|
|
77
|
+
style={[
|
|
78
|
+
styles.icon,
|
|
79
|
+
{
|
|
80
|
+
opacity: activeOpacity,
|
|
81
|
+
// Workaround for react-native >= 0.54 layout bug
|
|
82
|
+
minWidth: iconSize,
|
|
83
|
+
},
|
|
84
|
+
]}
|
|
85
|
+
>
|
|
51
86
|
{renderIcon({
|
|
52
87
|
focused: true,
|
|
53
|
-
size:
|
|
88
|
+
size: iconSize,
|
|
54
89
|
color: activeTintColor,
|
|
55
90
|
})}
|
|
56
91
|
</View>
|
|
57
92
|
<View style={[styles.icon, { opacity: inactiveOpacity }]}>
|
|
58
93
|
{renderIcon({
|
|
59
94
|
focused: false,
|
|
60
|
-
size:
|
|
95
|
+
size: iconSize,
|
|
61
96
|
color: inactiveTintColor,
|
|
62
97
|
})}
|
|
63
98
|
</View>
|
|
64
99
|
<Badge
|
|
65
100
|
visible={badge != null}
|
|
66
101
|
style={[styles.badge, badgeStyle]}
|
|
67
|
-
size={
|
|
102
|
+
size={iconSize * 0.75}
|
|
68
103
|
>
|
|
69
104
|
{badge}
|
|
70
105
|
</Badge>
|
|
@@ -83,20 +118,22 @@ const styles = StyleSheet.create({
|
|
|
83
118
|
justifyContent: 'center',
|
|
84
119
|
height: '100%',
|
|
85
120
|
width: '100%',
|
|
86
|
-
// Workaround for react-native >= 0.54 layout bug
|
|
87
|
-
minWidth: ICON_SIZE,
|
|
88
121
|
},
|
|
89
|
-
|
|
90
|
-
width:
|
|
91
|
-
height:
|
|
122
|
+
wrapperUikit: {
|
|
123
|
+
width: ICON_SIZE_WIDE,
|
|
124
|
+
height: ICON_SIZE_TALL,
|
|
125
|
+
},
|
|
126
|
+
wrapperUikitCompact: {
|
|
127
|
+
width: ICON_SIZE_WIDE_COMPACT,
|
|
128
|
+
height: ICON_SIZE_TALL_COMPACT,
|
|
92
129
|
},
|
|
93
|
-
|
|
94
|
-
width:
|
|
95
|
-
height:
|
|
130
|
+
wrapperMaterial: {
|
|
131
|
+
width: ICON_SIZE_MATERIAL,
|
|
132
|
+
height: ICON_SIZE_MATERIAL,
|
|
96
133
|
},
|
|
97
134
|
badge: {
|
|
98
135
|
position: 'absolute',
|
|
99
|
-
end: -
|
|
100
|
-
top: -
|
|
136
|
+
end: -3,
|
|
137
|
+
top: -3,
|
|
101
138
|
},
|
|
102
139
|
});
|