1 line
21 KiB
Plaintext
1 line
21 KiB
Plaintext
{"version":3,"sources":["BottomTabBar.tsx"],"names":["DEFAULT_TABBAR_HEIGHT","COMPACT_TABBAR_HEIGHT","DEFAULT_MAX_TAB_ITEM_WIDTH","useNativeDriver","Platform","OS","shouldUseHorizontalLabels","state","layout","dimensions","adaptive","labelPosition","tabStyle","width","maxTabItemWidth","flattenedStyle","StyleSheet","flatten","maxWidth","routes","length","height","getPaddingBottom","insets","Math","max","bottom","select","ios","default","getTabBarHeight","style","rest","customHeight","isLandscape","horizontalLabels","paddingBottom","isPad","BottomTabBar","navigation","descriptors","activeBackgroundColor","activeTintColor","allowFontScaling","inactiveBackgroundColor","inactiveTintColor","keyboardHidesTabBar","labelStyle","iconStyle","safeAreaInsets","showLabel","colors","buildLink","focusedRoute","index","focusedDescriptor","key","focusedOptions","options","isKeyboardShown","onHeightChange","React","useContext","BottomTabBarHeightCallbackContext","shouldShowTabBar","tabBarVisible","visibilityAnimationConfigRef","useRef","tabBarVisibilityAnimationConfig","useEffect","current","isTabBarHidden","setIsTabBarHidden","useState","visible","Animated","Value","visibilityAnimationConfig","animation","show","spring","timing","toValue","duration","config","start","finished","hide","setLayout","handleLayout","e","nativeEvent","topBorderWidth","styles","tabBar","borderTopWidth","defaultInsets","top","right","left","tabBarHeight","hasHorizontalLabels","backgroundColor","card","borderTopColor","border","transform","translateY","interpolate","inputRange","outputRange","hairlineWidth","position","paddingHorizontal","content","map","route","focused","onPress","event","emit","type","target","canPreventDefault","defaultPrevented","dispatch","CommonActions","navigate","name","onLongPress","label","tabBarLabel","undefined","title","accessibilityLabel","tabBarAccessibilityLabel","params","tabBarTestID","tabBarButton","tabBarIcon","tabBarBadge","tabBarBadgeStyle","create","elevation","flex","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n View,\n Animated,\n StyleSheet,\n Platform,\n LayoutChangeEvent,\n StyleProp,\n ViewStyle,\n} from 'react-native';\nimport {\n NavigationContext,\n NavigationRouteContext,\n TabNavigationState,\n ParamListBase,\n CommonActions,\n useTheme,\n useLinkBuilder,\n} from '@react-navigation/native';\nimport { useSafeArea, EdgeInsets } from 'react-native-safe-area-context';\n\nimport BottomTabItem from './BottomTabItem';\nimport BottomTabBarHeightCallbackContext from '../utils/BottomTabBarHeightCallbackContext';\nimport useWindowDimensions from '../utils/useWindowDimensions';\nimport useIsKeyboardShown from '../utils/useIsKeyboardShown';\nimport type { BottomTabBarProps, LabelPosition } from '../types';\n\ntype Props = BottomTabBarProps & {\n activeTintColor?: string;\n inactiveTintColor?: string;\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 layout: { height: number; width: number };\n dimensions: { height: number; width: number };\n tabStyle: StyleProp<ViewStyle>;\n labelPosition: LabelPosition | undefined;\n adaptive: boolean | undefined;\n};\n\nconst shouldUseHorizontalLabels = ({\n state,\n layout,\n dimensions,\n adaptive = true,\n labelPosition,\n tabStyle,\n}: Options) => {\n if (labelPosition) {\n return labelPosition === 'beside-icon';\n }\n\n if (!adaptive) {\n return false;\n }\n\n if (layout.width >= 768) {\n // Screen size matches a tablet\n let maxTabItemWidth = DEFAULT_MAX_TAB_ITEM_WIDTH;\n\n const flattenedStyle = StyleSheet.flatten(tabStyle);\n\n if (flattenedStyle) {\n if (typeof flattenedStyle.width === 'number') {\n maxTabItemWidth = flattenedStyle.width;\n } else if (typeof flattenedStyle.maxWidth === 'number') {\n maxTabItemWidth = flattenedStyle.maxWidth;\n }\n }\n\n return state.routes.length * maxTabItemWidth <= 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 dimensions,\n insets,\n style,\n ...rest\n}: Options & {\n insets: EdgeInsets;\n style: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\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({ dimensions, ...rest });\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 activeBackgroundColor,\n activeTintColor,\n adaptive,\n allowFontScaling,\n inactiveBackgroundColor,\n inactiveTintColor,\n keyboardHidesTabBar = false,\n labelPosition,\n labelStyle,\n iconStyle,\n safeAreaInsets,\n showLabel,\n style,\n tabStyle,\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 dimensions = useWindowDimensions();\n const isKeyboardShown = useIsKeyboardShown();\n\n const onHeightChange = React.useContext(BottomTabBarHeightCallbackContext);\n\n const shouldShowTabBar =\n focusedOptions.tabBarVisible !== false &&\n !(keyboardHidesTabBar && isKeyboardShown);\n\n const visibilityAnimationConfigRef = React.useRef(\n focusedOptions.tabBarVisibilityAnimationConfig\n );\n\n React.useEffect(() => {\n visibilityAnimationConfigRef.current =\n focusedOptions.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 }, [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 const topBorderWidth =\n // @ts-ignore\n StyleSheet.flatten([styles.tabBar, style])?.borderTopWidth;\n\n onHeightChange?.(\n height +\n paddingBottom +\n (typeof topBorderWidth === 'number' ? topBorderWidth : 0)\n );\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 defaultInsets = useSafeArea();\n\n const insets = {\n top: safeAreaInsets?.top ?? defaultInsets.top,\n right: safeAreaInsets?.right ?? defaultInsets.right,\n bottom: safeAreaInsets?.bottom ?? defaultInsets.bottom,\n left: safeAreaInsets?.left ?? defaultInsets.left,\n };\n\n const paddingBottom = getPaddingBottom(insets);\n const tabBarHeight = getTabBarHeight({\n state,\n insets,\n dimensions,\n layout,\n adaptive,\n labelPosition,\n tabStyle,\n style,\n });\n\n const hasHorizontalLabels = shouldUseHorizontalLabels({\n state,\n dimensions,\n layout,\n adaptive,\n labelPosition,\n tabStyle,\n });\n\n return (\n <Animated.View\n style={[\n styles.tabBar,\n {\n backgroundColor: 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 style,\n ]}\n pointerEvents={isTabBarHidden ? 'none' : 'auto'}\n >\n <View style={styles.content} onLayout={handleLayout}>\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(route.name),\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'\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={allowFontScaling}\n activeTintColor={activeTintColor}\n inactiveTintColor={inactiveTintColor}\n activeBackgroundColor={activeBackgroundColor}\n inactiveBackgroundColor={inactiveBackgroundColor}\n button={options.tabBarButton}\n icon={options.tabBarIcon}\n badge={options.tabBarBadge}\n badgeStyle={options.tabBarBadgeStyle}\n label={label}\n showLabel={showLabel}\n labelStyle={labelStyle}\n iconStyle={iconStyle}\n style={tabStyle}\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"]} |