@react-navigation/bottom-tabs 6.0.9 → 6.3.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/lib/commonjs/index.js +6 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/navigators/createBottomTabNavigator.js +12 -9
- package/lib/commonjs/navigators/createBottomTabNavigator.js.map +1 -1
- package/lib/commonjs/views/Badge.js +23 -20
- package/lib/commonjs/views/Badge.js.map +1 -1
- package/lib/commonjs/views/BottomTabBar.js +39 -31
- package/lib/commonjs/views/BottomTabBar.js.map +1 -1
- package/lib/commonjs/views/BottomTabItem.js +65 -57
- package/lib/commonjs/views/BottomTabItem.js.map +1 -1
- package/lib/commonjs/views/BottomTabView.js +11 -7
- package/lib/commonjs/views/BottomTabView.js.map +1 -1
- package/lib/commonjs/views/ScreenFallback.js +13 -9
- package/lib/commonjs/views/ScreenFallback.js.map +1 -1
- package/lib/commonjs/views/TabBarIcon.js +13 -12
- package/lib/commonjs/views/TabBarIcon.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigators/createBottomTabNavigator.js +12 -9
- package/lib/module/navigators/createBottomTabNavigator.js.map +1 -1
- package/lib/module/views/Badge.js +23 -20
- package/lib/module/views/Badge.js.map +1 -1
- package/lib/module/views/BottomTabBar.js +39 -31
- package/lib/module/views/BottomTabBar.js.map +1 -1
- package/lib/module/views/BottomTabItem.js +65 -57
- package/lib/module/views/BottomTabItem.js.map +1 -1
- package/lib/module/views/BottomTabView.js +11 -7
- package/lib/module/views/BottomTabView.js.map +1 -1
- package/lib/module/views/ScreenFallback.js +13 -9
- package/lib/module/views/ScreenFallback.js.map +1 -1
- package/lib/module/views/TabBarIcon.js +13 -12
- package/lib/module/views/TabBarIcon.js.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/navigators/createBottomTabNavigator.d.ts +1 -1
- package/lib/typescript/src/types.d.ts +3 -3
- package/lib/typescript/src/views/Badge.d.ts +1 -1
- package/lib/typescript/src/views/ScreenFallback.d.ts +1 -0
- package/package.json +8 -8
- package/src/index.tsx +1 -0
- package/src/navigators/createBottomTabNavigator.tsx +2 -0
- package/src/types.tsx +6 -3
- package/src/views/Badge.tsx +12 -12
- package/src/views/BottomTabView.tsx +1 -0
- package/src/views/ScreenFallback.tsx +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BottomTabBar.tsx"],"names":["MissingIcon","CommonActions","NavigationContext","NavigationRouteContext","useLinkBuilder","useTheme","React","Animated","Platform","StyleSheet","View","useSafeAreaFrame","BottomTabBarHeightCallbackContext","useIsKeyboardShown","BottomTabItem","DEFAULT_TABBAR_HEIGHT","COMPACT_TABBAR_HEIGHT","DEFAULT_MAX_TAB_ITEM_WIDTH","useNativeDriver","OS","shouldUseHorizontalLabels","state","descriptors","layout","dimensions","tabBarLabelPosition","routes","index","key","options","width","maxTabWidth","reduce","acc","route","tabBarItemStyle","flattenedStyle","flatten","maxWidth","height","getPaddingBottom","insets","Math","max","bottom","select","ios","default","getTabBarHeight","style","rest","customHeight","isLandscape","horizontalLabels","paddingBottom","isPad","BottomTabBar","navigation","colors","buildLink","focusedRoute","focusedDescriptor","focusedOptions","tabBarShowLabel","tabBarHideOnKeyboard","tabBarVisibilityAnimationConfig","tabBarStyle","tabBarBackground","tabBarActiveTintColor","tabBarInactiveTintColor","tabBarActiveBackgroundColor","tabBarInactiveBackgroundColor","isKeyboardShown","onHeightChange","useContext","shouldShowTabBar","visibilityAnimationConfigRef","useRef","useEffect","current","isTabBarHidden","setIsTabBarHidden","useState","visible","Value","visibilityAnimationConfig","animation","show","spring","timing","toValue","duration","config","start","finished","hide","stopAnimation","setLayout","handleLayout","e","nativeEvent","tabBarHeight","hasHorizontalLabels","tabBarBackgroundElement","styles","tabBar","backgroundColor","card","borderTopColor","border","transform","translateY","interpolate","inputRange","outputRange","hairlineWidth","position","paddingHorizontal","left","right","absoluteFill","content","map","focused","onPress","event","emit","type","target","canPreventDefault","defaultPrevented","dispatch","navigate","name","merge","onLongPress","label","tabBarLabel","undefined","title","accessibilityLabel","tabBarAccessibilityLabel","length","params","tabBarTestID","tabBarAllowFontScaling","tabBarButton","tabBarIcon","color","size","tabBarBadge","tabBarBadgeStyle","tabBarLabelStyle","tabBarIconStyle","create","borderTopWidth","elevation","flex","flexDirection"],"mappings":"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","sourcesContent":["import { MissingIcon } from '@react-navigation/elements';\nimport {\n CommonActions,\n NavigationContext,\n NavigationRouteContext,\n ParamListBase,\n TabNavigationState,\n useLinkBuilder,\n useTheme,\n} from '@react-navigation/native';\nimport React from 'react';\nimport {\n Animated,\n LayoutChangeEvent,\n Platform,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from 'react-native';\nimport { EdgeInsets, useSafeAreaFrame } from 'react-native-safe-area-context';\n\nimport type { BottomTabBarProps, BottomTabDescriptorMap } from '../types';\nimport BottomTabBarHeightCallbackContext from '../utils/BottomTabBarHeightCallbackContext';\nimport useIsKeyboardShown from '../utils/useIsKeyboardShown';\nimport BottomTabItem from './BottomTabItem';\n\ntype Props = BottomTabBarProps & {\n style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n};\n\nconst DEFAULT_TABBAR_HEIGHT = 49;\nconst COMPACT_TABBAR_HEIGHT = 32;\nconst DEFAULT_MAX_TAB_ITEM_WIDTH = 125;\n\nconst useNativeDriver = Platform.OS !== 'web';\n\ntype Options = {\n state: TabNavigationState<ParamListBase>;\n descriptors: BottomTabDescriptorMap;\n layout: { height: number; width: number };\n dimensions: { height: number; width: number };\n};\n\nconst shouldUseHorizontalLabels = ({\n state,\n descriptors,\n layout,\n dimensions,\n}: Options) => {\n const { tabBarLabelPosition } =\n descriptors[state.routes[state.index].key].options;\n\n if (tabBarLabelPosition) {\n switch (tabBarLabelPosition) {\n case 'beside-icon':\n return true;\n case 'below-icon':\n return false;\n }\n }\n\n if (layout.width >= 768) {\n // Screen size matches a tablet\n const maxTabWidth = state.routes.reduce((acc, route) => {\n const { tabBarItemStyle } = descriptors[route.key].options;\n const flattenedStyle = StyleSheet.flatten(tabBarItemStyle);\n\n if (flattenedStyle) {\n if (typeof flattenedStyle.width === 'number') {\n return acc + flattenedStyle.width;\n } else if (typeof flattenedStyle.maxWidth === 'number') {\n return acc + flattenedStyle.maxWidth;\n }\n }\n\n return acc + DEFAULT_MAX_TAB_ITEM_WIDTH;\n }, 0);\n\n return maxTabWidth <= layout.width;\n } else {\n return dimensions.width > dimensions.height;\n }\n};\n\nconst getPaddingBottom = (insets: EdgeInsets) =>\n Math.max(insets.bottom - Platform.select({ ios: 4, default: 0 }), 0);\n\nexport const getTabBarHeight = ({\n state,\n descriptors,\n dimensions,\n insets,\n style,\n ...rest\n}: Options & {\n insets: EdgeInsets;\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>> | undefined;\n}) => {\n // @ts-ignore\n const customHeight = StyleSheet.flatten(style)?.height;\n\n if (typeof customHeight === 'number') {\n return customHeight;\n }\n\n const isLandscape = dimensions.width > dimensions.height;\n const horizontalLabels = shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n ...rest,\n });\n const paddingBottom = getPaddingBottom(insets);\n\n if (\n Platform.OS === 'ios' &&\n !Platform.isPad &&\n isLandscape &&\n horizontalLabels\n ) {\n return COMPACT_TABBAR_HEIGHT + paddingBottom;\n }\n\n return DEFAULT_TABBAR_HEIGHT + paddingBottom;\n};\n\nexport default function BottomTabBar({\n state,\n navigation,\n descriptors,\n insets,\n style,\n}: Props) {\n const { colors } = useTheme();\n const buildLink = useLinkBuilder();\n\n const focusedRoute = state.routes[state.index];\n const focusedDescriptor = descriptors[focusedRoute.key];\n const focusedOptions = focusedDescriptor.options;\n\n const {\n tabBarShowLabel,\n tabBarHideOnKeyboard = false,\n tabBarVisibilityAnimationConfig,\n tabBarStyle,\n tabBarBackground,\n tabBarActiveTintColor,\n tabBarInactiveTintColor,\n tabBarActiveBackgroundColor,\n tabBarInactiveBackgroundColor,\n } = focusedOptions;\n\n const dimensions = useSafeAreaFrame();\n const isKeyboardShown = useIsKeyboardShown();\n\n const onHeightChange = React.useContext(BottomTabBarHeightCallbackContext);\n\n const shouldShowTabBar = !(tabBarHideOnKeyboard && isKeyboardShown);\n\n const visibilityAnimationConfigRef = React.useRef(\n tabBarVisibilityAnimationConfig\n );\n\n React.useEffect(() => {\n visibilityAnimationConfigRef.current = tabBarVisibilityAnimationConfig;\n });\n\n const [isTabBarHidden, setIsTabBarHidden] = React.useState(!shouldShowTabBar);\n\n const [visible] = React.useState(\n () => new Animated.Value(shouldShowTabBar ? 1 : 0)\n );\n\n React.useEffect(() => {\n const visibilityAnimationConfig = visibilityAnimationConfigRef.current;\n\n if (shouldShowTabBar) {\n const animation =\n visibilityAnimationConfig?.show?.animation === 'spring'\n ? Animated.spring\n : Animated.timing;\n\n animation(visible, {\n toValue: 1,\n useNativeDriver,\n duration: 250,\n ...visibilityAnimationConfig?.show?.config,\n }).start(({ finished }) => {\n if (finished) {\n setIsTabBarHidden(false);\n }\n });\n } else {\n setIsTabBarHidden(true);\n\n const animation =\n visibilityAnimationConfig?.hide?.animation === 'spring'\n ? Animated.spring\n : Animated.timing;\n\n animation(visible, {\n toValue: 0,\n useNativeDriver,\n duration: 200,\n ...visibilityAnimationConfig?.hide?.config,\n }).start();\n }\n\n return () => visible.stopAnimation();\n }, [visible, shouldShowTabBar]);\n\n const [layout, setLayout] = React.useState({\n height: 0,\n width: dimensions.width,\n });\n\n const handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n onHeightChange?.(height);\n\n setLayout((layout) => {\n if (height === layout.height && width === layout.width) {\n return layout;\n } else {\n return {\n height,\n width,\n };\n }\n });\n };\n\n const { routes } = state;\n\n const paddingBottom = getPaddingBottom(insets);\n const tabBarHeight = getTabBarHeight({\n state,\n descriptors,\n insets,\n dimensions,\n layout,\n style: [tabBarStyle, style],\n });\n\n const hasHorizontalLabels = shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n layout,\n });\n\n const tabBarBackgroundElement = tabBarBackground?.();\n\n return (\n <Animated.View\n style={[\n styles.tabBar,\n {\n backgroundColor:\n tabBarBackgroundElement != null ? 'transparent' : colors.card,\n borderTopColor: colors.border,\n },\n {\n transform: [\n {\n translateY: visible.interpolate({\n inputRange: [0, 1],\n outputRange: [\n layout.height + paddingBottom + StyleSheet.hairlineWidth,\n 0,\n ],\n }),\n },\n ],\n // Absolutely position the tab bar so that the content is below it\n // This is needed to avoid gap at bottom when the tab bar is hidden\n position: isTabBarHidden ? 'absolute' : (null as any),\n },\n {\n height: tabBarHeight,\n paddingBottom,\n paddingHorizontal: Math.max(insets.left, insets.right),\n },\n tabBarStyle,\n ]}\n pointerEvents={isTabBarHidden ? 'none' : 'auto'}\n onLayout={handleLayout}\n >\n <View pointerEvents=\"none\" style={StyleSheet.absoluteFill}>\n {tabBarBackgroundElement}\n </View>\n <View accessibilityRole=\"tablist\" style={styles.content}>\n {routes.map((route, index) => {\n const focused = index === state.index;\n const { options } = descriptors[route.key];\n\n const onPress = () => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true,\n });\n\n if (!focused && !event.defaultPrevented) {\n navigation.dispatch({\n ...CommonActions.navigate({ name: route.name, merge: true }),\n target: state.key,\n });\n }\n };\n\n const onLongPress = () => {\n navigation.emit({\n type: 'tabLongPress',\n target: route.key,\n });\n };\n\n const label =\n options.tabBarLabel !== undefined\n ? options.tabBarLabel\n : options.title !== undefined\n ? options.title\n : route.name;\n\n const accessibilityLabel =\n options.tabBarAccessibilityLabel !== undefined\n ? options.tabBarAccessibilityLabel\n : typeof label === 'string' && Platform.OS === 'ios'\n ? `${label}, tab, ${index + 1} of ${routes.length}`\n : undefined;\n\n return (\n <NavigationContext.Provider\n key={route.key}\n value={descriptors[route.key].navigation}\n >\n <NavigationRouteContext.Provider value={route}>\n <BottomTabItem\n route={route}\n focused={focused}\n horizontal={hasHorizontalLabels}\n onPress={onPress}\n onLongPress={onLongPress}\n accessibilityLabel={accessibilityLabel}\n to={buildLink(route.name, route.params)}\n testID={options.tabBarTestID}\n allowFontScaling={options.tabBarAllowFontScaling}\n activeTintColor={tabBarActiveTintColor}\n inactiveTintColor={tabBarInactiveTintColor}\n activeBackgroundColor={tabBarActiveBackgroundColor}\n inactiveBackgroundColor={tabBarInactiveBackgroundColor}\n button={options.tabBarButton}\n icon={\n options.tabBarIcon ??\n (({ color, size }) => (\n <MissingIcon color={color} size={size} />\n ))\n }\n badge={options.tabBarBadge}\n badgeStyle={options.tabBarBadgeStyle}\n label={label}\n showLabel={tabBarShowLabel}\n labelStyle={options.tabBarLabelStyle}\n iconStyle={options.tabBarIconStyle}\n style={options.tabBarItemStyle}\n />\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n );\n })}\n </View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n tabBar: {\n left: 0,\n right: 0,\n bottom: 0,\n borderTopWidth: StyleSheet.hairlineWidth,\n elevation: 8,\n },\n content: {\n flex: 1,\n flexDirection: 'row',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["BottomTabBar.tsx"],"names":["MissingIcon","CommonActions","NavigationContext","NavigationRouteContext","useLinkBuilder","useTheme","React","Animated","Platform","StyleSheet","View","useSafeAreaFrame","BottomTabBarHeightCallbackContext","useIsKeyboardShown","BottomTabItem","DEFAULT_TABBAR_HEIGHT","COMPACT_TABBAR_HEIGHT","DEFAULT_MAX_TAB_ITEM_WIDTH","useNativeDriver","OS","shouldUseHorizontalLabels","state","descriptors","layout","dimensions","tabBarLabelPosition","routes","index","key","options","width","maxTabWidth","reduce","acc","route","tabBarItemStyle","flattenedStyle","flatten","maxWidth","height","getPaddingBottom","insets","Math","max","bottom","select","ios","default","getTabBarHeight","style","rest","customHeight","isLandscape","horizontalLabels","paddingBottom","isPad","BottomTabBar","navigation","colors","buildLink","focusedRoute","focusedDescriptor","focusedOptions","tabBarShowLabel","tabBarHideOnKeyboard","tabBarVisibilityAnimationConfig","tabBarStyle","tabBarBackground","tabBarActiveTintColor","tabBarInactiveTintColor","tabBarActiveBackgroundColor","tabBarInactiveBackgroundColor","isKeyboardShown","onHeightChange","useContext","shouldShowTabBar","visibilityAnimationConfigRef","useRef","useEffect","current","isTabBarHidden","setIsTabBarHidden","useState","visible","Value","visibilityAnimationConfig","animation","show","spring","timing","toValue","duration","config","start","finished","hide","stopAnimation","setLayout","handleLayout","e","nativeEvent","tabBarHeight","hasHorizontalLabels","tabBarBackgroundElement","styles","tabBar","backgroundColor","card","borderTopColor","border","transform","translateY","interpolate","inputRange","outputRange","hairlineWidth","position","paddingHorizontal","left","right","absoluteFill","content","map","focused","onPress","event","emit","type","target","canPreventDefault","defaultPrevented","dispatch","navigate","name","merge","onLongPress","label","tabBarLabel","undefined","title","accessibilityLabel","tabBarAccessibilityLabel","length","params","tabBarTestID","tabBarAllowFontScaling","tabBarButton","tabBarIcon","color","size","tabBarBadge","tabBarBadgeStyle","tabBarLabelStyle","tabBarIconStyle","create","borderTopWidth","elevation","flex","flexDirection"],"mappings":"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","sourcesContent":["import { MissingIcon } from '@react-navigation/elements';\nimport {\n CommonActions,\n NavigationContext,\n NavigationRouteContext,\n ParamListBase,\n TabNavigationState,\n useLinkBuilder,\n useTheme,\n} from '@react-navigation/native';\nimport React from 'react';\nimport {\n Animated,\n LayoutChangeEvent,\n Platform,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from 'react-native';\nimport { EdgeInsets, useSafeAreaFrame } from 'react-native-safe-area-context';\n\nimport type { BottomTabBarProps, BottomTabDescriptorMap } from '../types';\nimport BottomTabBarHeightCallbackContext from '../utils/BottomTabBarHeightCallbackContext';\nimport useIsKeyboardShown from '../utils/useIsKeyboardShown';\nimport BottomTabItem from './BottomTabItem';\n\ntype Props = BottomTabBarProps & {\n style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n};\n\nconst DEFAULT_TABBAR_HEIGHT = 49;\nconst COMPACT_TABBAR_HEIGHT = 32;\nconst DEFAULT_MAX_TAB_ITEM_WIDTH = 125;\n\nconst useNativeDriver = Platform.OS !== 'web';\n\ntype Options = {\n state: TabNavigationState<ParamListBase>;\n descriptors: BottomTabDescriptorMap;\n layout: { height: number; width: number };\n dimensions: { height: number; width: number };\n};\n\nconst shouldUseHorizontalLabels = ({\n state,\n descriptors,\n layout,\n dimensions,\n}: Options) => {\n const { tabBarLabelPosition } =\n descriptors[state.routes[state.index].key].options;\n\n if (tabBarLabelPosition) {\n switch (tabBarLabelPosition) {\n case 'beside-icon':\n return true;\n case 'below-icon':\n return false;\n }\n }\n\n if (layout.width >= 768) {\n // Screen size matches a tablet\n const maxTabWidth = state.routes.reduce((acc, route) => {\n const { tabBarItemStyle } = descriptors[route.key].options;\n const flattenedStyle = StyleSheet.flatten(tabBarItemStyle);\n\n if (flattenedStyle) {\n if (typeof flattenedStyle.width === 'number') {\n return acc + flattenedStyle.width;\n } else if (typeof flattenedStyle.maxWidth === 'number') {\n return acc + flattenedStyle.maxWidth;\n }\n }\n\n return acc + DEFAULT_MAX_TAB_ITEM_WIDTH;\n }, 0);\n\n return maxTabWidth <= layout.width;\n } else {\n return dimensions.width > dimensions.height;\n }\n};\n\nconst getPaddingBottom = (insets: EdgeInsets) =>\n Math.max(insets.bottom - Platform.select({ ios: 4, default: 0 }), 0);\n\nexport const getTabBarHeight = ({\n state,\n descriptors,\n dimensions,\n insets,\n style,\n ...rest\n}: Options & {\n insets: EdgeInsets;\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>> | undefined;\n}) => {\n // @ts-ignore\n const customHeight = StyleSheet.flatten(style)?.height;\n\n if (typeof customHeight === 'number') {\n return customHeight;\n }\n\n const isLandscape = dimensions.width > dimensions.height;\n const horizontalLabels = shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n ...rest,\n });\n const paddingBottom = getPaddingBottom(insets);\n\n if (\n Platform.OS === 'ios' &&\n !Platform.isPad &&\n isLandscape &&\n horizontalLabels\n ) {\n return COMPACT_TABBAR_HEIGHT + paddingBottom;\n }\n\n return DEFAULT_TABBAR_HEIGHT + paddingBottom;\n};\n\nexport default function BottomTabBar({\n state,\n navigation,\n descriptors,\n insets,\n style,\n}: Props) {\n const { colors } = useTheme();\n const buildLink = useLinkBuilder();\n\n const focusedRoute = state.routes[state.index];\n const focusedDescriptor = descriptors[focusedRoute.key];\n const focusedOptions = focusedDescriptor.options;\n\n const {\n tabBarShowLabel,\n tabBarHideOnKeyboard = false,\n tabBarVisibilityAnimationConfig,\n tabBarStyle,\n tabBarBackground,\n tabBarActiveTintColor,\n tabBarInactiveTintColor,\n tabBarActiveBackgroundColor,\n tabBarInactiveBackgroundColor,\n } = focusedOptions;\n\n const dimensions = useSafeAreaFrame();\n const isKeyboardShown = useIsKeyboardShown();\n\n const onHeightChange = React.useContext(BottomTabBarHeightCallbackContext);\n\n const shouldShowTabBar = !(tabBarHideOnKeyboard && isKeyboardShown);\n\n const visibilityAnimationConfigRef = React.useRef(\n tabBarVisibilityAnimationConfig\n );\n\n React.useEffect(() => {\n visibilityAnimationConfigRef.current = tabBarVisibilityAnimationConfig;\n });\n\n const [isTabBarHidden, setIsTabBarHidden] = React.useState(!shouldShowTabBar);\n\n const [visible] = React.useState(\n () => new Animated.Value(shouldShowTabBar ? 1 : 0)\n );\n\n React.useEffect(() => {\n const visibilityAnimationConfig = visibilityAnimationConfigRef.current;\n\n if (shouldShowTabBar) {\n const animation =\n visibilityAnimationConfig?.show?.animation === 'spring'\n ? Animated.spring\n : Animated.timing;\n\n animation(visible, {\n toValue: 1,\n useNativeDriver,\n duration: 250,\n ...visibilityAnimationConfig?.show?.config,\n }).start(({ finished }) => {\n if (finished) {\n setIsTabBarHidden(false);\n }\n });\n } else {\n setIsTabBarHidden(true);\n\n const animation =\n visibilityAnimationConfig?.hide?.animation === 'spring'\n ? Animated.spring\n : Animated.timing;\n\n animation(visible, {\n toValue: 0,\n useNativeDriver,\n duration: 200,\n ...visibilityAnimationConfig?.hide?.config,\n }).start();\n }\n\n return () => visible.stopAnimation();\n }, [visible, shouldShowTabBar]);\n\n const [layout, setLayout] = React.useState({\n height: 0,\n width: dimensions.width,\n });\n\n const handleLayout = (e: LayoutChangeEvent) => {\n const { height, width } = e.nativeEvent.layout;\n\n onHeightChange?.(height);\n\n setLayout((layout) => {\n if (height === layout.height && width === layout.width) {\n return layout;\n } else {\n return {\n height,\n width,\n };\n }\n });\n };\n\n const { routes } = state;\n\n const paddingBottom = getPaddingBottom(insets);\n const tabBarHeight = getTabBarHeight({\n state,\n descriptors,\n insets,\n dimensions,\n layout,\n style: [tabBarStyle, style],\n });\n\n const hasHorizontalLabels = shouldUseHorizontalLabels({\n state,\n descriptors,\n dimensions,\n layout,\n });\n\n const tabBarBackgroundElement = tabBarBackground?.();\n\n return (\n <Animated.View\n style={[\n styles.tabBar,\n {\n backgroundColor:\n tabBarBackgroundElement != null ? 'transparent' : colors.card,\n borderTopColor: colors.border,\n },\n {\n transform: [\n {\n translateY: visible.interpolate({\n inputRange: [0, 1],\n outputRange: [\n layout.height + paddingBottom + StyleSheet.hairlineWidth,\n 0,\n ],\n }),\n },\n ],\n // Absolutely position the tab bar so that the content is below it\n // This is needed to avoid gap at bottom when the tab bar is hidden\n position: isTabBarHidden ? 'absolute' : (null as any),\n },\n {\n height: tabBarHeight,\n paddingBottom,\n paddingHorizontal: Math.max(insets.left, insets.right),\n },\n tabBarStyle,\n ]}\n pointerEvents={isTabBarHidden ? 'none' : 'auto'}\n onLayout={handleLayout}\n >\n <View pointerEvents=\"none\" style={StyleSheet.absoluteFill}>\n {tabBarBackgroundElement}\n </View>\n <View accessibilityRole=\"tablist\" style={styles.content}>\n {routes.map((route, index) => {\n const focused = index === state.index;\n const { options } = descriptors[route.key];\n\n const onPress = () => {\n const event = navigation.emit({\n type: 'tabPress',\n target: route.key,\n canPreventDefault: true,\n });\n\n if (!focused && !event.defaultPrevented) {\n navigation.dispatch({\n ...CommonActions.navigate({ name: route.name, merge: true }),\n target: state.key,\n });\n }\n };\n\n const onLongPress = () => {\n navigation.emit({\n type: 'tabLongPress',\n target: route.key,\n });\n };\n\n const label =\n options.tabBarLabel !== undefined\n ? options.tabBarLabel\n : options.title !== undefined\n ? options.title\n : route.name;\n\n const accessibilityLabel =\n options.tabBarAccessibilityLabel !== undefined\n ? options.tabBarAccessibilityLabel\n : typeof label === 'string' && Platform.OS === 'ios'\n ? `${label}, tab, ${index + 1} of ${routes.length}`\n : undefined;\n\n return (\n <NavigationContext.Provider\n key={route.key}\n value={descriptors[route.key].navigation}\n >\n <NavigationRouteContext.Provider value={route}>\n <BottomTabItem\n route={route}\n focused={focused}\n horizontal={hasHorizontalLabels}\n onPress={onPress}\n onLongPress={onLongPress}\n accessibilityLabel={accessibilityLabel}\n to={buildLink(route.name, route.params)}\n testID={options.tabBarTestID}\n allowFontScaling={options.tabBarAllowFontScaling}\n activeTintColor={tabBarActiveTintColor}\n inactiveTintColor={tabBarInactiveTintColor}\n activeBackgroundColor={tabBarActiveBackgroundColor}\n inactiveBackgroundColor={tabBarInactiveBackgroundColor}\n button={options.tabBarButton}\n icon={\n options.tabBarIcon ??\n (({ color, size }) => (\n <MissingIcon color={color} size={size} />\n ))\n }\n badge={options.tabBarBadge}\n badgeStyle={options.tabBarBadgeStyle}\n label={label}\n showLabel={tabBarShowLabel}\n labelStyle={options.tabBarLabelStyle}\n iconStyle={options.tabBarIconStyle}\n style={options.tabBarItemStyle}\n />\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n );\n })}\n </View>\n </Animated.View>\n );\n}\n\nconst styles = StyleSheet.create({\n tabBar: {\n left: 0,\n right: 0,\n bottom: 0,\n borderTopWidth: StyleSheet.hairlineWidth,\n elevation: 8,\n },\n content: {\n flex: 1,\n flexDirection: 'row',\n },\n});\n"]}
|
|
@@ -5,68 +5,74 @@ import Color from 'color';
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import { Platform, Pressable, StyleSheet, Text } from 'react-native';
|
|
7
7
|
import TabBarIcon from './TabBarIcon';
|
|
8
|
-
export default function BottomTabBarItem({
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
button = ({
|
|
17
|
-
children,
|
|
18
|
-
style,
|
|
19
|
-
onPress,
|
|
8
|
+
export default function BottomTabBarItem(_ref) {
|
|
9
|
+
let {
|
|
10
|
+
focused,
|
|
11
|
+
route,
|
|
12
|
+
label,
|
|
13
|
+
icon,
|
|
14
|
+
badge,
|
|
15
|
+
badgeStyle,
|
|
20
16
|
to,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
button = _ref2 => {
|
|
18
|
+
let {
|
|
19
|
+
children,
|
|
20
|
+
style,
|
|
21
|
+
onPress,
|
|
22
|
+
to,
|
|
23
|
+
accessibilityRole,
|
|
24
|
+
...rest
|
|
25
|
+
} = _ref2;
|
|
26
|
+
|
|
27
|
+
if (Platform.OS === 'web' && to) {
|
|
28
|
+
// React Native Web doesn't forward `onClick` if we use `TouchableWithoutFeedback`.
|
|
29
|
+
// We need to use `onClick` to be able to prevent default browser handling of links.
|
|
30
|
+
return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {
|
|
31
|
+
to: to,
|
|
32
|
+
style: [styles.button, style],
|
|
33
|
+
onPress: e => {
|
|
34
|
+
if (!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && ( // ignore clicks with modifier keys
|
|
35
|
+
e.button == null || e.button === 0) // ignore everything but left clicks
|
|
36
|
+
) {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
onPress === null || onPress === void 0 ? void 0 : onPress(e);
|
|
39
|
+
}
|
|
35
40
|
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}) {
|
|
41
|
+
}), children);
|
|
42
|
+
} else {
|
|
43
|
+
return /*#__PURE__*/React.createElement(Pressable, _extends({}, rest, {
|
|
44
|
+
accessibilityRole: accessibilityRole,
|
|
45
|
+
onPress: onPress,
|
|
46
|
+
style: style
|
|
47
|
+
}), children);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
accessibilityLabel,
|
|
51
|
+
testID,
|
|
52
|
+
onPress,
|
|
53
|
+
onLongPress,
|
|
54
|
+
horizontal,
|
|
55
|
+
activeTintColor: customActiveTintColor,
|
|
56
|
+
inactiveTintColor: customInactiveTintColor,
|
|
57
|
+
activeBackgroundColor = 'transparent',
|
|
58
|
+
inactiveBackgroundColor = 'transparent',
|
|
59
|
+
showLabel = true,
|
|
60
|
+
allowFontScaling,
|
|
61
|
+
labelStyle,
|
|
62
|
+
iconStyle,
|
|
63
|
+
style
|
|
64
|
+
} = _ref;
|
|
61
65
|
const {
|
|
62
66
|
colors
|
|
63
67
|
} = useTheme();
|
|
64
68
|
const activeTintColor = customActiveTintColor === undefined ? colors.primary : customActiveTintColor;
|
|
65
69
|
const inactiveTintColor = customInactiveTintColor === undefined ? Color(colors.text).mix(Color(colors.card), 0.5).hex() : customInactiveTintColor;
|
|
66
70
|
|
|
67
|
-
const renderLabel =
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
const renderLabel = _ref3 => {
|
|
72
|
+
let {
|
|
73
|
+
focused
|
|
74
|
+
} = _ref3;
|
|
75
|
+
|
|
70
76
|
if (showLabel === false) {
|
|
71
77
|
return null;
|
|
72
78
|
}
|
|
@@ -90,9 +96,11 @@ export default function BottomTabBarItem({
|
|
|
90
96
|
});
|
|
91
97
|
};
|
|
92
98
|
|
|
93
|
-
const renderIcon =
|
|
94
|
-
|
|
95
|
-
|
|
99
|
+
const renderIcon = _ref4 => {
|
|
100
|
+
let {
|
|
101
|
+
focused
|
|
102
|
+
} = _ref4;
|
|
103
|
+
|
|
96
104
|
if (icon === undefined) {
|
|
97
105
|
return null;
|
|
98
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BottomTabItem.tsx"],"names":["Link","useTheme","Color","React","Platform","Pressable","StyleSheet","Text","TabBarIcon","BottomTabBarItem","focused","route","label","icon","badge","badgeStyle","to","button","children","style","onPress","accessibilityRole","rest","OS","styles","e","metaKey","altKey","ctrlKey","shiftKey","preventDefault","accessibilityLabel","testID","onLongPress","horizontal","activeTintColor","customActiveTintColor","inactiveTintColor","customInactiveTintColor","activeBackgroundColor","inactiveBackgroundColor","showLabel","allowFontScaling","labelStyle","iconStyle","colors","undefined","primary","text","mix","card","hex","renderLabel","color","labelBeside","labelBeneath","position","renderIcon","activeOpacity","inactiveOpacity","scene","backgroundColor","select","ios","default","accessibilityState","selected","accessibilityStates","tab","tabLandscape","tabPortrait","create","flex","alignItems","justifyContent","flexDirection","textAlign","fontSize","marginLeft","marginTop","display"],"mappings":"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","sourcesContent":["import { Link, Route, useTheme } from '@react-navigation/native';\nimport Color from 'color';\nimport React from 'react';\nimport {\n GestureResponderEvent,\n Platform,\n Pressable,\n StyleProp,\n StyleSheet,\n Text,\n TextStyle,\n ViewStyle,\n} from 'react-native';\n\nimport type { BottomTabBarButtonProps, LabelPosition } from '../types';\nimport TabBarIcon from './TabBarIcon';\n\ntype Props = {\n /**\n * Whether the tab is focused.\n */\n focused: boolean;\n /**\n * The route object which should be specified by the tab.\n */\n route: Route<string>;\n /**\n * The label text of the tab.\n */\n label:\n | string\n | ((props: {\n focused: boolean;\n color: string;\n position: LabelPosition;\n }) => React.ReactNode);\n /**\n * Icon to display for the tab.\n */\n icon: (props: {\n focused: boolean;\n size: number;\n color: string;\n }) => React.ReactNode;\n /**\n * Text to show in a badge on the tab icon.\n */\n badge?: number | string;\n /**\n * Custom style for the badge.\n */\n badgeStyle?: StyleProp<TextStyle>;\n /**\n * URL to use for the link to the tab.\n */\n to?: string;\n /**\n * The button for the tab. Uses a `TouchableWithoutFeedback` by default.\n */\n button?: (props: BottomTabBarButtonProps) => React.ReactNode;\n /**\n * The accessibility label for the tab.\n */\n accessibilityLabel?: string;\n /**\n * An unique ID for testing for the tab.\n */\n testID?: string;\n /**\n * Function to execute on press in React Native.\n * On the web, this will use onClick.\n */\n onPress: (\n e: React.MouseEvent<HTMLElement, MouseEvent> | GestureResponderEvent\n ) => void;\n /**\n * Function to execute on long press.\n */\n onLongPress: (e: GestureResponderEvent) => void;\n /**\n * Whether the label should be aligned with the icon horizontally.\n */\n horizontal: boolean;\n /**\n * Color for the icon and label when the item is active.\n */\n activeTintColor?: string;\n /**\n * Color for the icon and label when the item is inactive.\n */\n inactiveTintColor?: string;\n /**\n * Background color for item when its active.\n */\n activeBackgroundColor?: string;\n /**\n * Background color for item when its inactive.\n */\n inactiveBackgroundColor?: string;\n /**\n * Whether to show the label text for the tab.\n */\n showLabel?: boolean;\n /**\n * Whether to allow scaling the font for the label for accessibility purposes.\n */\n allowFontScaling?: boolean;\n /**\n * Style object for the label element.\n */\n labelStyle?: StyleProp<TextStyle>;\n /**\n * Style object for the icon element.\n */\n iconStyle?: StyleProp<ViewStyle>;\n /**\n * Style object for the wrapper element.\n */\n style?: StyleProp<ViewStyle>;\n};\n\nexport default function BottomTabBarItem({\n focused,\n route,\n label,\n icon,\n badge,\n badgeStyle,\n to,\n button = ({\n children,\n style,\n onPress,\n to,\n accessibilityRole,\n ...rest\n }: BottomTabBarButtonProps) => {\n if (Platform.OS === 'web' && to) {\n // React Native Web doesn't forward `onClick` if we use `TouchableWithoutFeedback`.\n // We need to use `onClick` to be able to prevent default browser handling of links.\n return (\n <Link\n {...rest}\n to={to}\n style={[styles.button, style]}\n onPress={(e: any) => {\n if (\n !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && // ignore clicks with modifier keys\n (e.button == null || e.button === 0) // ignore everything but left clicks\n ) {\n e.preventDefault();\n onPress?.(e);\n }\n }}\n >\n {children}\n </Link>\n );\n } else {\n return (\n <Pressable\n {...rest}\n accessibilityRole={accessibilityRole}\n onPress={onPress}\n style={style}\n >\n {children}\n </Pressable>\n );\n }\n },\n accessibilityLabel,\n testID,\n onPress,\n onLongPress,\n horizontal,\n activeTintColor: customActiveTintColor,\n inactiveTintColor: customInactiveTintColor,\n activeBackgroundColor = 'transparent',\n inactiveBackgroundColor = 'transparent',\n showLabel = true,\n allowFontScaling,\n labelStyle,\n iconStyle,\n style,\n}: Props) {\n const { colors } = useTheme();\n\n const activeTintColor =\n customActiveTintColor === undefined\n ? colors.primary\n : customActiveTintColor;\n\n const inactiveTintColor =\n customInactiveTintColor === undefined\n ? Color(colors.text).mix(Color(colors.card), 0.5).hex()\n : customInactiveTintColor;\n\n const renderLabel = ({ focused }: { focused: boolean }) => {\n if (showLabel === false) {\n return null;\n }\n\n const color = focused ? activeTintColor : inactiveTintColor;\n\n if (typeof label === 'string') {\n return (\n <Text\n numberOfLines={1}\n style={[\n styles.label,\n { color },\n horizontal ? styles.labelBeside : styles.labelBeneath,\n labelStyle,\n ]}\n allowFontScaling={allowFontScaling}\n >\n {label}\n </Text>\n );\n }\n\n return label({\n focused,\n color,\n position: horizontal ? 'beside-icon' : 'below-icon',\n });\n };\n\n const renderIcon = ({ focused }: { focused: boolean }) => {\n if (icon === undefined) {\n return null;\n }\n\n const activeOpacity = focused ? 1 : 0;\n const inactiveOpacity = focused ? 0 : 1;\n\n return (\n <TabBarIcon\n route={route}\n horizontal={horizontal}\n badge={badge}\n badgeStyle={badgeStyle}\n activeOpacity={activeOpacity}\n inactiveOpacity={inactiveOpacity}\n activeTintColor={activeTintColor}\n inactiveTintColor={inactiveTintColor}\n renderIcon={icon}\n style={iconStyle}\n />\n );\n };\n\n const scene = { route, focused };\n\n const backgroundColor = focused\n ? activeBackgroundColor\n : inactiveBackgroundColor;\n\n return button({\n to,\n onPress,\n onLongPress,\n testID,\n accessibilityLabel,\n // FIXME: accessibilityRole: 'tab' doesn't seem to work as expected on iOS\n accessibilityRole: Platform.select({ ios: 'button', default: 'tab' }),\n accessibilityState: { selected: focused },\n // @ts-expect-error: keep for compatibility with older React Native versions\n accessibilityStates: focused ? ['selected'] : [],\n style: [\n styles.tab,\n { backgroundColor },\n horizontal ? styles.tabLandscape : styles.tabPortrait,\n style,\n ],\n children: (\n <React.Fragment>\n {renderIcon(scene)}\n {renderLabel(scene)}\n </React.Fragment>\n ),\n }) as React.ReactElement;\n}\n\nconst styles = StyleSheet.create({\n tab: {\n flex: 1,\n alignItems: 'center',\n },\n tabPortrait: {\n justifyContent: 'flex-end',\n flexDirection: 'column',\n },\n tabLandscape: {\n justifyContent: 'center',\n flexDirection: 'row',\n },\n label: {\n textAlign: 'center',\n backgroundColor: 'transparent',\n },\n labelBeneath: {\n fontSize: 10,\n },\n labelBeside: {\n fontSize: 13,\n marginLeft: 20,\n marginTop: 3,\n },\n button: {\n display: 'flex',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["BottomTabItem.tsx"],"names":["Link","useTheme","Color","React","Platform","Pressable","StyleSheet","Text","TabBarIcon","BottomTabBarItem","focused","route","label","icon","badge","badgeStyle","to","button","children","style","onPress","accessibilityRole","rest","OS","styles","e","metaKey","altKey","ctrlKey","shiftKey","preventDefault","accessibilityLabel","testID","onLongPress","horizontal","activeTintColor","customActiveTintColor","inactiveTintColor","customInactiveTintColor","activeBackgroundColor","inactiveBackgroundColor","showLabel","allowFontScaling","labelStyle","iconStyle","colors","undefined","primary","text","mix","card","hex","renderLabel","color","labelBeside","labelBeneath","position","renderIcon","activeOpacity","inactiveOpacity","scene","backgroundColor","select","ios","default","accessibilityState","selected","accessibilityStates","tab","tabLandscape","tabPortrait","create","flex","alignItems","justifyContent","flexDirection","textAlign","fontSize","marginLeft","marginTop","display"],"mappings":"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","sourcesContent":["import { Link, Route, useTheme } from '@react-navigation/native';\nimport Color from 'color';\nimport React from 'react';\nimport {\n GestureResponderEvent,\n Platform,\n Pressable,\n StyleProp,\n StyleSheet,\n Text,\n TextStyle,\n ViewStyle,\n} from 'react-native';\n\nimport type { BottomTabBarButtonProps, LabelPosition } from '../types';\nimport TabBarIcon from './TabBarIcon';\n\ntype Props = {\n /**\n * Whether the tab is focused.\n */\n focused: boolean;\n /**\n * The route object which should be specified by the tab.\n */\n route: Route<string>;\n /**\n * The label text of the tab.\n */\n label:\n | string\n | ((props: {\n focused: boolean;\n color: string;\n position: LabelPosition;\n }) => React.ReactNode);\n /**\n * Icon to display for the tab.\n */\n icon: (props: {\n focused: boolean;\n size: number;\n color: string;\n }) => React.ReactNode;\n /**\n * Text to show in a badge on the tab icon.\n */\n badge?: number | string;\n /**\n * Custom style for the badge.\n */\n badgeStyle?: StyleProp<TextStyle>;\n /**\n * URL to use for the link to the tab.\n */\n to?: string;\n /**\n * The button for the tab. Uses a `TouchableWithoutFeedback` by default.\n */\n button?: (props: BottomTabBarButtonProps) => React.ReactNode;\n /**\n * The accessibility label for the tab.\n */\n accessibilityLabel?: string;\n /**\n * An unique ID for testing for the tab.\n */\n testID?: string;\n /**\n * Function to execute on press in React Native.\n * On the web, this will use onClick.\n */\n onPress: (\n e: React.MouseEvent<HTMLElement, MouseEvent> | GestureResponderEvent\n ) => void;\n /**\n * Function to execute on long press.\n */\n onLongPress: (e: GestureResponderEvent) => void;\n /**\n * Whether the label should be aligned with the icon horizontally.\n */\n horizontal: boolean;\n /**\n * Color for the icon and label when the item is active.\n */\n activeTintColor?: string;\n /**\n * Color for the icon and label when the item is inactive.\n */\n inactiveTintColor?: string;\n /**\n * Background color for item when its active.\n */\n activeBackgroundColor?: string;\n /**\n * Background color for item when its inactive.\n */\n inactiveBackgroundColor?: string;\n /**\n * Whether to show the label text for the tab.\n */\n showLabel?: boolean;\n /**\n * Whether to allow scaling the font for the label for accessibility purposes.\n */\n allowFontScaling?: boolean;\n /**\n * Style object for the label element.\n */\n labelStyle?: StyleProp<TextStyle>;\n /**\n * Style object for the icon element.\n */\n iconStyle?: StyleProp<ViewStyle>;\n /**\n * Style object for the wrapper element.\n */\n style?: StyleProp<ViewStyle>;\n};\n\nexport default function BottomTabBarItem({\n focused,\n route,\n label,\n icon,\n badge,\n badgeStyle,\n to,\n button = ({\n children,\n style,\n onPress,\n to,\n accessibilityRole,\n ...rest\n }: BottomTabBarButtonProps) => {\n if (Platform.OS === 'web' && to) {\n // React Native Web doesn't forward `onClick` if we use `TouchableWithoutFeedback`.\n // We need to use `onClick` to be able to prevent default browser handling of links.\n return (\n <Link\n {...rest}\n to={to}\n style={[styles.button, style]}\n onPress={(e: any) => {\n if (\n !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && // ignore clicks with modifier keys\n (e.button == null || e.button === 0) // ignore everything but left clicks\n ) {\n e.preventDefault();\n onPress?.(e);\n }\n }}\n >\n {children}\n </Link>\n );\n } else {\n return (\n <Pressable\n {...rest}\n accessibilityRole={accessibilityRole}\n onPress={onPress}\n style={style}\n >\n {children}\n </Pressable>\n );\n }\n },\n accessibilityLabel,\n testID,\n onPress,\n onLongPress,\n horizontal,\n activeTintColor: customActiveTintColor,\n inactiveTintColor: customInactiveTintColor,\n activeBackgroundColor = 'transparent',\n inactiveBackgroundColor = 'transparent',\n showLabel = true,\n allowFontScaling,\n labelStyle,\n iconStyle,\n style,\n}: Props) {\n const { colors } = useTheme();\n\n const activeTintColor =\n customActiveTintColor === undefined\n ? colors.primary\n : customActiveTintColor;\n\n const inactiveTintColor =\n customInactiveTintColor === undefined\n ? Color(colors.text).mix(Color(colors.card), 0.5).hex()\n : customInactiveTintColor;\n\n const renderLabel = ({ focused }: { focused: boolean }) => {\n if (showLabel === false) {\n return null;\n }\n\n const color = focused ? activeTintColor : inactiveTintColor;\n\n if (typeof label === 'string') {\n return (\n <Text\n numberOfLines={1}\n style={[\n styles.label,\n { color },\n horizontal ? styles.labelBeside : styles.labelBeneath,\n labelStyle,\n ]}\n allowFontScaling={allowFontScaling}\n >\n {label}\n </Text>\n );\n }\n\n return label({\n focused,\n color,\n position: horizontal ? 'beside-icon' : 'below-icon',\n });\n };\n\n const renderIcon = ({ focused }: { focused: boolean }) => {\n if (icon === undefined) {\n return null;\n }\n\n const activeOpacity = focused ? 1 : 0;\n const inactiveOpacity = focused ? 0 : 1;\n\n return (\n <TabBarIcon\n route={route}\n horizontal={horizontal}\n badge={badge}\n badgeStyle={badgeStyle}\n activeOpacity={activeOpacity}\n inactiveOpacity={inactiveOpacity}\n activeTintColor={activeTintColor}\n inactiveTintColor={inactiveTintColor}\n renderIcon={icon}\n style={iconStyle}\n />\n );\n };\n\n const scene = { route, focused };\n\n const backgroundColor = focused\n ? activeBackgroundColor\n : inactiveBackgroundColor;\n\n return button({\n to,\n onPress,\n onLongPress,\n testID,\n accessibilityLabel,\n // FIXME: accessibilityRole: 'tab' doesn't seem to work as expected on iOS\n accessibilityRole: Platform.select({ ios: 'button', default: 'tab' }),\n accessibilityState: { selected: focused },\n // @ts-expect-error: keep for compatibility with older React Native versions\n accessibilityStates: focused ? ['selected'] : [],\n style: [\n styles.tab,\n { backgroundColor },\n horizontal ? styles.tabLandscape : styles.tabPortrait,\n style,\n ],\n children: (\n <React.Fragment>\n {renderIcon(scene)}\n {renderLabel(scene)}\n </React.Fragment>\n ),\n }) as React.ReactElement;\n}\n\nconst styles = StyleSheet.create({\n tab: {\n flex: 1,\n alignItems: 'center',\n },\n tabPortrait: {\n justifyContent: 'flex-end',\n flexDirection: 'column',\n },\n tabLandscape: {\n justifyContent: 'center',\n flexDirection: 'row',\n },\n label: {\n textAlign: 'center',\n backgroundColor: 'transparent',\n },\n labelBeneath: {\n fontSize: 10,\n },\n labelBeside: {\n fontSize: 13,\n marginLeft: 20,\n marginTop: 3,\n },\n button: {\n display: 'flex',\n },\n});\n"]}
|
|
@@ -63,6 +63,7 @@ export default function BottomTabView(props) {
|
|
|
63
63
|
} = state;
|
|
64
64
|
return /*#__PURE__*/React.createElement(SafeAreaProviderCompat, null, /*#__PURE__*/React.createElement(MaybeScreenContainer, {
|
|
65
65
|
enabled: detachInactiveScreens,
|
|
66
|
+
hasTwoStates: true,
|
|
66
67
|
style: styles.container
|
|
67
68
|
}, routes.map((route, index) => {
|
|
68
69
|
const descriptor = descriptors[route.key];
|
|
@@ -82,13 +83,16 @@ export default function BottomTabView(props) {
|
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
const {
|
|
85
|
-
header =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
header = _ref5 => {
|
|
87
|
+
let {
|
|
88
|
+
layout,
|
|
89
|
+
options
|
|
90
|
+
} = _ref5;
|
|
91
|
+
return /*#__PURE__*/React.createElement(Header, _extends({}, options, {
|
|
92
|
+
layout: layout,
|
|
93
|
+
title: getHeaderTitle(options, route.name)
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
92
96
|
} = descriptor.options;
|
|
93
97
|
return /*#__PURE__*/React.createElement(MaybeScreen, {
|
|
94
98
|
key: route.key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BottomTabView.tsx"],"names":["getHeaderTitle","Header","SafeAreaProviderCompat","Screen","React","Platform","StyleSheet","SafeAreaInsetsContext","BottomTabBarHeightCallbackContext","BottomTabBarHeightContext","BottomTabBar","getTabBarHeight","MaybeScreen","MaybeScreenContainer","BottomTabView","props","tabBar","state","navigation","descriptors","safeAreaInsets","detachInactiveScreens","OS","sceneContainerStyle","focusedRouteKey","routes","index","key","loaded","setLoaded","useState","includes","dimensions","initialMetrics","frame","tabBarHeight","setTabBarHeight","layout","width","height","insets","style","options","tabBarStyle","renderTabBar","top","right","bottom","left","styles","container","map","route","descriptor","lazy","unmountOnBlur","isFocused","header","name","absoluteFill","zIndex","headerShown","headerTransparent","headerStatusBarHeight","render","create","flex","overflow"],"mappings":";;AAAA,SACEA,cADF,EAEEC,MAFF,EAGEC,sBAHF,EAIEC,MAJF,QAKO,4BALP;AAUA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SAASC,QAAT,EAAmBC,UAAnB,QAAqC,cAArC;AACA,SAASC,qBAAT,QAAsC,gCAAtC;AAUA,OAAOC,iCAAP,MAA8C,4CAA9C;AACA,OAAOC,yBAAP,MAAsC,oCAAtC;AACA,OAAOC,YAAP,IAAuBC,eAAvB,QAA8C,gBAA9C;AACA,SAASC,WAAT,EAAsBC,oBAAtB,QAAkD,kBAAlD;AAQA,eAAe,SAASC,aAAT,CAAuBC,KAAvB,EAAqC;AAClD,QAAM;AACJC,IAAAA,MAAM,GAAID,KAAD,iBAA8B,oBAAC,YAAD,EAAkBA,KAAlB,CADnC;AAEJE,IAAAA,KAFI;AAGJC,IAAAA,UAHI;AAIJC,IAAAA,WAJI;AAKJC,IAAAA,cALI;AAMJC,IAAAA,qBAAqB,GAAGhB,QAAQ,CAACiB,EAAT,KAAgB,KAAhB,IACtBjB,QAAQ,CAACiB,EAAT,KAAgB,SADM,IAEtBjB,QAAQ,CAACiB,EAAT,KAAgB,KARd;AASJC,IAAAA;AATI,MAUFR,KAVJ;AAYA,QAAMS,eAAe,GAAGP,KAAK,CAACQ,MAAN,CAAaR,KAAK,CAACS,KAAnB,EAA0BC,GAAlD;AACA,QAAM,CAACC,MAAD,EAASC,SAAT,IAAsBzB,KAAK,CAAC0B,QAAN,CAAe,CAACN,eAAD,CAAf,CAA5B;;AAEA,MAAI,CAACI,MAAM,CAACG,QAAP,CAAgBP,eAAhB,CAAL,EAAuC;AACrCK,IAAAA,SAAS,CAAC,CAAC,GAAGD,MAAJ,EAAYJ,eAAZ,CAAD,CAAT;AACD;;AAED,QAAMQ,UAAU,GAAG9B,sBAAsB,CAAC+B,cAAvB,CAAsCC,KAAzD;AACA,QAAM,CAACC,YAAD,EAAeC,eAAf,IAAkChC,KAAK,CAAC0B,QAAN,CAAe,MACrDnB,eAAe,CAAC;AACdM,IAAAA,KADc;AAEdE,IAAAA,WAFc;AAGda,IAAAA,UAHc;AAIdK,IAAAA,MAAM,EAAE;AAAEC,MAAAA,KAAK,EAAEN,UAAU,CAACM,KAApB;AAA2BC,MAAAA,MAAM,EAAE;AAAnC,KAJM;AAKdC,IAAAA,MAAM,EAAE,EACN,GAAGtC,sBAAsB,CAAC+B,cAAvB,CAAsCO,MADnC;AAEN,SAAGzB,KAAK,CAACK;AAFH,KALM;AASdqB,IAAAA,KAAK,EAAEtB,WAAW,CAACF,KAAK,CAACQ,MAAN,CAAaR,KAAK,CAACS,KAAnB,EAA0BC,GAA3B,CAAX,CAA2Ce,OAA3C,CAAmDC;AAT5C,GAAD,CADuB,CAAxC;;AAcA,QAAMC,YAAY,GAAG,MAAM;AACzB,wBACE,oBAAC,qBAAD,CAAuB,QAAvB,QACIJ,MAAD;AAAA;;AAAA,aACCxB,MAAM,CAAC;AACLC,QAAAA,KAAK,EAAEA,KADF;AAELE,QAAAA,WAAW,EAAEA,WAFR;AAGLD,QAAAA,UAAU,EAAEA,UAHP;AAILsB,QAAAA,MAAM,EAAE;AACNK,UAAAA,GAAG,iCAAEzB,cAAF,aAAEA,cAAF,uBAAEA,cAAc,CAAEyB,GAAlB,qEAAyBL,MAAzB,aAAyBA,MAAzB,uBAAyBA,MAAM,CAAEK,GAAjC,uCAAwC,CADrC;AAENC,UAAAA,KAAK,oCAAE1B,cAAF,aAAEA,cAAF,uBAAEA,cAAc,CAAE0B,KAAlB,yEAA2BN,MAA3B,aAA2BA,MAA3B,uBAA2BA,MAAM,CAAEM,KAAnC,yCAA4C,CAF3C;AAGNC,UAAAA,MAAM,oCAAE3B,cAAF,aAAEA,cAAF,uBAAEA,cAAc,CAAE2B,MAAlB,yEAA4BP,MAA5B,aAA4BA,MAA5B,uBAA4BA,MAAM,CAAEO,MAApC,yCAA8C,CAH9C;AAINC,UAAAA,IAAI,mCAAE5B,cAAF,aAAEA,cAAF,uBAAEA,cAAc,CAAE4B,IAAlB,uEAA0BR,MAA1B,aAA0BA,MAA1B,uBAA0BA,MAAM,CAAEQ,IAAlC,yCAA0C;AAJxC;AAJH,OAAD,CADP;AAAA,KADH,CADF;AAiBD,GAlBD;;AAoBA,QAAM;AAAEvB,IAAAA;AAAF,MAAaR,KAAnB;AAEA,sBACE,oBAAC,sBAAD,qBACE,oBAAC,oBAAD;AACE,IAAA,OAAO,EAAEI,qBADX;AAEE,IAAA,KAAK,EAAE4B,MAAM,CAACC;AAFhB,KAIGzB,MAAM,CAAC0B,GAAP,CAAW,CAACC,KAAD,EAAQ1B,KAAR,KAAkB;AAC5B,UAAM2B,UAAU,GAAGlC,WAAW,CAACiC,KAAK,CAACzB,GAAP,CAA9B;AACA,UAAM;AAAE2B,MAAAA,IAAI,GAAG,IAAT;AAAeC,MAAAA;AAAf,QAAiCF,UAAU,CAACX,OAAlD;AACA,UAAMc,SAAS,GAAGvC,KAAK,CAACS,KAAN,KAAgBA,KAAlC;;AAEA,QAAI6B,aAAa,IAAI,CAACC,SAAtB,EAAiC;AAC/B,aAAO,IAAP;AACD;;AAED,QAAIF,IAAI,IAAI,CAAC1B,MAAM,CAACG,QAAP,CAAgBqB,KAAK,CAACzB,GAAtB,CAAT,IAAuC,CAAC6B,SAA5C,EAAuD;AACrD;AACA,aAAO,IAAP;AACD;;AAED,UAAM;AACJC,MAAAA,MAAM,GAAG,CAAC;AAAEpB,QAAAA,MAAF;AAAUK,QAAAA;AAAV,OAAD,kBACP,oBAAC,MAAD,eACMA,OADN;AAEE,QAAA,MAAM,EAAEL,MAFV;AAGE,QAAA,KAAK,EAAErC,cAAc,CAAC0C,OAAD,EAAUU,KAAK,CAACM,IAAhB;AAHvB;AAFE,QAQFL,UAAU,CAACX,OARf;AAUA,wBACE,oBAAC,WAAD;AACE,MAAA,GAAG,EAAEU,KAAK,CAACzB,GADb;AAEE,MAAA,KAAK,EAAE,CAACrB,UAAU,CAACqD,YAAZ,EAA0B;AAAEC,QAAAA,MAAM,EAAEJ,SAAS,GAAG,CAAH,GAAO,CAAC;AAA3B,OAA1B,CAFT;AAGE,MAAA,OAAO,EAAEA,SAHX;AAIE,MAAA,OAAO,EAAEnC;AAJX,oBAME,oBAAC,yBAAD,CAA2B,QAA3B;AAAoC,MAAA,KAAK,EAAEc;AAA3C,oBACE,oBAAC,MAAD;AACE,MAAA,OAAO,EAAEqB,SADX;AAEE,MAAA,KAAK,EAAEH,UAAU,CAACD,KAFpB;AAGE,MAAA,UAAU,EAAEC,UAAU,CAACnC,UAHzB;AAIE,MAAA,WAAW,EAAEmC,UAAU,CAACX,OAAX,CAAmBmB,WAJlC;AAKE,MAAA,iBAAiB,EAAER,UAAU,CAACX,OAAX,CAAmBoB,iBALxC;AAME,MAAA,qBAAqB,EACnBT,UAAU,CAACX,OAAX,CAAmBqB,qBAPvB;AASE,MAAA,MAAM,EAAEN,MAAM,CAAC;AACbpB,QAAAA,MAAM,EAAEL,UADK;AAEboB,QAAAA,KAAK,EAAEC,UAAU,CAACD,KAFL;AAGblC,QAAAA,UAAU,EACRmC,UAAU,CAACnC,UAJA;AAKbwB,QAAAA,OAAO,EAAEW,UAAU,CAACX;AALP,OAAD,CAThB;AAgBE,MAAA,KAAK,EAAEnB;AAhBT,OAkBG8B,UAAU,CAACW,MAAX,EAlBH,CADF,CANF,CADF;AA+BD,GAvDA,CAJH,CADF,eA8DE,oBAAC,iCAAD,CAAmC,QAAnC;AAA4C,IAAA,KAAK,EAAE5B;AAAnD,KACGQ,YAAY,EADf,CA9DF,CADF;AAoED;AAED,MAAMK,MAAM,GAAG3C,UAAU,CAAC2D,MAAX,CAAkB;AAC/Bf,EAAAA,SAAS,EAAE;AACTgB,IAAAA,IAAI,EAAE,CADG;AAETC,IAAAA,QAAQ,EAAE;AAFD;AADoB,CAAlB,CAAf","sourcesContent":["import {\n getHeaderTitle,\n Header,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n TabNavigationState,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport { SafeAreaInsetsContext } from 'react-native-safe-area-context';\n\nimport type {\n BottomTabBarProps,\n BottomTabDescriptorMap,\n BottomTabHeaderProps,\n BottomTabNavigationConfig,\n BottomTabNavigationHelpers,\n BottomTabNavigationProp,\n} from '../types';\nimport BottomTabBarHeightCallbackContext from '../utils/BottomTabBarHeightCallbackContext';\nimport BottomTabBarHeightContext from '../utils/BottomTabBarHeightContext';\nimport BottomTabBar, { getTabBarHeight } from './BottomTabBar';\nimport { MaybeScreen, MaybeScreenContainer } from './ScreenFallback';\n\ntype Props = BottomTabNavigationConfig & {\n state: TabNavigationState<ParamListBase>;\n navigation: BottomTabNavigationHelpers;\n descriptors: BottomTabDescriptorMap;\n};\n\nexport default function BottomTabView(props: Props) {\n const {\n tabBar = (props: BottomTabBarProps) => <BottomTabBar {...props} />,\n state,\n navigation,\n descriptors,\n safeAreaInsets,\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n sceneContainerStyle,\n } = props;\n\n const focusedRouteKey = state.routes[state.index].key;\n const [loaded, setLoaded] = React.useState([focusedRouteKey]);\n\n if (!loaded.includes(focusedRouteKey)) {\n setLoaded([...loaded, focusedRouteKey]);\n }\n\n const dimensions = SafeAreaProviderCompat.initialMetrics.frame;\n const [tabBarHeight, setTabBarHeight] = React.useState(() =>\n getTabBarHeight({\n state,\n descriptors,\n dimensions,\n layout: { width: dimensions.width, height: 0 },\n insets: {\n ...SafeAreaProviderCompat.initialMetrics.insets,\n ...props.safeAreaInsets,\n },\n style: descriptors[state.routes[state.index].key].options.tabBarStyle,\n })\n );\n\n const renderTabBar = () => {\n return (\n <SafeAreaInsetsContext.Consumer>\n {(insets) =>\n tabBar({\n state: state,\n descriptors: descriptors,\n navigation: navigation,\n insets: {\n top: safeAreaInsets?.top ?? insets?.top ?? 0,\n right: safeAreaInsets?.right ?? insets?.right ?? 0,\n bottom: safeAreaInsets?.bottom ?? insets?.bottom ?? 0,\n left: safeAreaInsets?.left ?? insets?.left ?? 0,\n },\n })\n }\n </SafeAreaInsetsContext.Consumer>\n );\n };\n\n const { routes } = state;\n\n return (\n <SafeAreaProviderCompat>\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n style={styles.container}\n >\n {routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const { lazy = true, unmountOnBlur } = descriptor.options;\n const isFocused = state.index === index;\n\n if (unmountOnBlur && !isFocused) {\n return null;\n }\n\n if (lazy && !loaded.includes(route.key) && !isFocused) {\n // Don't render a lazy screen if we've never navigated to it\n return null;\n }\n\n const {\n header = ({ layout, options }: BottomTabHeaderProps) => (\n <Header\n {...options}\n layout={layout}\n title={getHeaderTitle(options, route.name)}\n />\n ),\n } = descriptor.options;\n\n return (\n <MaybeScreen\n key={route.key}\n style={[StyleSheet.absoluteFill, { zIndex: isFocused ? 0 : -1 }]}\n visible={isFocused}\n enabled={detachInactiveScreens}\n >\n <BottomTabBarHeightContext.Provider value={tabBarHeight}>\n <Screen\n focused={isFocused}\n route={descriptor.route}\n navigation={descriptor.navigation}\n headerShown={descriptor.options.headerShown}\n headerTransparent={descriptor.options.headerTransparent}\n headerStatusBarHeight={\n descriptor.options.headerStatusBarHeight\n }\n header={header({\n layout: dimensions,\n route: descriptor.route,\n navigation:\n descriptor.navigation as BottomTabNavigationProp<ParamListBase>,\n options: descriptor.options,\n })}\n style={sceneContainerStyle}\n >\n {descriptor.render()}\n </Screen>\n </BottomTabBarHeightContext.Provider>\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n <BottomTabBarHeightCallbackContext.Provider value={setTabBarHeight}>\n {renderTabBar()}\n </BottomTabBarHeightCallbackContext.Provider>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["BottomTabView.tsx"],"names":["getHeaderTitle","Header","SafeAreaProviderCompat","Screen","React","Platform","StyleSheet","SafeAreaInsetsContext","BottomTabBarHeightCallbackContext","BottomTabBarHeightContext","BottomTabBar","getTabBarHeight","MaybeScreen","MaybeScreenContainer","BottomTabView","props","tabBar","state","navigation","descriptors","safeAreaInsets","detachInactiveScreens","OS","sceneContainerStyle","focusedRouteKey","routes","index","key","loaded","setLoaded","useState","includes","dimensions","initialMetrics","frame","tabBarHeight","setTabBarHeight","layout","width","height","insets","style","options","tabBarStyle","renderTabBar","top","right","bottom","left","styles","container","map","route","descriptor","lazy","unmountOnBlur","isFocused","header","name","absoluteFill","zIndex","headerShown","headerTransparent","headerStatusBarHeight","render","create","flex","overflow"],"mappings":"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","sourcesContent":["import {\n getHeaderTitle,\n Header,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n TabNavigationState,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet } from 'react-native';\nimport { SafeAreaInsetsContext } from 'react-native-safe-area-context';\n\nimport type {\n BottomTabBarProps,\n BottomTabDescriptorMap,\n BottomTabHeaderProps,\n BottomTabNavigationConfig,\n BottomTabNavigationHelpers,\n BottomTabNavigationProp,\n} from '../types';\nimport BottomTabBarHeightCallbackContext from '../utils/BottomTabBarHeightCallbackContext';\nimport BottomTabBarHeightContext from '../utils/BottomTabBarHeightContext';\nimport BottomTabBar, { getTabBarHeight } from './BottomTabBar';\nimport { MaybeScreen, MaybeScreenContainer } from './ScreenFallback';\n\ntype Props = BottomTabNavigationConfig & {\n state: TabNavigationState<ParamListBase>;\n navigation: BottomTabNavigationHelpers;\n descriptors: BottomTabDescriptorMap;\n};\n\nexport default function BottomTabView(props: Props) {\n const {\n tabBar = (props: BottomTabBarProps) => <BottomTabBar {...props} />,\n state,\n navigation,\n descriptors,\n safeAreaInsets,\n detachInactiveScreens = Platform.OS === 'web' ||\n Platform.OS === 'android' ||\n Platform.OS === 'ios',\n sceneContainerStyle,\n } = props;\n\n const focusedRouteKey = state.routes[state.index].key;\n const [loaded, setLoaded] = React.useState([focusedRouteKey]);\n\n if (!loaded.includes(focusedRouteKey)) {\n setLoaded([...loaded, focusedRouteKey]);\n }\n\n const dimensions = SafeAreaProviderCompat.initialMetrics.frame;\n const [tabBarHeight, setTabBarHeight] = React.useState(() =>\n getTabBarHeight({\n state,\n descriptors,\n dimensions,\n layout: { width: dimensions.width, height: 0 },\n insets: {\n ...SafeAreaProviderCompat.initialMetrics.insets,\n ...props.safeAreaInsets,\n },\n style: descriptors[state.routes[state.index].key].options.tabBarStyle,\n })\n );\n\n const renderTabBar = () => {\n return (\n <SafeAreaInsetsContext.Consumer>\n {(insets) =>\n tabBar({\n state: state,\n descriptors: descriptors,\n navigation: navigation,\n insets: {\n top: safeAreaInsets?.top ?? insets?.top ?? 0,\n right: safeAreaInsets?.right ?? insets?.right ?? 0,\n bottom: safeAreaInsets?.bottom ?? insets?.bottom ?? 0,\n left: safeAreaInsets?.left ?? insets?.left ?? 0,\n },\n })\n }\n </SafeAreaInsetsContext.Consumer>\n );\n };\n\n const { routes } = state;\n\n return (\n <SafeAreaProviderCompat>\n <MaybeScreenContainer\n enabled={detachInactiveScreens}\n hasTwoStates\n style={styles.container}\n >\n {routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const { lazy = true, unmountOnBlur } = descriptor.options;\n const isFocused = state.index === index;\n\n if (unmountOnBlur && !isFocused) {\n return null;\n }\n\n if (lazy && !loaded.includes(route.key) && !isFocused) {\n // Don't render a lazy screen if we've never navigated to it\n return null;\n }\n\n const {\n header = ({ layout, options }: BottomTabHeaderProps) => (\n <Header\n {...options}\n layout={layout}\n title={getHeaderTitle(options, route.name)}\n />\n ),\n } = descriptor.options;\n\n return (\n <MaybeScreen\n key={route.key}\n style={[StyleSheet.absoluteFill, { zIndex: isFocused ? 0 : -1 }]}\n visible={isFocused}\n enabled={detachInactiveScreens}\n >\n <BottomTabBarHeightContext.Provider value={tabBarHeight}>\n <Screen\n focused={isFocused}\n route={descriptor.route}\n navigation={descriptor.navigation}\n headerShown={descriptor.options.headerShown}\n headerTransparent={descriptor.options.headerTransparent}\n headerStatusBarHeight={\n descriptor.options.headerStatusBarHeight\n }\n header={header({\n layout: dimensions,\n route: descriptor.route,\n navigation:\n descriptor.navigation as BottomTabNavigationProp<ParamListBase>,\n options: descriptor.options,\n })}\n style={sceneContainerStyle}\n >\n {descriptor.render()}\n </Screen>\n </BottomTabBarHeightContext.Provider>\n </MaybeScreen>\n );\n })}\n </MaybeScreenContainer>\n <BottomTabBarHeightCallbackContext.Provider value={setTabBarHeight}>\n {renderTabBar()}\n </BottomTabBarHeightCallbackContext.Provider>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n overflow: 'hidden',\n },\n});\n"]}
|
|
@@ -10,12 +10,14 @@ try {
|
|
|
10
10
|
} catch (e) {// Ignore
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export const MaybeScreenContainer =
|
|
14
|
-
enabled,
|
|
15
|
-
...rest
|
|
16
|
-
}) => {
|
|
13
|
+
export const MaybeScreenContainer = _ref => {
|
|
17
14
|
var _Screens, _Screens$screensEnabl;
|
|
18
15
|
|
|
16
|
+
let {
|
|
17
|
+
enabled,
|
|
18
|
+
...rest
|
|
19
|
+
} = _ref;
|
|
20
|
+
|
|
19
21
|
if ((_Screens = Screens) !== null && _Screens !== void 0 && (_Screens$screensEnabl = _Screens.screensEnabled) !== null && _Screens$screensEnabl !== void 0 && _Screens$screensEnabl.call(_Screens)) {
|
|
20
22
|
return /*#__PURE__*/React.createElement(Screens.ScreenContainer, _extends({
|
|
21
23
|
enabled: enabled
|
|
@@ -24,13 +26,15 @@ export const MaybeScreenContainer = ({
|
|
|
24
26
|
|
|
25
27
|
return /*#__PURE__*/React.createElement(View, rest);
|
|
26
28
|
};
|
|
27
|
-
export function MaybeScreen({
|
|
28
|
-
visible,
|
|
29
|
-
children,
|
|
30
|
-
...rest
|
|
31
|
-
}) {
|
|
29
|
+
export function MaybeScreen(_ref2) {
|
|
32
30
|
var _Screens2, _Screens2$screensEnab;
|
|
33
31
|
|
|
32
|
+
let {
|
|
33
|
+
visible,
|
|
34
|
+
children,
|
|
35
|
+
...rest
|
|
36
|
+
} = _ref2;
|
|
37
|
+
|
|
34
38
|
if ((_Screens2 = Screens) !== null && _Screens2 !== void 0 && (_Screens2$screensEnab = _Screens2.screensEnabled) !== null && _Screens2$screensEnab !== void 0 && _Screens2$screensEnab.call(_Screens2)) {
|
|
35
39
|
return /*#__PURE__*/React.createElement(Screens.Screen, _extends({
|
|
36
40
|
activityState: visible ? 2 : 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ScreenFallback.tsx"],"names":["ResourceSavingView","React","View","Screens","require","e","MaybeScreenContainer","enabled","rest","screensEnabled","MaybeScreen","visible","children"],"mappings":";;AAAA,SAASA,kBAAT,QAAmC,4BAAnC;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SAAoBC,IAApB,QAAsD,cAAtD;AASA,IAAIC,OAAJ;;AAEA,IAAI;AACFA,EAAAA,OAAO,GAAGC,OAAO,CAAC,sBAAD,CAAjB;AACD,CAFD,CAEE,OAAOC,CAAP,EAAU,CACV;AACD;;AAED,OAAO,MAAMC,oBAAoB,GAAG,
|
|
1
|
+
{"version":3,"sources":["ScreenFallback.tsx"],"names":["ResourceSavingView","React","View","Screens","require","e","MaybeScreenContainer","enabled","rest","screensEnabled","MaybeScreen","visible","children"],"mappings":";;AAAA,SAASA,kBAAT,QAAmC,4BAAnC;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SAAoBC,IAApB,QAAsD,cAAtD;AASA,IAAIC,OAAJ;;AAEA,IAAI;AACFA,EAAAA,OAAO,GAAGC,OAAO,CAAC,sBAAD,CAAjB;AACD,CAFD,CAEE,OAAOC,CAAP,EAAU,CACV;AACD;;AAED,OAAO,MAAMC,oBAAoB,GAAG,QAO9B;AAAA;;AAAA,MAP+B;AACnCC,IAAAA,OADmC;AAEnC,OAAGC;AAFgC,GAO/B;;AACJ,kBAAIL,OAAJ,8DAAI,SAASM,cAAb,kDAAI,oCAAJ,EAAiC;AAC/B,wBAAO,oBAAC,OAAD,CAAS,eAAT;AAAyB,MAAA,OAAO,EAAEF;AAAlC,OAA+CC,IAA/C,EAAP;AACD;;AAED,sBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD,CAbM;AAeP,OAAO,SAASE,WAAT,QAA4D;AAAA;;AAAA,MAAvC;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,QAAX;AAAqB,OAAGJ;AAAxB,GAAuC;;AACjE,mBAAIL,OAAJ,+DAAI,UAASM,cAAb,kDAAI,qCAAJ,EAAiC;AAC/B,wBACE,oBAAC,OAAD,CAAS,MAAT;AAAgB,MAAA,aAAa,EAAEE,OAAO,GAAG,CAAH,GAAO;AAA7C,OAAoDH,IAApD,GACGI,QADH,CADF;AAKD;;AAED,sBACE,oBAAC,kBAAD;AAAoB,IAAA,OAAO,EAAED;AAA7B,KAA0CH,IAA1C,GACGI,QADH,CADF;AAKD","sourcesContent":["import { ResourceSavingView } from '@react-navigation/elements';\nimport * as React from 'react';\nimport { StyleProp, View, ViewProps, ViewStyle } from 'react-native';\n\ntype Props = {\n visible: boolean;\n children: React.ReactNode;\n enabled: boolean;\n style?: StyleProp<ViewStyle>;\n};\n\nlet Screens: typeof import('react-native-screens') | undefined;\n\ntry {\n Screens = require('react-native-screens');\n} catch (e) {\n // Ignore\n}\n\nexport const MaybeScreenContainer = ({\n enabled,\n ...rest\n}: ViewProps & {\n enabled: boolean;\n hasTwoStates: boolean;\n children: React.ReactNode;\n}) => {\n if (Screens?.screensEnabled?.()) {\n return <Screens.ScreenContainer enabled={enabled} {...rest} />;\n }\n\n return <View {...rest} />;\n};\n\nexport function MaybeScreen({ visible, children, ...rest }: Props) {\n if (Screens?.screensEnabled?.()) {\n return (\n <Screens.Screen activityState={visible ? 2 : 0} {...rest}>\n {children}\n </Screens.Screen>\n );\n }\n\n return (\n <ResourceSavingView visible={visible} {...rest}>\n {children}\n </ResourceSavingView>\n );\n}\n"]}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { StyleSheet, View } from 'react-native';
|
|
3
3
|
import Badge from './Badge';
|
|
4
|
-
export default function TabBarIcon({
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
export default function TabBarIcon(_ref) {
|
|
5
|
+
let {
|
|
6
|
+
route: _,
|
|
7
|
+
horizontal,
|
|
8
|
+
badge,
|
|
9
|
+
badgeStyle,
|
|
10
|
+
activeOpacity,
|
|
11
|
+
inactiveOpacity,
|
|
12
|
+
activeTintColor,
|
|
13
|
+
inactiveTintColor,
|
|
14
|
+
renderIcon,
|
|
15
|
+
style
|
|
16
|
+
} = _ref;
|
|
16
17
|
const size = 25; // We render the icon twice at the same position on top of each other:
|
|
17
18
|
// active and inactive one, so we can fade between them.
|
|
18
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["TabBarIcon.tsx"],"names":["React","StyleSheet","View","Badge","TabBarIcon","route","_","horizontal","badge","badgeStyle","activeOpacity","inactiveOpacity","activeTintColor","inactiveTintColor","renderIcon","style","size","styles","iconHorizontal","iconVertical","icon","opacity","focused","color","badgeHorizontal","badgeVertical","create","position","alignSelf","alignItems","justifyContent","height","width","minWidth","flex","marginTop","left","top"],"mappings":"AACA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAEEC,UAFF,EAIEC,IAJF,QAMO,cANP;AAQA,OAAOC,KAAP,MAAkB,SAAlB;AAmBA,eAAe,SAASC,UAAT,
|
|
1
|
+
{"version":3,"sources":["TabBarIcon.tsx"],"names":["React","StyleSheet","View","Badge","TabBarIcon","route","_","horizontal","badge","badgeStyle","activeOpacity","inactiveOpacity","activeTintColor","inactiveTintColor","renderIcon","style","size","styles","iconHorizontal","iconVertical","icon","opacity","focused","color","badgeHorizontal","badgeVertical","create","position","alignSelf","alignItems","justifyContent","height","width","minWidth","flex","marginTop","left","top"],"mappings":"AACA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAEEC,UAFF,EAIEC,IAJF,QAMO,cANP;AAQA,OAAOC,KAAP,MAAkB,SAAlB;AAmBA,eAAe,SAASC,UAAT,OAWL;AAAA,MAXyB;AACjCC,IAAAA,KAAK,EAAEC,CAD0B;AAEjCC,IAAAA,UAFiC;AAGjCC,IAAAA,KAHiC;AAIjCC,IAAAA,UAJiC;AAKjCC,IAAAA,aALiC;AAMjCC,IAAAA,eANiC;AAOjCC,IAAAA,eAPiC;AAQjCC,IAAAA,iBARiC;AASjCC,IAAAA,UATiC;AAUjCC,IAAAA;AAViC,GAWzB;AACR,QAAMC,IAAI,GAAG,EAAb,CADQ,CAGR;AACA;;AACA,sBACE,oBAAC,IAAD;AACE,IAAA,KAAK,EAAE,CAACT,UAAU,GAAGU,MAAM,CAACC,cAAV,GAA2BD,MAAM,CAACE,YAA7C,EAA2DJ,KAA3D;AADT,kBAGE,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAE,CAACE,MAAM,CAACG,IAAR,EAAc;AAAEC,MAAAA,OAAO,EAAEX;AAAX,KAAd;AAAb,KACGI,UAAU,CAAC;AACVQ,IAAAA,OAAO,EAAE,IADC;AAEVN,IAAAA,IAFU;AAGVO,IAAAA,KAAK,EAAEX;AAHG,GAAD,CADb,CAHF,eAUE,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAE,CAACK,MAAM,CAACG,IAAR,EAAc;AAAEC,MAAAA,OAAO,EAAEV;AAAX,KAAd;AAAb,KACGG,UAAU,CAAC;AACVQ,IAAAA,OAAO,EAAE,KADC;AAEVN,IAAAA,IAFU;AAGVO,IAAAA,KAAK,EAAEV;AAHG,GAAD,CADb,CAVF,eAiBE,oBAAC,KAAD;AACE,IAAA,OAAO,EAAEL,KAAK,IAAI,IADpB;AAEE,IAAA,KAAK,EAAE,CACLS,MAAM,CAACT,KADF,EAELD,UAAU,GAAGU,MAAM,CAACO,eAAV,GAA4BP,MAAM,CAACQ,aAFxC,EAGLhB,UAHK,CAFT;AAOE,IAAA,IAAI,EAAGO,IAAI,GAAG,CAAR,GAAa;AAPrB,KASGR,KATH,CAjBF,CADF;AA+BD;AAED,MAAMS,MAAM,GAAGhB,UAAU,CAACyB,MAAX,CAAkB;AAC/BN,EAAAA,IAAI,EAAE;AACJ;AACA;AACA;AACAO,IAAAA,QAAQ,EAAE,UAJN;AAKJC,IAAAA,SAAS,EAAE,QALP;AAMJC,IAAAA,UAAU,EAAE,QANR;AAOJC,IAAAA,cAAc,EAAE,QAPZ;AAQJC,IAAAA,MAAM,EAAE,MARJ;AASJC,IAAAA,KAAK,EAAE,MATH;AAUJ;AACAC,IAAAA,QAAQ,EAAE;AAXN,GADyB;AAc/Bd,EAAAA,YAAY,EAAE;AACZe,IAAAA,IAAI,EAAE;AADM,GAdiB;AAiB/BhB,EAAAA,cAAc,EAAE;AACda,IAAAA,MAAM,EAAE,MADM;AAEdI,IAAAA,SAAS,EAAE;AAFG,GAjBe;AAqB/B3B,EAAAA,KAAK,EAAE;AACLmB,IAAAA,QAAQ,EAAE,UADL;AAELS,IAAAA,IAAI,EAAE;AAFD,GArBwB;AAyB/BX,EAAAA,aAAa,EAAE;AACbY,IAAAA,GAAG,EAAE;AADQ,GAzBgB;AA4B/Bb,EAAAA,eAAe,EAAE;AACfa,IAAAA,GAAG,EAAE;AADU;AA5Bc,CAAlB,CAAf","sourcesContent":["import type { Route } from '@react-navigation/native';\nimport React from 'react';\nimport {\n StyleProp,\n StyleSheet,\n TextStyle,\n View,\n ViewStyle,\n} from 'react-native';\n\nimport Badge from './Badge';\n\ntype Props = {\n route: Route<string>;\n horizontal: boolean;\n badge?: string | number;\n badgeStyle?: StyleProp<TextStyle>;\n activeOpacity: number;\n inactiveOpacity: number;\n activeTintColor: string;\n inactiveTintColor: string;\n renderIcon: (props: {\n focused: boolean;\n color: string;\n size: number;\n }) => React.ReactNode;\n style: StyleProp<ViewStyle>;\n};\n\nexport default function TabBarIcon({\n route: _,\n horizontal,\n badge,\n badgeStyle,\n activeOpacity,\n inactiveOpacity,\n activeTintColor,\n inactiveTintColor,\n renderIcon,\n style,\n}: Props) {\n const size = 25;\n\n // We render the icon twice at the same position on top of each other:\n // active and inactive one, so we can fade between them.\n return (\n <View\n style={[horizontal ? styles.iconHorizontal : styles.iconVertical, style]}\n >\n <View style={[styles.icon, { opacity: activeOpacity }]}>\n {renderIcon({\n focused: true,\n size,\n color: activeTintColor,\n })}\n </View>\n <View style={[styles.icon, { opacity: inactiveOpacity }]}>\n {renderIcon({\n focused: false,\n size,\n color: inactiveTintColor,\n })}\n </View>\n <Badge\n visible={badge != null}\n style={[\n styles.badge,\n horizontal ? styles.badgeHorizontal : styles.badgeVertical,\n badgeStyle,\n ]}\n size={(size * 3) / 4}\n >\n {badge}\n </Badge>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n icon: {\n // We render the icon twice at the same position on top of each other:\n // active and inactive one, so we can fade between them:\n // Cover the whole iconContainer:\n position: 'absolute',\n alignSelf: 'center',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n width: '100%',\n // Workaround for react-native >= 0.54 layout bug\n minWidth: 25,\n },\n iconVertical: {\n flex: 1,\n },\n iconHorizontal: {\n height: '100%',\n marginTop: 3,\n },\n badge: {\n position: 'absolute',\n left: 3,\n },\n badgeVertical: {\n top: 3,\n },\n badgeHorizontal: {\n top: 7,\n },\n});\n"]}
|
|
@@ -15,4 +15,4 @@ export { default as useBottomTabBarHeight } from './utils/useBottomTabBarHeight'
|
|
|
15
15
|
/**
|
|
16
16
|
* Types
|
|
17
17
|
*/
|
|
18
|
-
export type { BottomTabBarButtonProps, BottomTabBarProps, BottomTabHeaderProps, BottomTabNavigationOptions, BottomTabNavigationProp, BottomTabScreenProps, } from './types';
|
|
18
|
+
export type { BottomTabBarButtonProps, BottomTabBarProps, BottomTabHeaderProps, BottomTabNavigationEventMap, BottomTabNavigationOptions, BottomTabNavigationProp, BottomTabScreenProps, } from './types';
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
import { DefaultNavigatorOptions, ParamListBase, TabNavigationState, TabRouterOptions } from '@react-navigation/native';
|
|
3
3
|
import type { BottomTabNavigationConfig, BottomTabNavigationEventMap, BottomTabNavigationOptions } from '../types';
|
|
4
4
|
declare type Props = DefaultNavigatorOptions<ParamListBase, TabNavigationState<ParamListBase>, BottomTabNavigationOptions, BottomTabNavigationEventMap> & TabRouterOptions & BottomTabNavigationConfig;
|
|
5
|
-
declare function BottomTabNavigator({ initialRouteName, backBehavior, children, screenListeners, screenOptions, sceneContainerStyle, ...restWithDeprecated }: Props): JSX.Element;
|
|
5
|
+
declare function BottomTabNavigator({ id, initialRouteName, backBehavior, children, screenListeners, screenOptions, sceneContainerStyle, ...restWithDeprecated }: Props): JSX.Element;
|
|
6
6
|
declare const _default: <ParamList extends ParamListBase>() => import("@react-navigation/native").TypedNavigator<ParamList, TabNavigationState<ParamListBase>, BottomTabNavigationOptions, BottomTabNavigationEventMap, typeof BottomTabNavigator>;
|
|
7
7
|
export default _default;
|
|
@@ -24,9 +24,9 @@ export declare type BottomTabNavigationEventMap = {
|
|
|
24
24
|
};
|
|
25
25
|
export declare type LabelPosition = 'beside-icon' | 'below-icon';
|
|
26
26
|
export declare type BottomTabNavigationHelpers = NavigationHelpers<ParamListBase, BottomTabNavigationEventMap> & TabActionHelpers<ParamListBase>;
|
|
27
|
-
export declare type BottomTabNavigationProp<ParamList extends ParamListBase, RouteName extends keyof ParamList = keyof ParamList> = NavigationProp<ParamList, RouteName, TabNavigationState<ParamList>, BottomTabNavigationOptions, BottomTabNavigationEventMap> & TabActionHelpers<ParamList>;
|
|
28
|
-
export declare type BottomTabScreenProps<ParamList extends ParamListBase, RouteName extends keyof ParamList = keyof ParamList> = {
|
|
29
|
-
navigation: BottomTabNavigationProp<ParamList, RouteName>;
|
|
27
|
+
export declare type BottomTabNavigationProp<ParamList extends ParamListBase, RouteName extends keyof ParamList = keyof ParamList, NavigatorID extends string | undefined = undefined> = NavigationProp<ParamList, RouteName, NavigatorID, TabNavigationState<ParamList>, BottomTabNavigationOptions, BottomTabNavigationEventMap> & TabActionHelpers<ParamList>;
|
|
28
|
+
export declare type BottomTabScreenProps<ParamList extends ParamListBase, RouteName extends keyof ParamList = keyof ParamList, NavigatorID extends string | undefined = undefined> = {
|
|
29
|
+
navigation: BottomTabNavigationProp<ParamList, RouteName, NavigatorID>;
|
|
30
30
|
route: RouteProp<ParamList, RouteName>;
|
|
31
31
|
};
|
|
32
32
|
export declare type TimingKeyboardAnimationConfig = {
|
|
@@ -18,5 +18,5 @@ declare type Props = {
|
|
|
18
18
|
*/
|
|
19
19
|
style?: Animated.WithAnimatedValue<StyleProp<TextStyle>>;
|
|
20
20
|
};
|
|
21
|
-
export default function Badge({
|
|
21
|
+
export default function Badge({ children, style, visible, size, ...rest }: Props): JSX.Element | null;
|
|
22
22
|
export {};
|
|
@@ -8,6 +8,7 @@ declare type Props = {
|
|
|
8
8
|
};
|
|
9
9
|
export declare const MaybeScreenContainer: ({ enabled, ...rest }: ViewProps & {
|
|
10
10
|
enabled: boolean;
|
|
11
|
+
hasTwoStates: boolean;
|
|
11
12
|
children: React.ReactNode;
|
|
12
13
|
}) => JSX.Element;
|
|
13
14
|
export declare function MaybeScreen({ visible, children, ...rest }: Props): JSX.Element;
|