@react-navigation/bottom-tabs 7.10.1 → 8.0.0-alpha.1
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/module/index.js +3 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigators/createBottomTabNavigator.js +27 -9
- package/lib/module/navigators/createBottomTabNavigator.js.map +1 -1
- package/lib/module/utils/BottomTabAnimationContext.js +5 -0
- package/lib/module/utils/BottomTabAnimationContext.js.map +1 -0
- package/lib/module/utils/useBottomTabAnimation.js +12 -0
- package/lib/module/utils/useBottomTabAnimation.js.map +1 -0
- package/lib/module/utils/useTabBarPosition.js +34 -0
- package/lib/module/utils/useTabBarPosition.js.map +1 -0
- package/lib/module/views/BottomTabBar.js +46 -49
- package/lib/module/views/BottomTabBar.js.map +1 -1
- package/lib/module/views/BottomTabItem.js +17 -15
- package/lib/module/views/BottomTabItem.js.map +1 -1
- package/lib/module/views/BottomTabViewCommon.js +16 -0
- package/lib/module/views/BottomTabViewCommon.js.map +1 -0
- package/lib/module/views/{BottomTabView.js → BottomTabViewCustom.js} +107 -106
- package/lib/module/views/BottomTabViewCustom.js.map +1 -0
- package/lib/module/views/BottomTabViewNative.android.js +4 -0
- package/lib/module/views/BottomTabViewNative.android.js.map +1 -0
- package/lib/module/views/BottomTabViewNative.ios.js +4 -0
- package/lib/module/views/BottomTabViewNative.ios.js.map +1 -0
- package/lib/module/views/BottomTabViewNative.js +5 -0
- package/lib/module/views/BottomTabViewNative.js.map +1 -0
- package/lib/module/{unstable/NativeBottomTabView.native.js → views/BottomTabViewNativeImpl.js} +103 -80
- package/lib/module/views/BottomTabViewNativeImpl.js.map +1 -0
- package/lib/module/views/ScreenContent.js +39 -0
- package/lib/module/views/ScreenContent.js.map +1 -0
- package/lib/module/views/TabBarIcon.js +62 -4
- package/lib/module/views/TabBarIcon.js.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/navigators/createBottomTabNavigator.d.ts +10 -6
- package/lib/typescript/src/navigators/createBottomTabNavigator.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +392 -114
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/BottomTabAnimationContext.d.ts +4 -0
- package/lib/typescript/src/utils/BottomTabAnimationContext.d.ts.map +1 -0
- package/lib/typescript/src/utils/useBottomTabAnimation.d.ts +2 -0
- package/lib/typescript/src/utils/useBottomTabAnimation.d.ts.map +1 -0
- package/lib/typescript/src/utils/useTabBarPosition.d.ts +3 -0
- package/lib/typescript/src/utils/useTabBarPosition.d.ts.map +1 -0
- package/lib/typescript/src/views/BottomTabBar.d.ts +4 -4
- package/lib/typescript/src/views/BottomTabBar.d.ts.map +1 -1
- package/lib/typescript/src/views/BottomTabItem.d.ts +16 -14
- package/lib/typescript/src/views/BottomTabItem.d.ts.map +1 -1
- package/lib/typescript/src/views/{BottomTabView.d.ts → BottomTabViewCommon.d.ts} +2 -2
- package/lib/typescript/src/views/BottomTabViewCommon.d.ts.map +1 -0
- package/lib/typescript/src/views/BottomTabViewCustom.d.ts +10 -0
- package/lib/typescript/src/views/BottomTabViewCustom.d.ts.map +1 -0
- package/lib/typescript/src/views/BottomTabViewNative.android.d.ts +2 -0
- package/lib/typescript/src/views/BottomTabViewNative.android.d.ts.map +1 -0
- package/lib/typescript/src/views/BottomTabViewNative.d.ts +3 -0
- package/lib/typescript/src/views/BottomTabViewNative.d.ts.map +1 -0
- package/lib/typescript/src/views/BottomTabViewNative.ios.d.ts +2 -0
- package/lib/typescript/src/views/BottomTabViewNative.ios.d.ts.map +1 -0
- package/lib/typescript/src/views/BottomTabViewNativeImpl.d.ts +10 -0
- package/lib/typescript/src/views/BottomTabViewNativeImpl.d.ts.map +1 -0
- package/lib/typescript/src/views/ScreenContent.d.ts +13 -0
- package/lib/typescript/src/views/ScreenContent.d.ts.map +1 -0
- package/lib/typescript/src/views/TabBarIcon.d.ts +10 -10
- package/lib/typescript/src/views/TabBarIcon.d.ts.map +1 -1
- package/package.json +12 -17
- package/src/index.tsx +7 -2
- package/src/navigators/createBottomTabNavigator.tsx +78 -27
- package/src/types.tsx +425 -122
- package/src/utils/BottomTabAnimationContext.tsx +7 -0
- package/src/utils/useBottomTabAnimation.tsx +15 -0
- package/src/utils/useTabBarPosition.tsx +41 -0
- package/src/views/BottomTabBar.tsx +68 -67
- package/src/views/BottomTabItem.tsx +39 -34
- package/src/views/BottomTabViewCommon.tsx +26 -0
- package/src/views/{BottomTabView.tsx → BottomTabViewCustom.tsx} +142 -129
- package/src/views/BottomTabViewNative.android.tsx +1 -0
- package/src/views/BottomTabViewNative.ios.tsx +1 -0
- package/src/views/BottomTabViewNative.tsx +3 -0
- package/src/{unstable/NativeBottomTabView.native.tsx → views/BottomTabViewNativeImpl.tsx} +161 -120
- package/src/views/ScreenContent.tsx +58 -0
- package/src/views/TabBarIcon.tsx +79 -11
- package/lib/module/unstable/NativeBottomTabView.js +0 -6
- package/lib/module/unstable/NativeBottomTabView.js.map +0 -1
- package/lib/module/unstable/NativeBottomTabView.native.js.map +0 -1
- package/lib/module/unstable/NativeScreen/NativeScreen.js +0 -152
- package/lib/module/unstable/NativeScreen/NativeScreen.js.map +0 -1
- package/lib/module/unstable/NativeScreen/debounce.js +0 -12
- package/lib/module/unstable/NativeScreen/debounce.js.map +0 -1
- package/lib/module/unstable/NativeScreen/types.js +0 -4
- package/lib/module/unstable/NativeScreen/types.js.map +0 -1
- package/lib/module/unstable/NativeScreen/useAnimatedHeaderHeight.js +0 -12
- package/lib/module/unstable/NativeScreen/useAnimatedHeaderHeight.js.map +0 -1
- package/lib/module/unstable/NativeScreen/useHeaderConfig.js +0 -304
- package/lib/module/unstable/NativeScreen/useHeaderConfig.js.map +0 -1
- package/lib/module/unstable/createNativeBottomTabNavigator.js +0 -6
- package/lib/module/unstable/createNativeBottomTabNavigator.js.map +0 -1
- package/lib/module/unstable/createNativeBottomTabNavigator.native.js +0 -65
- package/lib/module/unstable/createNativeBottomTabNavigator.native.js.map +0 -1
- package/lib/module/unstable/index.js +0 -16
- package/lib/module/unstable/index.js.map +0 -1
- package/lib/module/unstable/types.js +0 -4
- package/lib/module/unstable/types.js.map +0 -1
- package/lib/module/views/BottomTabView.js.map +0 -1
- package/lib/module/views/ScreenFallback.js +0 -42
- package/lib/module/views/ScreenFallback.js.map +0 -1
- package/lib/typescript/src/unstable/NativeBottomTabView.d.ts +0 -10
- package/lib/typescript/src/unstable/NativeBottomTabView.d.ts.map +0 -1
- package/lib/typescript/src/unstable/NativeBottomTabView.native.d.ts +0 -10
- package/lib/typescript/src/unstable/NativeBottomTabView.native.d.ts.map +0 -1
- package/lib/typescript/src/unstable/NativeScreen/NativeScreen.d.ts +0 -8
- package/lib/typescript/src/unstable/NativeScreen/NativeScreen.d.ts.map +0 -1
- package/lib/typescript/src/unstable/NativeScreen/debounce.d.ts +0 -2
- package/lib/typescript/src/unstable/NativeScreen/debounce.d.ts.map +0 -1
- package/lib/typescript/src/unstable/NativeScreen/types.d.ts +0 -523
- package/lib/typescript/src/unstable/NativeScreen/types.d.ts.map +0 -1
- package/lib/typescript/src/unstable/NativeScreen/useAnimatedHeaderHeight.d.ts +0 -5
- package/lib/typescript/src/unstable/NativeScreen/useAnimatedHeaderHeight.d.ts.map +0 -1
- package/lib/typescript/src/unstable/NativeScreen/useHeaderConfig.d.ts +0 -11
- package/lib/typescript/src/unstable/NativeScreen/useHeaderConfig.d.ts.map +0 -1
- package/lib/typescript/src/unstable/createNativeBottomTabNavigator.d.ts +0 -2
- package/lib/typescript/src/unstable/createNativeBottomTabNavigator.d.ts.map +0 -1
- package/lib/typescript/src/unstable/createNativeBottomTabNavigator.native.d.ts +0 -16
- package/lib/typescript/src/unstable/createNativeBottomTabNavigator.native.d.ts.map +0 -1
- package/lib/typescript/src/unstable/index.d.ts +0 -13
- package/lib/typescript/src/unstable/index.d.ts.map +0 -1
- package/lib/typescript/src/unstable/types.d.ts +0 -319
- package/lib/typescript/src/unstable/types.d.ts.map +0 -1
- package/lib/typescript/src/views/BottomTabView.d.ts.map +0 -1
- package/lib/typescript/src/views/ScreenFallback.d.ts +0 -18
- package/lib/typescript/src/views/ScreenFallback.d.ts.map +0 -1
- package/src/unstable/NativeBottomTabView.tsx +0 -20
- package/src/unstable/NativeScreen/NativeScreen.tsx +0 -212
- package/src/unstable/NativeScreen/debounce.tsx +0 -14
- package/src/unstable/NativeScreen/types.ts +0 -573
- package/src/unstable/NativeScreen/useAnimatedHeaderHeight.tsx +0 -18
- package/src/unstable/NativeScreen/useHeaderConfig.tsx +0 -434
- package/src/unstable/createNativeBottomTabNavigator.native.tsx +0 -116
- package/src/unstable/createNativeBottomTabNavigator.tsx +0 -4
- package/src/unstable/index.tsx +0 -23
- package/src/unstable/types.tsx +0 -403
- package/src/views/ScreenFallback.tsx +0 -50
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { getLabel } from '@react-navigation/elements';
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
+
Color,
|
|
3
4
|
Lazy,
|
|
4
5
|
SafeAreaProviderCompat,
|
|
5
|
-
|
|
6
|
-
} from '@react-navigation/elements';
|
|
6
|
+
} from '@react-navigation/elements/internal';
|
|
7
7
|
import {
|
|
8
8
|
CommonActions,
|
|
9
9
|
NavigationMetaContext,
|
|
@@ -13,36 +13,46 @@ import {
|
|
|
13
13
|
type TabNavigationState,
|
|
14
14
|
useTheme,
|
|
15
15
|
} from '@react-navigation/native';
|
|
16
|
-
import Color from 'color';
|
|
17
16
|
import * as React from 'react';
|
|
18
|
-
import {
|
|
17
|
+
import { Animated, Platform, PlatformColor } from 'react-native';
|
|
19
18
|
import {
|
|
20
19
|
type PlatformIcon,
|
|
21
20
|
Tabs,
|
|
22
21
|
type TabsScreenItemStateAppearance,
|
|
23
22
|
} from 'react-native-screens';
|
|
24
23
|
|
|
25
|
-
import { NativeScreen } from './NativeScreen/NativeScreen';
|
|
26
24
|
import type {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
} from '
|
|
34
|
-
|
|
35
|
-
|
|
25
|
+
BottomTabDescriptorMap,
|
|
26
|
+
BottomTabIcon,
|
|
27
|
+
BottomTabNavigationConfig,
|
|
28
|
+
BottomTabNavigationHelpers,
|
|
29
|
+
} from '../types';
|
|
30
|
+
import { BottomTabAnimationContext } from '../utils/BottomTabAnimationContext';
|
|
31
|
+
import { BottomTabBarHeightContext } from '../utils/BottomTabBarHeightContext';
|
|
32
|
+
import { useTabBarPosition } from '../utils/useTabBarPosition';
|
|
33
|
+
import { ScreenContent } from './ScreenContent';
|
|
34
|
+
|
|
35
|
+
type Props = BottomTabNavigationConfig & {
|
|
36
36
|
state: TabNavigationState<ParamListBase>;
|
|
37
|
-
navigation:
|
|
38
|
-
descriptors:
|
|
37
|
+
navigation: BottomTabNavigationHelpers;
|
|
38
|
+
descriptors: BottomTabDescriptorMap;
|
|
39
39
|
};
|
|
40
40
|
|
|
41
|
+
const ICON_SIZE = Platform.select({
|
|
42
|
+
ios: 25,
|
|
43
|
+
default: 24,
|
|
44
|
+
});
|
|
45
|
+
|
|
41
46
|
const meta = {
|
|
42
47
|
type: 'native-tabs',
|
|
43
48
|
};
|
|
44
49
|
|
|
45
|
-
export function
|
|
50
|
+
export function BottomTabViewNative({
|
|
51
|
+
state,
|
|
52
|
+
navigation,
|
|
53
|
+
descriptors,
|
|
54
|
+
tabBar,
|
|
55
|
+
}: Props) {
|
|
46
56
|
const { dark, colors, fonts } = useTheme();
|
|
47
57
|
|
|
48
58
|
const focusedRouteKey = state.routes[state.index].key;
|
|
@@ -91,45 +101,37 @@ export function NativeBottomTabView({ state, navigation, descriptors }: Props) {
|
|
|
91
101
|
|
|
92
102
|
const inactiveTintColor =
|
|
93
103
|
currentOptions.tabBarInactiveTintColor ??
|
|
94
|
-
Platform.select
|
|
95
|
-
ios: PlatformColor('label'),
|
|
96
|
-
default: colors.text,
|
|
97
|
-
});
|
|
104
|
+
Platform.select({ ios: PlatformColor('label'), default: colors.text });
|
|
98
105
|
|
|
99
106
|
const activeIndicatorColor =
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const onTransitionStart = ({
|
|
106
|
-
closing,
|
|
107
|
-
route,
|
|
108
|
-
}: {
|
|
109
|
-
closing: boolean;
|
|
110
|
-
route: Route<string>;
|
|
111
|
-
}) => {
|
|
107
|
+
currentOptions?.tabBarActiveIndicatorColor ??
|
|
108
|
+
Color(activeTintColor)?.alpha(0.1).string();
|
|
109
|
+
|
|
110
|
+
const onTransitionStart = ({ route }: { route: Route<string> }) => {
|
|
112
111
|
navigation.emit({
|
|
113
112
|
type: 'transitionStart',
|
|
114
|
-
data: { closing },
|
|
115
113
|
target: route.key,
|
|
116
114
|
});
|
|
117
115
|
};
|
|
118
116
|
|
|
119
|
-
const onTransitionEnd = ({
|
|
120
|
-
closing,
|
|
121
|
-
route,
|
|
122
|
-
}: {
|
|
123
|
-
closing: boolean;
|
|
124
|
-
route: Route<string>;
|
|
125
|
-
}) => {
|
|
117
|
+
const onTransitionEnd = ({ route }: { route: Route<string> }) => {
|
|
126
118
|
navigation.emit({
|
|
127
119
|
type: 'transitionEnd',
|
|
128
|
-
data: { closing },
|
|
129
120
|
target: route.key,
|
|
130
121
|
});
|
|
131
122
|
};
|
|
132
123
|
|
|
124
|
+
const tabBarPosition = useTabBarPosition(currentOptions);
|
|
125
|
+
|
|
126
|
+
const hasCustomTabBar = tabBar != null;
|
|
127
|
+
const tabBarElement = tabBar
|
|
128
|
+
? tabBar({
|
|
129
|
+
state,
|
|
130
|
+
descriptors,
|
|
131
|
+
navigation,
|
|
132
|
+
})
|
|
133
|
+
: null;
|
|
134
|
+
|
|
133
135
|
const tabBarControllerMode =
|
|
134
136
|
currentOptions.tabBarControllerMode === 'auto'
|
|
135
137
|
? 'automatic'
|
|
@@ -138,13 +140,26 @@ export function NativeBottomTabView({ state, navigation, descriptors }: Props) {
|
|
|
138
140
|
const tabBarMinimizeBehavior =
|
|
139
141
|
currentOptions.tabBarMinimizeBehavior === 'auto'
|
|
140
142
|
? 'automatic'
|
|
141
|
-
: currentOptions.tabBarMinimizeBehavior
|
|
143
|
+
: currentOptions.tabBarMinimizeBehavior === 'none'
|
|
144
|
+
? 'never'
|
|
145
|
+
: currentOptions.tabBarMinimizeBehavior;
|
|
142
146
|
|
|
143
147
|
const bottomAccessory = currentOptions.bottomAccessory;
|
|
144
148
|
|
|
145
149
|
return (
|
|
146
|
-
<SafeAreaProviderCompat
|
|
150
|
+
<SafeAreaProviderCompat
|
|
151
|
+
style={{
|
|
152
|
+
flexDirection:
|
|
153
|
+
tabBarPosition === 'left' || tabBarPosition === 'right'
|
|
154
|
+
? 'row'
|
|
155
|
+
: 'column',
|
|
156
|
+
}}
|
|
157
|
+
>
|
|
158
|
+
{tabBarPosition === 'top' || tabBarPosition === 'left'
|
|
159
|
+
? tabBarElement
|
|
160
|
+
: null}
|
|
147
161
|
<Tabs.Host
|
|
162
|
+
tabBarHidden={hasCustomTabBar}
|
|
148
163
|
bottomAccessory={
|
|
149
164
|
bottomAccessory
|
|
150
165
|
? (environment) => bottomAccessory({ placement: environment })
|
|
@@ -180,11 +195,18 @@ export function NativeBottomTabView({ state, navigation, descriptors }: Props) {
|
|
|
180
195
|
);
|
|
181
196
|
|
|
182
197
|
if (route) {
|
|
183
|
-
navigation.emit({
|
|
198
|
+
const event = navigation.emit({
|
|
184
199
|
type: 'tabPress',
|
|
185
200
|
target: route.key,
|
|
201
|
+
canPreventDefault: true,
|
|
186
202
|
});
|
|
187
203
|
|
|
204
|
+
if (event.defaultPrevented) {
|
|
205
|
+
throw new Error(
|
|
206
|
+
"Preventing default for 'tabPress' is not supported with native tab bar."
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
188
210
|
const isFocused =
|
|
189
211
|
state.index ===
|
|
190
212
|
state.routes.findIndex((r) => r.key === route.key);
|
|
@@ -213,6 +235,8 @@ export function NativeBottomTabView({ state, navigation, descriptors }: Props) {
|
|
|
213
235
|
tabBarSystemItem,
|
|
214
236
|
tabBarBlurEffect = dark ? 'systemMaterialDark' : 'systemMaterial',
|
|
215
237
|
tabBarStyle,
|
|
238
|
+
sceneStyle,
|
|
239
|
+
scrollEdgeEffects,
|
|
216
240
|
} = options;
|
|
217
241
|
|
|
218
242
|
const {
|
|
@@ -238,32 +262,45 @@ export function NativeBottomTabView({ state, navigation, descriptors }: Props) {
|
|
|
238
262
|
tabBarBadgeStyle?.backgroundColor ?? colors.notification;
|
|
239
263
|
const badgeTextColor =
|
|
240
264
|
tabBarBadgeStyle?.color ??
|
|
241
|
-
(
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
265
|
+
(Color(badgeBackgroundColor)?.isLight() ? 'black' : 'white');
|
|
266
|
+
|
|
267
|
+
const getIcon = (selected: boolean) => {
|
|
268
|
+
if (typeof tabBarIcon === 'function') {
|
|
269
|
+
const result = tabBarIcon({
|
|
270
|
+
focused: selected,
|
|
271
|
+
size: ICON_SIZE!,
|
|
272
|
+
color: selected ? activeTintColor : inactiveTintColor,
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
if (React.isValidElement(result)) {
|
|
276
|
+
throw new Error(
|
|
277
|
+
`Returning a React element from 'tabBarIcon' is not supported with native tab bar.`
|
|
278
|
+
);
|
|
279
|
+
} else if (
|
|
280
|
+
result &&
|
|
281
|
+
typeof result === 'object' &&
|
|
282
|
+
'type' in result
|
|
283
|
+
) {
|
|
284
|
+
return getPlatformIcon(result);
|
|
285
|
+
} else {
|
|
286
|
+
throw new Error(
|
|
287
|
+
`The 'tabBarIcon' function must return an icon object (got ${typeof result}).`
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
} else if (tabBarIcon != null) {
|
|
291
|
+
return getPlatformIcon(tabBarIcon);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return undefined;
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const icon = getIcon(false);
|
|
298
|
+
const selectedIcon = getIcon(true);
|
|
258
299
|
|
|
259
300
|
return (
|
|
260
301
|
<Tabs.Screen
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}
|
|
264
|
-
onWillAppear={() => onTransitionStart({ closing: false, route })}
|
|
265
|
-
onDidAppear={() => onTransitionEnd({ closing: false, route })}
|
|
266
|
-
onDidDisappear={() => onTransitionEnd({ closing: true, route })}
|
|
302
|
+
onWillAppear={() => onTransitionStart({ route })}
|
|
303
|
+
onDidAppear={() => onTransitionEnd({ route })}
|
|
267
304
|
key={route.key}
|
|
268
305
|
tabKey={route.key}
|
|
269
306
|
icon={icon}
|
|
@@ -274,6 +311,27 @@ export function NativeBottomTabView({ state, navigation, descriptors }: Props) {
|
|
|
274
311
|
systemItem={tabBarSystemItem}
|
|
275
312
|
isFocused={isFocused}
|
|
276
313
|
title={tabTitle}
|
|
314
|
+
scrollEdgeEffects={{
|
|
315
|
+
top:
|
|
316
|
+
scrollEdgeEffects?.top === 'auto'
|
|
317
|
+
? 'automatic'
|
|
318
|
+
: scrollEdgeEffects?.top,
|
|
319
|
+
bottom:
|
|
320
|
+
scrollEdgeEffects?.bottom === 'auto'
|
|
321
|
+
? 'automatic'
|
|
322
|
+
: scrollEdgeEffects?.bottom,
|
|
323
|
+
left:
|
|
324
|
+
scrollEdgeEffects?.left === 'auto'
|
|
325
|
+
? 'automatic'
|
|
326
|
+
: scrollEdgeEffects?.left,
|
|
327
|
+
right:
|
|
328
|
+
scrollEdgeEffects?.right === 'auto'
|
|
329
|
+
? 'automatic'
|
|
330
|
+
: scrollEdgeEffects?.right,
|
|
331
|
+
}}
|
|
332
|
+
// FIXME: if this is not provided, ScrollView on lazy tabs glitches on iOS 18
|
|
333
|
+
// For now we provide an empty object before adding proper support
|
|
334
|
+
scrollEdgeAppearance={{}}
|
|
277
335
|
standardAppearance={{
|
|
278
336
|
tabBarBackgroundColor,
|
|
279
337
|
tabBarShadowColor,
|
|
@@ -297,83 +355,66 @@ export function NativeBottomTabView({ state, navigation, descriptors }: Props) {
|
|
|
297
355
|
experimental_userInterfaceStyle={dark ? 'dark' : 'light'}
|
|
298
356
|
>
|
|
299
357
|
<Lazy enabled={lazy} visible={isFocused || isPreloaded}>
|
|
300
|
-
<
|
|
358
|
+
<ScreenContent
|
|
301
359
|
isFocused={isFocused}
|
|
302
360
|
route={route}
|
|
303
361
|
navigation={navigation}
|
|
304
362
|
options={options}
|
|
363
|
+
style={sceneStyle}
|
|
305
364
|
>
|
|
306
|
-
<
|
|
307
|
-
{
|
|
308
|
-
|
|
309
|
-
|
|
365
|
+
<AnimatedScreenContent isFocused={isFocused}>
|
|
366
|
+
<BottomTabBarHeightContext.Provider value={0}>
|
|
367
|
+
<NavigationMetaContext.Provider value={meta}>
|
|
368
|
+
{render()}
|
|
369
|
+
</NavigationMetaContext.Provider>
|
|
370
|
+
</BottomTabBarHeightContext.Provider>
|
|
371
|
+
</AnimatedScreenContent>
|
|
372
|
+
</ScreenContent>
|
|
310
373
|
</Lazy>
|
|
311
374
|
</Tabs.Screen>
|
|
312
375
|
);
|
|
313
376
|
})}
|
|
314
377
|
</Tabs.Host>
|
|
378
|
+
{tabBarPosition === 'bottom' || tabBarPosition === 'right'
|
|
379
|
+
? tabBarElement
|
|
380
|
+
: null}
|
|
315
381
|
</SafeAreaProviderCompat>
|
|
316
382
|
);
|
|
317
383
|
}
|
|
318
|
-
|
|
319
|
-
function ScreenWithHeader({
|
|
384
|
+
function AnimatedScreenContent({
|
|
320
385
|
isFocused,
|
|
321
|
-
route,
|
|
322
|
-
navigation,
|
|
323
|
-
options,
|
|
324
386
|
children,
|
|
325
387
|
}: {
|
|
326
388
|
isFocused: boolean;
|
|
327
|
-
route: Route<string>;
|
|
328
|
-
navigation: NativeBottomTabNavigationProp<ParamListBase>;
|
|
329
|
-
options: NativeBottomTabNavigationOptions;
|
|
330
389
|
children: React.ReactNode;
|
|
331
390
|
}) {
|
|
332
|
-
const
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
headerShown = renderCustomHeader != null,
|
|
336
|
-
} = options;
|
|
337
|
-
|
|
338
|
-
const hasNativeHeader = headerShown && renderCustomHeader == null;
|
|
339
|
-
|
|
340
|
-
const [wasNativeHeaderShown] = React.useState(hasNativeHeader);
|
|
341
|
-
|
|
342
|
-
React.useEffect(() => {
|
|
343
|
-
if (wasNativeHeaderShown !== hasNativeHeader) {
|
|
344
|
-
throw new Error(
|
|
345
|
-
`Changing 'headerShown' or 'header' options dynamically is not supported when using native header.`
|
|
346
|
-
);
|
|
347
|
-
}
|
|
348
|
-
}, [wasNativeHeaderShown, hasNativeHeader]);
|
|
391
|
+
const [progress] = React.useState(
|
|
392
|
+
() => new Animated.Value(isFocused ? 1 : 0)
|
|
393
|
+
);
|
|
349
394
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
395
|
+
React.useLayoutEffect(() => {
|
|
396
|
+
/**
|
|
397
|
+
* We don't have animation progress from native,
|
|
398
|
+
* So we expose a static value (0 or 1) based on focus state.
|
|
399
|
+
* Otherwise code using the `useTabAnimation` hook will crash
|
|
400
|
+
*/
|
|
401
|
+
progress.setValue(isFocused ? 1 : 0);
|
|
402
|
+
}, [isFocused, progress]);
|
|
403
|
+
|
|
404
|
+
const interpolationProps = React.useMemo(() => {
|
|
405
|
+
return {
|
|
406
|
+
current: { progress },
|
|
407
|
+
};
|
|
408
|
+
}, [progress]);
|
|
357
409
|
|
|
358
410
|
return (
|
|
359
|
-
<
|
|
360
|
-
focused={isFocused}
|
|
361
|
-
route={route}
|
|
362
|
-
navigation={navigation}
|
|
363
|
-
headerShown={headerShown}
|
|
364
|
-
headerTransparent={headerTransparent}
|
|
365
|
-
header={renderCustomHeader?.({
|
|
366
|
-
route,
|
|
367
|
-
navigation,
|
|
368
|
-
options,
|
|
369
|
-
})}
|
|
370
|
-
>
|
|
411
|
+
<BottomTabAnimationContext.Provider value={interpolationProps}>
|
|
371
412
|
{children}
|
|
372
|
-
</
|
|
413
|
+
</BottomTabAnimationContext.Provider>
|
|
373
414
|
);
|
|
374
415
|
}
|
|
375
416
|
|
|
376
|
-
function getPlatformIcon(icon:
|
|
417
|
+
function getPlatformIcon(icon: BottomTabIcon): PlatformIcon {
|
|
377
418
|
return {
|
|
378
419
|
ios:
|
|
379
420
|
icon?.type === 'sfSymbol'
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { getHeaderTitle, Header } from '@react-navigation/elements';
|
|
2
|
+
import { Screen } from '@react-navigation/elements/internal';
|
|
3
|
+
import type { ParamListBase, Route } from '@react-navigation/native';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
BottomTabNavigationOptions,
|
|
9
|
+
BottomTabNavigationProp,
|
|
10
|
+
} from '../types';
|
|
11
|
+
|
|
12
|
+
export function ScreenContent({
|
|
13
|
+
isFocused,
|
|
14
|
+
route,
|
|
15
|
+
navigation,
|
|
16
|
+
options,
|
|
17
|
+
style,
|
|
18
|
+
children,
|
|
19
|
+
}: {
|
|
20
|
+
isFocused: boolean;
|
|
21
|
+
route: Route<string>;
|
|
22
|
+
navigation: BottomTabNavigationProp<ParamListBase>;
|
|
23
|
+
options: BottomTabNavigationOptions;
|
|
24
|
+
style?: StyleProp<ViewStyle>;
|
|
25
|
+
children: React.ReactNode;
|
|
26
|
+
}) {
|
|
27
|
+
const {
|
|
28
|
+
headerTransparent,
|
|
29
|
+
header: renderCustomHeader,
|
|
30
|
+
headerShown = renderCustomHeader != null,
|
|
31
|
+
} = options;
|
|
32
|
+
|
|
33
|
+
const hasDefaultHeader = headerShown && renderCustomHeader == null;
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<Screen
|
|
37
|
+
focused={isFocused}
|
|
38
|
+
route={route}
|
|
39
|
+
navigation={navigation}
|
|
40
|
+
headerShown={headerShown}
|
|
41
|
+
headerTransparent={headerTransparent}
|
|
42
|
+
header={
|
|
43
|
+
hasDefaultHeader ? (
|
|
44
|
+
<Header {...options} title={getHeaderTitle(options, route.name)} />
|
|
45
|
+
) : (
|
|
46
|
+
renderCustomHeader?.({
|
|
47
|
+
route,
|
|
48
|
+
navigation,
|
|
49
|
+
options,
|
|
50
|
+
})
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
style={style}
|
|
54
|
+
>
|
|
55
|
+
{children}
|
|
56
|
+
</Screen>
|
|
57
|
+
);
|
|
58
|
+
}
|
package/src/views/TabBarIcon.tsx
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Badge } from '@react-navigation/elements';
|
|
2
|
-
import
|
|
2
|
+
import { MissingIcon } from '@react-navigation/elements/internal';
|
|
3
|
+
import { type Route, SFSymbol } from '@react-navigation/native';
|
|
3
4
|
import React from 'react';
|
|
4
5
|
import {
|
|
6
|
+
type ColorValue,
|
|
7
|
+
Image,
|
|
5
8
|
type StyleProp,
|
|
6
9
|
StyleSheet,
|
|
7
10
|
type TextStyle,
|
|
@@ -9,7 +12,9 @@ import {
|
|
|
9
12
|
type ViewStyle,
|
|
10
13
|
} from 'react-native';
|
|
11
14
|
|
|
12
|
-
type
|
|
15
|
+
import type { BottomTabIcon } from '../types';
|
|
16
|
+
|
|
17
|
+
export type TabBarIconProps = {
|
|
13
18
|
route: Route<string>;
|
|
14
19
|
variant: 'uikit' | 'material';
|
|
15
20
|
size: 'compact' | 'regular';
|
|
@@ -17,13 +22,15 @@ type Props = {
|
|
|
17
22
|
badgeStyle?: StyleProp<TextStyle>;
|
|
18
23
|
activeOpacity: number;
|
|
19
24
|
inactiveOpacity: number;
|
|
20
|
-
activeTintColor:
|
|
21
|
-
inactiveTintColor:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
activeTintColor: ColorValue;
|
|
26
|
+
inactiveTintColor: ColorValue;
|
|
27
|
+
icon:
|
|
28
|
+
| BottomTabIcon
|
|
29
|
+
| ((props: {
|
|
30
|
+
focused: boolean;
|
|
31
|
+
color: ColorValue;
|
|
32
|
+
size: number;
|
|
33
|
+
}) => BottomTabIcon | React.ReactNode);
|
|
27
34
|
allowFontScaling?: boolean;
|
|
28
35
|
style: StyleProp<ViewStyle>;
|
|
29
36
|
};
|
|
@@ -50,10 +57,10 @@ export function TabBarIcon({
|
|
|
50
57
|
inactiveOpacity,
|
|
51
58
|
activeTintColor,
|
|
52
59
|
inactiveTintColor,
|
|
53
|
-
|
|
60
|
+
icon,
|
|
54
61
|
allowFontScaling,
|
|
55
62
|
style,
|
|
56
|
-
}:
|
|
63
|
+
}: TabBarIconProps) {
|
|
57
64
|
const iconSize =
|
|
58
65
|
variant === 'material'
|
|
59
66
|
? ICON_SIZE_MATERIAL
|
|
@@ -88,6 +95,7 @@ export function TabBarIcon({
|
|
|
88
95
|
focused: true,
|
|
89
96
|
size: iconSize,
|
|
90
97
|
color: activeTintColor,
|
|
98
|
+
icon,
|
|
91
99
|
})}
|
|
92
100
|
</View>
|
|
93
101
|
<View style={[styles.icon, { opacity: inactiveOpacity }]}>
|
|
@@ -95,6 +103,7 @@ export function TabBarIcon({
|
|
|
95
103
|
focused: false,
|
|
96
104
|
size: iconSize,
|
|
97
105
|
color: inactiveTintColor,
|
|
106
|
+
icon,
|
|
98
107
|
})}
|
|
99
108
|
</View>
|
|
100
109
|
<Badge
|
|
@@ -109,6 +118,65 @@ export function TabBarIcon({
|
|
|
109
118
|
);
|
|
110
119
|
}
|
|
111
120
|
|
|
121
|
+
function renderIcon({
|
|
122
|
+
focused,
|
|
123
|
+
size,
|
|
124
|
+
color,
|
|
125
|
+
icon,
|
|
126
|
+
}: {
|
|
127
|
+
focused: boolean;
|
|
128
|
+
size: number;
|
|
129
|
+
color: ColorValue;
|
|
130
|
+
icon: TabBarIconProps['icon'];
|
|
131
|
+
}) {
|
|
132
|
+
const iconValue =
|
|
133
|
+
typeof icon === 'function' ? icon({ focused, size, color }) : icon;
|
|
134
|
+
|
|
135
|
+
if (React.isValidElement(iconValue)) {
|
|
136
|
+
return iconValue;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (
|
|
140
|
+
typeof iconValue === 'object' &&
|
|
141
|
+
iconValue != null &&
|
|
142
|
+
'type' in iconValue
|
|
143
|
+
) {
|
|
144
|
+
switch (iconValue.type) {
|
|
145
|
+
case 'image':
|
|
146
|
+
return (
|
|
147
|
+
<Image
|
|
148
|
+
source={iconValue.source}
|
|
149
|
+
style={{
|
|
150
|
+
width: size,
|
|
151
|
+
height: size,
|
|
152
|
+
tintColor: iconValue.tinted === false ? undefined : color,
|
|
153
|
+
}}
|
|
154
|
+
/>
|
|
155
|
+
);
|
|
156
|
+
case 'drawableResource':
|
|
157
|
+
return (
|
|
158
|
+
<Image
|
|
159
|
+
source={{ uri: iconValue.name }}
|
|
160
|
+
style={{
|
|
161
|
+
width: size,
|
|
162
|
+
height: size,
|
|
163
|
+
tintColor: iconValue.tinted === false ? undefined : color,
|
|
164
|
+
}}
|
|
165
|
+
/>
|
|
166
|
+
);
|
|
167
|
+
case 'sfSymbol':
|
|
168
|
+
return <SFSymbol name={iconValue.name} size={size} color={color} />;
|
|
169
|
+
default: {
|
|
170
|
+
const _exhaustiveCheck: never = iconValue;
|
|
171
|
+
|
|
172
|
+
return _exhaustiveCheck;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return <MissingIcon color={color} size={size} />;
|
|
178
|
+
}
|
|
179
|
+
|
|
112
180
|
const styles = StyleSheet.create({
|
|
113
181
|
icon: {
|
|
114
182
|
// We render the icon twice at the same position on top of each other:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["NativeBottomTabView","_","Error"],"sourceRoot":"../../../src","sources":["unstable/NativeBottomTabView.tsx"],"mappings":";;AAiBA,OAAO,SAASA,mBAAmBA,CAACC,CAAQ,EAAE;EAC5C,MAAM,IAAIC,KAAK,CAAC,wDAAwD,CAAC;AAC3E","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getLabel","Lazy","SafeAreaProviderCompat","Screen","ScreenContent","CommonActions","NavigationMetaContext","StackActions","useTheme","Color","React","Platform","PlatformColor","Tabs","NativeScreen","jsx","_jsx","meta","type","NativeBottomTabView","state","navigation","descriptors","dark","colors","fonts","focusedRouteKey","routes","index","key","previousRouteKeyRef","useRef","useEffect","previousRouteKey","current","options","popToTopOnBlur","prevRoute","find","route","popToTopAction","popToTop","target","dispatch","currentOptions","fontFamily","select","ios","medium","default","regular","fontWeight","fontSize","fontStyle","tabBarLabelStyle","activeTintColor","tabBarActiveTintColor","primary","inactiveTintColor","tabBarInactiveTintColor","text","activeIndicatorColor","tabBarActiveIndicatorColor","alpha","string","undefined","onTransitionStart","closing","emit","data","onTransitionEnd","tabBarControllerMode","tabBarMinimizeBehavior","bottomAccessory","children","Host","environment","placement","tabBarItemLabelVisibilityMode","tabBarLabelVisibilityMode","tabBarTintColor","tabBarItemIconColor","tabBarItemIconColorActive","tabBarItemTitleFontColor","tabBarItemTitleFontColorActive","tabBarItemTitleFontFamily","tabBarItemTitleFontWeight","tabBarItemTitleFontSize","tabBarItemTitleFontSizeActive","tabBarItemTitleFontStyle","tabBarBackgroundColor","tabBarStyle","backgroundColor","card","tabBarItemActiveIndicatorColor","tabBarItemActiveIndicatorEnabled","tabBarActiveIndicatorEnabled","tabBarItemRippleColor","tabBarRippleColor","experimentalControlNavigationStateInJS","onNativeFocusChange","e","nativeEvent","tabKey","isFocused","findIndex","r","navigate","name","params","map","render","isPreloaded","preloadedRouteKeys","includes","title","lazy","tabBarLabel","tabBarBadgeStyle","tabBarIcon","tabBarBadge","tabBarSystemItem","tabBarBlurEffect","shadowColor","tabBarShadowColor","tabTitle","OS","label","tabItemAppearance","badgeBackgroundColor","notification","badgeTextColor","color","isLight","icon","getPlatformIcon","focused","selectedIcon","onWillDisappear","onWillAppear","onDidAppear","onDidDisappear","shared","tabBarItemBadgeBackgroundColor","tabBarItemBadgeTextColor","badgeValue","toString","systemItem","standardAppearance","stacked","normal","inline","compactInline","specialEffects","repeatedTabSelection","popToRoot","scrollToTop","experimental_userInterfaceStyle","enabled","visible","ScreenWithHeader","Provider","value","headerTransparent","header","renderCustomHeader","headerShown","hasNativeHeader","wasNativeHeaderShown","useState","Error","tinted","templateSource","source","android","imageSource"],"sourceRoot":"../../../src","sources":["unstable/NativeBottomTabView.native.tsx"],"mappings":"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","ignoreList":[]}
|