@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.
Files changed (61) hide show
  1. package/lib/commonjs/TransitionConfigs/TransitionPresets.js +2 -2
  2. package/lib/commonjs/index.js +9 -9
  3. package/lib/commonjs/navigators/createBottomTabNavigator.js +11 -11
  4. package/lib/commonjs/navigators/createBottomTabNavigator.js.map +1 -1
  5. package/lib/commonjs/package.json +1 -0
  6. package/lib/commonjs/utils/useBottomTabBarHeight.js +1 -1
  7. package/lib/commonjs/views/Badge.js +6 -4
  8. package/lib/commonjs/views/Badge.js.map +1 -1
  9. package/lib/commonjs/views/BottomTabBar.js +148 -118
  10. package/lib/commonjs/views/BottomTabBar.js.map +1 -1
  11. package/lib/commonjs/views/BottomTabItem.js +109 -63
  12. package/lib/commonjs/views/BottomTabItem.js.map +1 -1
  13. package/lib/commonjs/views/BottomTabView.js +108 -97
  14. package/lib/commonjs/views/BottomTabView.js.map +1 -1
  15. package/lib/commonjs/views/ScreenFallback.js +15 -9
  16. package/lib/commonjs/views/ScreenFallback.js.map +1 -1
  17. package/lib/commonjs/views/TabBarIcon.js +59 -37
  18. package/lib/commonjs/views/TabBarIcon.js.map +1 -1
  19. package/lib/module/TransitionConfigs/TransitionPresets.js +2 -2
  20. package/lib/module/TransitionConfigs/TransitionPresets.js.map +1 -1
  21. package/lib/module/index.js +9 -9
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/module/navigators/createBottomTabNavigator.js +11 -9
  24. package/lib/module/navigators/createBottomTabNavigator.js.map +1 -1
  25. package/lib/module/package.json +1 -0
  26. package/lib/module/utils/useBottomTabBarHeight.js +1 -1
  27. package/lib/module/utils/useBottomTabBarHeight.js.map +1 -1
  28. package/lib/module/views/Badge.js +6 -4
  29. package/lib/module/views/Badge.js.map +1 -1
  30. package/lib/module/views/BottomTabBar.js +148 -118
  31. package/lib/module/views/BottomTabBar.js.map +1 -1
  32. package/lib/module/views/BottomTabItem.js +110 -64
  33. package/lib/module/views/BottomTabItem.js.map +1 -1
  34. package/lib/module/views/BottomTabView.js +108 -97
  35. package/lib/module/views/BottomTabView.js.map +1 -1
  36. package/lib/module/views/ScreenFallback.js +15 -9
  37. package/lib/module/views/ScreenFallback.js.map +1 -1
  38. package/lib/module/views/TabBarIcon.js +59 -37
  39. package/lib/module/views/TabBarIcon.js.map +1 -1
  40. package/lib/typescript/src/navigators/createBottomTabNavigator.d.ts +2 -3
  41. package/lib/typescript/src/navigators/createBottomTabNavigator.d.ts.map +1 -1
  42. package/lib/typescript/src/types.d.ts +5 -0
  43. package/lib/typescript/src/types.d.ts.map +1 -1
  44. package/lib/typescript/src/views/Badge.d.ts +1 -2
  45. package/lib/typescript/src/views/Badge.d.ts.map +1 -1
  46. package/lib/typescript/src/views/BottomTabBar.d.ts +2 -3
  47. package/lib/typescript/src/views/BottomTabBar.d.ts.map +1 -1
  48. package/lib/typescript/src/views/BottomTabItem.d.ts +9 -1
  49. package/lib/typescript/src/views/BottomTabItem.d.ts.map +1 -1
  50. package/lib/typescript/src/views/BottomTabView.d.ts +1 -2
  51. package/lib/typescript/src/views/BottomTabView.d.ts.map +1 -1
  52. package/lib/typescript/src/views/ScreenFallback.d.ts +2 -2
  53. package/lib/typescript/src/views/ScreenFallback.d.ts.map +1 -1
  54. package/lib/typescript/src/views/TabBarIcon.d.ts +3 -2
  55. package/lib/typescript/src/views/TabBarIcon.d.ts.map +1 -1
  56. package/package.json +30 -14
  57. package/src/navigators/createBottomTabNavigator.tsx +1 -4
  58. package/src/types.tsx +7 -0
  59. package/src/views/BottomTabBar.tsx +90 -60
  60. package/src/views/BottomTabItem.tsx +156 -63
  61. package/src/views/TabBarIcon.tsx +55 -18
@@ -12,7 +12,8 @@ import { Badge } from './Badge';
12
12
 
13
13
  type Props = {
14
14
  route: Route<string>;
15
- horizontal: boolean;
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
- const ICON_SIZE = 25;
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
- horizontal,
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={[horizontal ? styles.iconHorizontal : styles.iconVertical, 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 style={[styles.icon, { opacity: activeOpacity }]}>
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: ICON_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: ICON_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={ICON_SIZE * 0.75}
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
- iconVertical: {
90
- width: ICON_SIZE,
91
- height: ICON_SIZE,
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
- iconHorizontal: {
94
- width: ICON_SIZE,
95
- height: ICON_SIZE,
130
+ wrapperMaterial: {
131
+ width: ICON_SIZE_MATERIAL,
132
+ height: ICON_SIZE_MATERIAL,
96
133
  },
97
134
  badge: {
98
135
  position: 'absolute',
99
- end: -5,
100
- top: -5,
136
+ end: -3,
137
+ top: -3,
101
138
  },
102
139
  });