{"ast":null,"code":"import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nconst _excluded = [\"route\", \"style\", \"children\", \"borderless\", \"centered\", \"rippleColor\"],\n  _excluded2 = [\"key\"];\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nimport * as React from 'react';\nimport Animated from \"react-native-web/dist/exports/Animated\";\nimport Platform from \"react-native-web/dist/exports/Platform\";\nimport StyleSheet from \"react-native-web/dist/exports/StyleSheet\";\nimport Pressable from \"react-native-web/dist/exports/Pressable\";\nimport View from \"react-native-web/dist/exports/View\";\nimport color from 'color';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { getActiveTintColor, getInactiveTintColor, getLabelColor } from \"./utils\";\nimport { useInternalTheme } from \"../../core/theming\";\nimport overlay from \"../../styles/overlay\";\nimport { black, white } from \"../../styles/themes/v2/colors\";\nimport useAnimatedValue from \"../../utils/useAnimatedValue\";\nimport useAnimatedValueArray from \"../../utils/useAnimatedValueArray\";\nimport useIsKeyboardShown from \"../../utils/useIsKeyboardShown\";\nimport useLayout from \"../../utils/useLayout\";\nimport Badge from \"../Badge\";\nimport Icon from \"../Icon\";\nimport Surface from \"../Surface\";\nimport TouchableRipple from \"../TouchableRipple/TouchableRipple\";\nimport Text from \"../Typography/Text\";\nconst MIN_RIPPLE_SCALE = 0.001;\nconst MIN_TAB_WIDTH = 96;\nconst MAX_TAB_WIDTH = 168;\nconst BAR_HEIGHT = 56;\nconst OUTLINE_WIDTH = 64;\nconst Touchable = _ref => {\n  let {\n      style,\n      children,\n      borderless,\n      centered,\n      rippleColor\n    } = _ref,\n    rest = _objectWithoutPropertiesLoose(_ref, _excluded);\n  return TouchableRipple.supported ? React.createElement(TouchableRipple, _extends({}, rest, {\n    disabled: rest.disabled || undefined,\n    borderless: borderless,\n    centered: centered,\n    rippleColor: rippleColor,\n    style: style\n  }), children) : React.createElement(Pressable, _extends({\n    style: style\n  }, rest), children);\n};\nconst BottomNavigationBar = ({\n  navigationState,\n  renderIcon,\n  renderLabel,\n  renderTouchable = _ref2 => {\n    let {\n        key\n      } = _ref2,\n      props = _objectWithoutPropertiesLoose(_ref2, _excluded2);\n    return React.createElement(Touchable, _extends({\n      key: key\n    }, props));\n  },\n  getLabelText = ({\n    route\n  }) => route.title,\n  getBadge = ({\n    route\n  }) => route.badge,\n  getColor = ({\n    route\n  }) => route.color,\n  getAccessibilityLabel = ({\n    route\n  }) => route.accessibilityLabel,\n  getTestID = ({\n    route\n  }) => route.testID,\n  activeColor,\n  inactiveColor,\n  keyboardHidesNavigationBar = Platform.OS === 'android',\n  style,\n  activeIndicatorStyle,\n  labeled = true,\n  animationEasing,\n  onTabPress,\n  onTabLongPress,\n  shifting: shiftingProp,\n  safeAreaInsets,\n  labelMaxFontSizeMultiplier = 1,\n  compact: compactProp,\n  testID = 'bottom-navigation-bar',\n  theme: themeOverrides\n}) => {\n  const theme = useInternalTheme(themeOverrides);\n  const {\n    bottom,\n    left,\n    right\n  } = useSafeAreaInsets();\n  const {\n    scale\n  } = theme.animation;\n  const compact = compactProp ?? !theme.isV3;\n  let shifting = shiftingProp ?? (theme.isV3 ? false : navigationState.routes.length > 3);\n  if (shifting && navigationState.routes.length < 2) {\n    shifting = false;\n    console.warn('BottomNavigation.Bar needs at least 2 tabs to run shifting animation');\n  }\n  const visibleAnim = useAnimatedValue(1);\n  const tabsAnims = useAnimatedValueArray(navigationState.routes.map((_, i) => i === navigationState.index ? 1 : 0));\n  const indexAnim = useAnimatedValue(navigationState.index);\n  const rippleAnim = useAnimatedValue(MIN_RIPPLE_SCALE);\n  const [layout, onLayout] = useLayout();\n  const [keyboardVisible, setKeyboardVisible] = React.useState(false);\n  const handleKeyboardShow = React.useCallback(() => {\n    setKeyboardVisible(true);\n    Animated.timing(visibleAnim, {\n      toValue: 0,\n      duration: 150 * scale,\n      useNativeDriver: true\n    }).start();\n  }, [scale, visibleAnim]);\n  const handleKeyboardHide = React.useCallback(() => {\n    Animated.timing(visibleAnim, {\n      toValue: 1,\n      duration: 100 * scale,\n      useNativeDriver: true\n    }).start(() => {\n      setKeyboardVisible(false);\n    });\n  }, [scale, visibleAnim]);\n  const animateToIndex = React.useCallback(index => {\n    rippleAnim.setValue(MIN_RIPPLE_SCALE);\n    Animated.parallel([Animated.timing(rippleAnim, {\n      toValue: 1,\n      duration: theme.isV3 || shifting ? 400 * scale : 0,\n      useNativeDriver: true\n    }), ...navigationState.routes.map((_, i) => Animated.timing(tabsAnims[i], {\n      toValue: i === index ? 1 : 0,\n      duration: theme.isV3 || shifting ? 150 * scale : 0,\n      useNativeDriver: true,\n      easing: animationEasing\n    }))]).start(() => {\n      tabsAnims.map((tab, i) => tab.setValue(i === index ? 1 : 0));\n      indexAnim.setValue(index);\n      rippleAnim.setValue(MIN_RIPPLE_SCALE);\n    });\n  }, [rippleAnim, theme.isV3, shifting, scale, navigationState.routes, tabsAnims, animationEasing, indexAnim]);\n  React.useEffect(() => {\n    animateToIndex(navigationState.index);\n  }, []);\n  useIsKeyboardShown({\n    onShow: handleKeyboardShow,\n    onHide: handleKeyboardHide\n  });\n  React.useEffect(() => {\n    animateToIndex(navigationState.index);\n  }, [navigationState.index, animateToIndex]);\n  const eventForIndex = index => {\n    const event = {\n      route: navigationState.routes[index],\n      defaultPrevented: false,\n      preventDefault: () => {\n        event.defaultPrevented = true;\n      }\n    };\n    return event;\n  };\n  const {\n    routes\n  } = navigationState;\n  const {\n    colors,\n    dark: isDarkTheme,\n    mode,\n    isV3\n  } = theme;\n  const {\n    backgroundColor: customBackground,\n    elevation = 4\n  } = StyleSheet.flatten(style) || {};\n  const approxBackgroundColor = customBackground ? customBackground : isDarkTheme && mode === 'adaptive' ? overlay(elevation, colors === null || colors === void 0 ? void 0 : colors.surface) : colors === null || colors === void 0 ? void 0 : colors.primary;\n  const v2BackgroundColorInterpolation = shifting ? indexAnim.interpolate({\n    inputRange: routes.map((_, i) => i),\n    outputRange: routes.map(route => getColor({\n      route\n    }) || approxBackgroundColor)\n  }) : approxBackgroundColor;\n  const backgroundColor = isV3 ? customBackground || theme.colors.elevation.level2 : shifting ? v2BackgroundColorInterpolation : approxBackgroundColor;\n  const isDark = typeof approxBackgroundColor === 'string' ? !color(approxBackgroundColor).isLight() : true;\n  const textColor = isDark ? white : black;\n  const activeTintColor = getActiveTintColor({\n    activeColor,\n    defaultColor: textColor,\n    theme\n  });\n  const inactiveTintColor = getInactiveTintColor({\n    inactiveColor,\n    defaultColor: textColor,\n    theme\n  });\n  const touchColor = color(activeTintColor).alpha(0.12).rgb().string();\n  const maxTabWidth = routes.length > 3 ? MIN_TAB_WIDTH : MAX_TAB_WIDTH;\n  const maxTabBarWidth = maxTabWidth * routes.length;\n  const rippleSize = layout.width / 4;\n  const insets = {\n    left: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.left) ?? left,\n    right: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.right) ?? right,\n    bottom: (safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.bottom) ?? bottom\n  };\n  return React.createElement(Surface, _extends({}, theme.isV3 && {\n    elevation: 0\n  }, {\n    testID: testID,\n    style: [!theme.isV3 && styles.elevation, styles.bar, keyboardHidesNavigationBar ? {\n      transform: [{\n        translateY: visibleAnim.interpolate({\n          inputRange: [0, 1],\n          outputRange: [layout.height, 0]\n        })\n      }],\n      position: keyboardVisible ? 'absolute' : undefined\n    } : null, style],\n    pointerEvents: layout.measured ? keyboardHidesNavigationBar && keyboardVisible ? 'none' : 'auto' : 'none',\n    onLayout: onLayout,\n    container: true\n  }), React.createElement(Animated.View, {\n    style: [styles.barContent, {\n      backgroundColor\n    }],\n    testID: `${testID}-content`\n  }, React.createElement(View, {\n    style: [styles.items, {\n      marginBottom: insets.bottom,\n      marginHorizontal: Math.max(insets.left, insets.right)\n    }, compact && {\n      maxWidth: maxTabBarWidth\n    }],\n    accessibilityRole: 'tablist',\n    testID: `${testID}-content-wrapper`\n  }, shifting && !isV3 ? React.createElement(Animated.View, {\n    pointerEvents: \"none\",\n    style: [styles.ripple, {\n      top: (BAR_HEIGHT - rippleSize) / 2,\n      left: Math.min(layout.width, maxTabBarWidth) / routes.length * (navigationState.index + 0.5) - rippleSize / 2,\n      height: rippleSize,\n      width: rippleSize,\n      borderRadius: rippleSize / 2,\n      backgroundColor: getColor({\n        route: routes[navigationState.index]\n      }),\n      transform: [{\n        scale: rippleAnim.interpolate({\n          inputRange: [0, 1],\n          outputRange: [0, 8]\n        })\n      }],\n      opacity: rippleAnim.interpolate({\n        inputRange: [0, MIN_RIPPLE_SCALE, 0.3, 1],\n        outputRange: [0, 0, 1, 1]\n      })\n    }],\n    testID: `${testID}-content-ripple`\n  }) : null, routes.map((route, index) => {\n    const focused = navigationState.index === index;\n    const active = tabsAnims[index];\n    const scale = labeled && shifting ? active.interpolate({\n      inputRange: [0, 1],\n      outputRange: [0.5, 1]\n    }) : 1;\n    const translateY = labeled ? shifting ? active.interpolate({\n      inputRange: [0, 1],\n      outputRange: [7, 0]\n    }) : 0 : 7;\n    const activeOpacity = active;\n    const inactiveOpacity = active.interpolate({\n      inputRange: [0, 1],\n      outputRange: [1, 0]\n    });\n    const v3ActiveOpacity = focused ? 1 : 0;\n    const v3InactiveOpacity = shifting ? inactiveOpacity : focused ? 0 : 1;\n    const outlineScale = focused ? active.interpolate({\n      inputRange: [0, 1],\n      outputRange: [0.5, 1]\n    }) : 0;\n    const badge = getBadge({\n      route\n    });\n    const activeLabelColor = getLabelColor({\n      tintColor: activeTintColor,\n      hasColor: Boolean(activeColor),\n      focused,\n      defaultColor: textColor,\n      theme\n    });\n    const inactiveLabelColor = getLabelColor({\n      tintColor: inactiveTintColor,\n      hasColor: Boolean(inactiveColor),\n      focused,\n      defaultColor: textColor,\n      theme\n    });\n    const badgeStyle = {\n      top: !isV3 ? -2 : typeof badge === 'boolean' ? 4 : 2,\n      right: (badge != null && typeof badge !== 'boolean' ? String(badge).length * -2 : 0) - (!isV3 ? 2 : 0)\n    };\n    const isLegacyOrV3Shifting = !isV3 || isV3 && shifting && labeled;\n    const font = isV3 ? theme.fonts.labelMedium : {};\n    return renderTouchable({\n      key: route.key,\n      route,\n      borderless: true,\n      centered: true,\n      rippleColor: isV3 ? 'transparent' : touchColor,\n      onPress: () => onTabPress(eventForIndex(index)),\n      onLongPress: () => onTabLongPress === null || onTabLongPress === void 0 ? void 0 : onTabLongPress(eventForIndex(index)),\n      testID: getTestID({\n        route\n      }),\n      accessibilityLabel: getAccessibilityLabel({\n        route\n      }),\n      accessibilityRole: Platform.OS === 'ios' ? 'button' : 'tab',\n      accessibilityState: {\n        selected: focused\n      },\n      style: [styles.item, isV3 && styles.v3Item],\n      children: React.createElement(View, {\n        pointerEvents: \"none\",\n        style: isV3 && (labeled ? styles.v3TouchableContainer : styles.v3NoLabelContainer)\n      }, React.createElement(Animated.View, {\n        style: [styles.iconContainer, isV3 && styles.v3IconContainer, isLegacyOrV3Shifting && {\n          transform: [{\n            translateY\n          }]\n        }]\n      }, isV3 && focused && React.createElement(Animated.View, {\n        style: [styles.outline, {\n          transform: [{\n            scaleX: outlineScale\n          }],\n          backgroundColor: theme.colors.secondaryContainer\n        }, activeIndicatorStyle]\n      }), React.createElement(Animated.View, {\n        style: [styles.iconWrapper, isV3 && styles.v3IconWrapper, {\n          opacity: isLegacyOrV3Shifting ? activeOpacity : v3ActiveOpacity\n        }]\n      }, renderIcon ? renderIcon({\n        route,\n        focused: true,\n        color: activeTintColor\n      }) : React.createElement(Icon, {\n        source: route.focusedIcon,\n        color: activeTintColor,\n        size: 24\n      })), React.createElement(Animated.View, {\n        style: [styles.iconWrapper, isV3 && styles.v3IconWrapper, {\n          opacity: isLegacyOrV3Shifting ? inactiveOpacity : v3InactiveOpacity\n        }]\n      }, renderIcon ? renderIcon({\n        route,\n        focused: false,\n        color: inactiveTintColor\n      }) : React.createElement(Icon, {\n        source: theme.isV3 && route.unfocusedIcon !== undefined ? route.unfocusedIcon : route.focusedIcon,\n        color: inactiveTintColor,\n        size: 24\n      })), React.createElement(View, {\n        style: [styles.badgeContainer, badgeStyle]\n      }, typeof badge === 'boolean' ? React.createElement(Badge, {\n        visible: badge,\n        size: isV3 ? 6 : 8\n      }) : React.createElement(Badge, {\n        visible: badge != null,\n        size: 16\n      }, badge))), labeled ? React.createElement(Animated.View, {\n        style: [styles.labelContainer, !isV3 && {\n          transform: [{\n            scale\n          }]\n        }]\n      }, React.createElement(Animated.View, {\n        style: [styles.labelWrapper, {\n          opacity: isLegacyOrV3Shifting ? activeOpacity : v3ActiveOpacity\n        }]\n      }, renderLabel ? renderLabel({\n        route,\n        focused: true,\n        color: activeLabelColor\n      }) : React.createElement(Text, {\n        maxFontSizeMultiplier: labelMaxFontSizeMultiplier,\n        variant: \"labelMedium\",\n        style: [styles.label, Object.assign({\n          color: activeLabelColor\n        }, font)]\n      }, getLabelText({\n        route\n      }))), shifting ? null : React.createElement(Animated.View, {\n        style: [styles.labelWrapper, {\n          opacity: isLegacyOrV3Shifting ? inactiveOpacity : v3InactiveOpacity\n        }]\n      }, renderLabel ? renderLabel({\n        route,\n        focused: false,\n        color: inactiveLabelColor\n      }) : React.createElement(Text, {\n        maxFontSizeMultiplier: labelMaxFontSizeMultiplier,\n        variant: \"labelMedium\",\n        selectable: false,\n        style: [styles.label, Object.assign({\n          color: inactiveLabelColor\n        }, font)]\n      }, getLabelText({\n        route\n      })))) : !isV3 && React.createElement(View, {\n        style: styles.labelContainer\n      }))\n    });\n  }))));\n};\nBottomNavigationBar.displayName = 'BottomNavigation.Bar';\nexport default BottomNavigationBar;\nconst styles = StyleSheet.create({\n  bar: {\n    left: 0,\n    right: 0,\n    bottom: 0\n  },\n  barContent: {\n    alignItems: 'center',\n    overflow: 'hidden'\n  },\n  items: Object.assign({\n    flexDirection: 'row'\n  }, Platform.OS === 'web' ? {\n    width: '100%'\n  } : null),\n  item: {\n    flex: 1,\n    paddingVertical: 6\n  },\n  v3Item: {\n    paddingVertical: 0\n  },\n  ripple: {\n    position: 'absolute'\n  },\n  iconContainer: {\n    height: 24,\n    width: 24,\n    marginTop: 2,\n    marginHorizontal: 12,\n    alignSelf: 'center'\n  },\n  v3IconContainer: {\n    height: 32,\n    width: 32,\n    marginBottom: 4,\n    marginTop: 0,\n    justifyContent: 'center'\n  },\n  iconWrapper: Object.assign({}, StyleSheet.absoluteFillObject, {\n    alignItems: 'center'\n  }),\n  v3IconWrapper: {\n    top: 4\n  },\n  labelContainer: {\n    height: 16,\n    paddingBottom: 2\n  },\n  labelWrapper: Object.assign({}, StyleSheet.absoluteFillObject),\n  label: Object.assign({\n    fontSize: 12,\n    height: BAR_HEIGHT,\n    textAlign: 'center',\n    backgroundColor: 'transparent'\n  }, Platform.OS === 'web' ? {\n    whiteSpace: 'nowrap',\n    alignSelf: 'center'\n  } : null),\n  badgeContainer: {\n    position: 'absolute',\n    left: 0\n  },\n  v3TouchableContainer: {\n    paddingTop: 12,\n    paddingBottom: 16\n  },\n  v3NoLabelContainer: {\n    height: 80,\n    justifyContent: 'center',\n    alignItems: 'center'\n  },\n  outline: {\n    width: OUTLINE_WIDTH,\n    height: OUTLINE_WIDTH / 2,\n    borderRadius: OUTLINE_WIDTH / 4,\n    alignSelf: 'center'\n  },\n  elevation: {\n    elevation: 4\n  }\n});","map":{"version":3,"names":["React","Animated","Platform","StyleSheet","Pressable","View","color","useSafeAreaInsets","getActiveTintColor","getInactiveTintColor","getLabelColor","useInternalTheme","overlay","black","white","useAnimatedValue","useAnimatedValueArray","useIsKeyboardShown","useLayout","Badge","Icon","Surface","TouchableRipple","Text","MIN_RIPPLE_SCALE","MIN_TAB_WIDTH","MAX_TAB_WIDTH","BAR_HEIGHT","OUTLINE_WIDTH","Touchable","_ref","style","children","borderless","centered","rippleColor","rest","_objectWithoutPropertiesLoose","_excluded","supported","createElement","_extends","disabled","undefined","BottomNavigationBar","navigationState","renderIcon","renderLabel","renderTouchable","_ref2","key","props","_excluded2","getLabelText","route","title","getBadge","badge","getColor","getAccessibilityLabel","accessibilityLabel","getTestID","testID","activeColor","inactiveColor","keyboardHidesNavigationBar","OS","activeIndicatorStyle","labeled","animationEasing","onTabPress","onTabLongPress","shifting","shiftingProp","safeAreaInsets","labelMaxFontSizeMultiplier","compact","compactProp","theme","themeOverrides","bottom","left","right","scale","animation","isV3","routes","length","console","warn","visibleAnim","tabsAnims","map","_","i","index","indexAnim","rippleAnim","layout","onLayout","keyboardVisible","setKeyboardVisible","useState","handleKeyboardShow","useCallback","timing","toValue","duration","useNativeDriver","start","handleKeyboardHide","animateToIndex","setValue","parallel","easing","tab","useEffect","onShow","onHide","eventForIndex","event","defaultPrevented","preventDefault","colors","dark","isDarkTheme","mode","backgroundColor","customBackground","elevation","flatten","approxBackgroundColor","surface","primary","v2BackgroundColorInterpolation","interpolate","inputRange","outputRange","level2","isDark","isLight","textColor","activeTintColor","defaultColor","inactiveTintColor","touchColor","alpha","rgb","string","maxTabWidth","maxTabBarWidth","rippleSize","width","insets","styles","bar","transform","translateY","height","position","pointerEvents","measured","container","barContent","items","marginBottom","marginHorizontal","Math","max","maxWidth","accessibilityRole","ripple","top","min","borderRadius","opacity","focused","active","activeOpacity","inactiveOpacity","v3ActiveOpacity","v3InactiveOpacity","outlineScale","activeLabelColor","tintColor","hasColor","Boolean","inactiveLabelColor","badgeStyle","String","isLegacyOrV3Shifting","font","fonts","labelMedium","onPress","onLongPress","accessibilityState","selected","item","v3Item","v3TouchableContainer","v3NoLabelContainer","iconContainer","v3IconContainer","outline","scaleX","secondaryContainer","iconWrapper","v3IconWrapper","source","focusedIcon","size","unfocusedIcon","badgeContainer","visible","labelContainer","labelWrapper","maxFontSizeMultiplier","variant","label","Object","assign","selectable","displayName","create","alignItems","overflow","flexDirection","flex","paddingVertical","marginTop","alignSelf","justifyContent","absoluteFillObject","paddingBottom","fontSize","textAlign","whiteSpace","paddingTop"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/react-native-paper/src/components/BottomNavigation/BottomNavigationBar.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n  Animated,\n  ColorValue,\n  EasingFunction,\n  Platform,\n  StyleProp,\n  StyleSheet,\n  Pressable,\n  View,\n  ViewStyle,\n} from 'react-native';\n\nimport color from 'color';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n  getActiveTintColor,\n  getInactiveTintColor,\n  getLabelColor,\n} from './utils';\nimport { useInternalTheme } from '../../core/theming';\nimport overlay from '../../styles/overlay';\nimport { black, white } from '../../styles/themes/v2/colors';\nimport type { ThemeProp } from '../../types';\nimport useAnimatedValue from '../../utils/useAnimatedValue';\nimport useAnimatedValueArray from '../../utils/useAnimatedValueArray';\nimport useIsKeyboardShown from '../../utils/useIsKeyboardShown';\nimport useLayout from '../../utils/useLayout';\nimport Badge from '../Badge';\nimport Icon, { IconSource } from '../Icon';\nimport Surface from '../Surface';\nimport TouchableRipple from '../TouchableRipple/TouchableRipple';\nimport { Props as TouchableRippleProps } from '../TouchableRipple/TouchableRipple';\nimport Text from '../Typography/Text';\n\ntype BaseRoute = {\n  key: string;\n  title?: string;\n  focusedIcon?: IconSource;\n  unfocusedIcon?: IconSource;\n  badge?: string | number | boolean;\n  /**\n   * @deprecated In v5.x works only with theme version 2.\n   */\n  color?: string;\n  accessibilityLabel?: string;\n  testID?: string;\n  lazy?: boolean;\n};\n\ntype NavigationState<Route extends BaseRoute> = {\n  index: number;\n  routes: Route[];\n};\n\ntype TabPressEvent = {\n  defaultPrevented: boolean;\n  preventDefault(): void;\n};\n\ntype TouchableProps<Route extends BaseRoute> = TouchableRippleProps & {\n  key: string;\n  route: Route;\n  children: React.ReactNode;\n  borderless?: boolean;\n  centered?: boolean;\n  rippleColor?: ColorValue;\n};\n\nexport type Props<Route extends BaseRoute> = {\n  /**\n   * Whether the shifting style is used, the active tab icon shifts up to show the label and the inactive tabs won't have a label.\n   *\n   * By default, this is `false` with theme version 3 and `true` when you have more than 3 tabs.\n   * Pass `shifting={false}` to explicitly disable this animation, or `shifting={true}` to always use this animation.\n   * Note that you need at least 2 tabs be able to run this animation.\n   */\n  shifting?: boolean;\n  /**\n   * Whether to show labels in tabs. When `false`, only icons will be displayed.\n   */\n  labeled?: boolean;\n  /**\n   * Whether tabs should be spread across the entire width.\n   */\n  compact?: boolean;\n  /**\n   * State for the bottom navigation. The state should contain the following properties:\n   *\n   * - `index`: a number representing the index of the active route in the `routes` array\n   * - `routes`: an array containing a list of route objects used for rendering the tabs\n   *\n   * Each route object should contain the following properties:\n   *\n   * - `key`: a unique key to identify the route (required)\n   * - `title`: title of the route to use as the tab label\n   * - `focusedIcon`:  icon to use as the focused tab icon, can be a string, an image source or a react component @renamed Renamed from 'icon' to 'focusedIcon' in v5.x\n   * - `unfocusedIcon`:  icon to use as the unfocused tab icon, can be a string, an image source or a react component @supported Available in v5.x with theme version 3\n   * - `color`: color to use as background color for shifting bottom navigation @deprecatedProperty In v5.x works only with theme version 2.\n   * - `badge`: badge to show on the tab icon, can be `true` to show a dot, `string` or `number` to show text.\n   * - `accessibilityLabel`: accessibility label for the tab button\n   * - `testID`: test id for the tab button\n   *\n   * Example:\n   *\n   * ```js\n   * {\n   *   index: 1,\n   *   routes: [\n   *     { key: 'music', title: 'Favorites', focusedIcon: 'heart', unfocusedIcon: 'heart-outline'},\n   *     { key: 'albums', title: 'Albums', focusedIcon: 'album' },\n   *     { key: 'recents', title: 'Recents', focusedIcon: 'history' },\n   *     { key: 'notifications', title: 'Notifications', focusedIcon: 'bell', unfocusedIcon: 'bell-outline' },\n   *   ]\n   * }\n   * ```\n   *\n   * `BottomNavigation.Bar` is a controlled component, which means the `index` needs to be updated via the `onTabPress` callback.\n   */\n  navigationState: NavigationState<Route>;\n  /**\n   * Callback which returns a React Element to be used as tab icon.\n   */\n  renderIcon?: (props: {\n    route: Route;\n    focused: boolean;\n    color: string;\n  }) => React.ReactNode;\n  /**\n   * Callback which React Element to be used as tab label.\n   */\n  renderLabel?: (props: {\n    route: Route;\n    focused: boolean;\n    color: string;\n  }) => React.ReactNode;\n  /**\n   * Callback which returns a React element to be used as the touchable for the tab item.\n   * Renders a `TouchableRipple` on Android and `Pressable` on iOS.\n   */\n  renderTouchable?: (props: TouchableProps<Route>) => React.ReactNode;\n  /**\n   * Get accessibility label for the tab button. This is read by the screen reader when the user taps the tab.\n   * Uses `route.accessibilityLabel` by default.\n   */\n  getAccessibilityLabel?: (props: { route: Route }) => string | undefined;\n  /**\n   * Get badge for the tab, uses `route.badge` by default.\n   */\n  getBadge?: (props: { route: Route }) => boolean | number | string | undefined;\n  /**\n   * Get color for the tab, uses `route.color` by default.\n   */\n  getColor?: (props: { route: Route }) => string | undefined;\n  /**\n   * Get label text for the tab, uses `route.title` by default. Use `renderLabel` to replace label component.\n   */\n  getLabelText?: (props: { route: Route }) => string | undefined;\n  /**\n   * Get the id to locate this tab button in tests, uses `route.testID` by default.\n   */\n  getTestID?: (props: { route: Route }) => string | undefined;\n  /**\n   * Function to execute on tab press. It receives the route for the pressed tab. Use this to update the navigation state.\n   */\n  onTabPress: (props: { route: Route } & TabPressEvent) => void;\n  /**\n   * Function to execute on tab long press. It receives the route for the pressed tab\n   */\n  onTabLongPress?: (props: { route: Route } & TabPressEvent) => void;\n  /**\n   * Custom color for icon and label in the active tab.\n   */\n  activeColor?: string;\n  /**\n   * Custom color for icon and label in the inactive tab.\n   */\n  inactiveColor?: string;\n  /**\n   * The scene animation Easing.\n   */\n  animationEasing?: EasingFunction | undefined;\n  /**\n   * Whether the bottom navigation bar is hidden when keyboard is shown.\n   * On Android, this works best when [`windowSoftInputMode`](https://developer.android.com/guide/topics/manifest/activity-element#wsoft) is set to `adjustResize`.\n   */\n  keyboardHidesNavigationBar?: boolean;\n  /**\n   * Safe area insets for the tab bar. This can be used to avoid elements like the navigation bar on Android and bottom safe area on iOS.\n   * The bottom insets for iOS is added by default. You can override the behavior with this option.\n   */\n  safeAreaInsets?: {\n    top?: number;\n    right?: number;\n    bottom?: number;\n    left?: number;\n  };\n  /**\n   * Specifies the largest possible scale a label font can reach.\n   */\n  labelMaxFontSizeMultiplier?: number;\n  style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n  activeIndicatorStyle?: StyleProp<ViewStyle>;\n  /**\n   * @optional\n   */\n  theme?: ThemeProp;\n  /**\n   * TestID used for testing purposes\n   */\n  testID?: string;\n};\n\nconst MIN_RIPPLE_SCALE = 0.001; // Minimum scale is not 0 due to bug with animation\nconst MIN_TAB_WIDTH = 96;\nconst MAX_TAB_WIDTH = 168;\nconst BAR_HEIGHT = 56;\nconst OUTLINE_WIDTH = 64;\n\nconst Touchable = <Route extends BaseRoute>({\n  route: _0,\n  style,\n  children,\n  borderless,\n  centered,\n  rippleColor,\n  ...rest\n}: TouchableProps<Route>) =>\n  TouchableRipple.supported ? (\n    <TouchableRipple\n      {...rest}\n      disabled={rest.disabled || undefined}\n      borderless={borderless}\n      centered={centered}\n      rippleColor={rippleColor}\n      style={style}\n    >\n      {children}\n    </TouchableRipple>\n  ) : (\n    <Pressable style={style} {...rest}>\n      {children}\n    </Pressable>\n  );\n\n/**\n * A navigation bar which can easily be integrated with [React Navigation's Bottom Tabs Navigator](https://reactnavigation.org/docs/bottom-tab-navigator/).\n *\n * ## Usage\n * ### without React Navigation\n * ```js\n * import React from 'react';\n * import { useState } from 'react';\n * import { View } from 'react-native';\n * import { BottomNavigation, Text, Provider } from 'react-native-paper';\n * import MaterialCommunityIcons from '@expo/vector-icons/MaterialCommunityIcons';\n *\n * function HomeScreen() {\n *   return (\n *     <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n *       <Text>Home!</Text>\n *     </View>\n *   );\n * }\n *\n * function SettingsScreen() {\n *   return (\n *     <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>\n *       <Text>Settings!</Text>\n *   </View>\n *   );\n * }\n *\n * export default function MyComponent() {\n *   const [index, setIndex] = useState(0);\n *\n *   const routes = [\n *     { key: 'home', title: 'Home', icon: 'home' },\n *     { key: 'settings', title: 'Settings', icon: 'cog' },\n *   ];\n\n *   const renderScene = ({ route }) => {\n *     switch (route.key) {\n *       case 'home':\n *         return <HomeScreen />;\n *       case 'settings':\n *         return <SettingsScreen />;\n *       default:\n *         return null;\n *     }\n *   };\n *\n *   return (\n *     <Provider>\n *       {renderScene({ route: routes[index] })}\n *       <BottomNavigation.Bar\n *         navigationState={{ index, routes }}\n *         onTabPress={({ route }) => {\n *           const newIndex = routes.findIndex((r) => r.key === route.key);\n *           if (newIndex !== -1) {\n *             setIndex(newIndex);\n *           }\n *         }}\n *         renderIcon={({ route, color }) => (\n *           <Icon name={route.icon} size={24} color={color} />\n *         )}\n *         getLabelText={({ route }) => route.title}\n *       />\n *     </Provider>\n *   );\n * }\n * ```\n */\nconst BottomNavigationBar = <Route extends BaseRoute>({\n  navigationState,\n  renderIcon,\n  renderLabel,\n  renderTouchable = ({ key, ...props }: TouchableProps<Route>) => (\n    <Touchable key={key} {...props} />\n  ),\n  getLabelText = ({ route }: { route: Route }) => route.title,\n  getBadge = ({ route }: { route: Route }) => route.badge,\n  getColor = ({ route }: { route: Route }) => route.color,\n  getAccessibilityLabel = ({ route }: { route: Route }) =>\n    route.accessibilityLabel,\n  getTestID = ({ route }: { route: Route }) => route.testID,\n  activeColor,\n  inactiveColor,\n  keyboardHidesNavigationBar = Platform.OS === 'android',\n  style,\n  activeIndicatorStyle,\n  labeled = true,\n  animationEasing,\n  onTabPress,\n  onTabLongPress,\n  shifting: shiftingProp,\n  safeAreaInsets,\n  labelMaxFontSizeMultiplier = 1,\n  compact: compactProp,\n  testID = 'bottom-navigation-bar',\n  theme: themeOverrides,\n}: Props<Route>) => {\n  const theme = useInternalTheme(themeOverrides);\n  const { bottom, left, right } = useSafeAreaInsets();\n  const { scale } = theme.animation;\n  const compact = compactProp ?? !theme.isV3;\n  let shifting =\n    shiftingProp ?? (theme.isV3 ? false : navigationState.routes.length > 3);\n\n  if (shifting && navigationState.routes.length < 2) {\n    shifting = false;\n    console.warn(\n      'BottomNavigation.Bar needs at least 2 tabs to run shifting animation'\n    );\n  }\n\n  /**\n   * Visibility of the navigation bar, visible state is 1 and invisible is 0.\n   */\n  const visibleAnim = useAnimatedValue(1);\n\n  /**\n   * Active state of individual tab items, active state is 1 and inactive state is 0.\n   */\n  const tabsAnims = useAnimatedValueArray(\n    navigationState.routes.map(\n      // focused === 1, unfocused === 0\n      (_, i) => (i === navigationState.index ? 1 : 0)\n    )\n  );\n\n  /**\n   * Index of the currently active tab. Used for setting the background color.\n   * We don't use the color as an animated value directly, because `setValue` seems to be buggy with colors?.\n   */\n  const indexAnim = useAnimatedValue(navigationState.index);\n\n  /**\n   * Animation for the background color ripple, used to determine it's scale and opacity.\n   */\n  const rippleAnim = useAnimatedValue(MIN_RIPPLE_SCALE);\n\n  /**\n   * Layout of the navigation bar. The width is used to determine the size and position of the ripple.\n   */\n  const [layout, onLayout] = useLayout();\n\n  /**\n   * Track whether the keyboard is visible to show and hide the navigation bar.\n   */\n  const [keyboardVisible, setKeyboardVisible] = React.useState(false);\n\n  const handleKeyboardShow = React.useCallback(() => {\n    setKeyboardVisible(true);\n    Animated.timing(visibleAnim, {\n      toValue: 0,\n      duration: 150 * scale,\n      useNativeDriver: true,\n    }).start();\n  }, [scale, visibleAnim]);\n\n  const handleKeyboardHide = React.useCallback(() => {\n    Animated.timing(visibleAnim, {\n      toValue: 1,\n      duration: 100 * scale,\n      useNativeDriver: true,\n    }).start(() => {\n      setKeyboardVisible(false);\n    });\n  }, [scale, visibleAnim]);\n\n  const animateToIndex = React.useCallback(\n    (index: number) => {\n      // Reset the ripple to avoid glitch if it's currently animating\n      rippleAnim.setValue(MIN_RIPPLE_SCALE);\n\n      Animated.parallel([\n        Animated.timing(rippleAnim, {\n          toValue: 1,\n          duration: theme.isV3 || shifting ? 400 * scale : 0,\n          useNativeDriver: true,\n        }),\n        ...navigationState.routes.map((_, i) =>\n          Animated.timing(tabsAnims[i], {\n            toValue: i === index ? 1 : 0,\n            duration: theme.isV3 || shifting ? 150 * scale : 0,\n            useNativeDriver: true,\n            easing: animationEasing,\n          })\n        ),\n      ]).start(() => {\n        // Workaround a bug in native animations where this is reset after first animation\n        tabsAnims.map((tab, i) => tab.setValue(i === index ? 1 : 0));\n\n        // Update the index to change bar's background color and then hide the ripple\n        indexAnim.setValue(index);\n        rippleAnim.setValue(MIN_RIPPLE_SCALE);\n      });\n    },\n    [\n      rippleAnim,\n      theme.isV3,\n      shifting,\n      scale,\n      navigationState.routes,\n      tabsAnims,\n      animationEasing,\n      indexAnim,\n    ]\n  );\n\n  React.useEffect(() => {\n    // Workaround for native animated bug in react-native@^0.57\n    // Context: https://github.com/callstack/react-native-paper/pull/637\n    animateToIndex(navigationState.index);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useIsKeyboardShown({\n    onShow: handleKeyboardShow,\n    onHide: handleKeyboardHide,\n  });\n\n  React.useEffect(() => {\n    animateToIndex(navigationState.index);\n  }, [navigationState.index, animateToIndex]);\n\n  const eventForIndex = (index: number) => {\n    const event = {\n      route: navigationState.routes[index],\n      defaultPrevented: false,\n      preventDefault: () => {\n        event.defaultPrevented = true;\n      },\n    };\n\n    return event;\n  };\n\n  const { routes } = navigationState;\n  const { colors, dark: isDarkTheme, mode, isV3 } = theme;\n\n  const { backgroundColor: customBackground, elevation = 4 } =\n    (StyleSheet.flatten(style) || {}) as {\n      elevation?: number;\n      backgroundColor?: ColorValue;\n    };\n\n  const approxBackgroundColor = customBackground\n    ? customBackground\n    : isDarkTheme && mode === 'adaptive'\n    ? overlay(elevation, colors?.surface)\n    : colors?.primary;\n\n  const v2BackgroundColorInterpolation = shifting\n    ? indexAnim.interpolate({\n        inputRange: routes.map((_, i) => i),\n        // FIXME: does outputRange support ColorValue or just strings?\n        // @ts-expect-error\n        outputRange: routes.map(\n          (route) => getColor({ route }) || approxBackgroundColor\n        ),\n      })\n    : approxBackgroundColor;\n\n  const backgroundColor = isV3\n    ? customBackground || theme.colors.elevation.level2\n    : shifting\n    ? v2BackgroundColorInterpolation\n    : approxBackgroundColor;\n\n  const isDark =\n    typeof approxBackgroundColor === 'string'\n      ? !color(approxBackgroundColor).isLight()\n      : true;\n\n  const textColor = isDark ? white : black;\n\n  const activeTintColor = getActiveTintColor({\n    activeColor,\n    defaultColor: textColor,\n    theme,\n  });\n\n  const inactiveTintColor = getInactiveTintColor({\n    inactiveColor,\n    defaultColor: textColor,\n    theme,\n  });\n  const touchColor = color(activeTintColor).alpha(0.12).rgb().string();\n\n  const maxTabWidth = routes.length > 3 ? MIN_TAB_WIDTH : MAX_TAB_WIDTH;\n  const maxTabBarWidth = maxTabWidth * routes.length;\n\n  const rippleSize = layout.width / 4;\n\n  const insets = {\n    left: safeAreaInsets?.left ?? left,\n    right: safeAreaInsets?.right ?? right,\n    bottom: safeAreaInsets?.bottom ?? bottom,\n  };\n\n  return (\n    <Surface\n      {...(theme.isV3 && { elevation: 0 })}\n      testID={testID}\n      style={[\n        !theme.isV3 && styles.elevation,\n        styles.bar,\n        keyboardHidesNavigationBar // eslint-disable-next-line react-native/no-inline-styles\n          ? {\n              // When the keyboard is shown, slide down the navigation bar\n              transform: [\n                {\n                  translateY: visibleAnim.interpolate({\n                    inputRange: [0, 1],\n                    outputRange: [layout.height, 0],\n                  }),\n                },\n              ],\n              // Absolutely position the navigation bar so that the content is below it\n              // This is needed to avoid gap at bottom when the navigation bar is hidden\n              position: keyboardVisible ? 'absolute' : undefined,\n            }\n          : null,\n        style,\n      ]}\n      pointerEvents={\n        layout.measured\n          ? keyboardHidesNavigationBar && keyboardVisible\n            ? 'none'\n            : 'auto'\n          : 'none'\n      }\n      onLayout={onLayout}\n      container\n    >\n      <Animated.View\n        style={[styles.barContent, { backgroundColor }]}\n        testID={`${testID}-content`}\n      >\n        <View\n          style={[\n            styles.items,\n            {\n              marginBottom: insets.bottom,\n              marginHorizontal: Math.max(insets.left, insets.right),\n            },\n            compact && {\n              maxWidth: maxTabBarWidth,\n            },\n          ]}\n          accessibilityRole={'tablist'}\n          testID={`${testID}-content-wrapper`}\n        >\n          {shifting && !isV3 ? (\n            <Animated.View\n              pointerEvents=\"none\"\n              style={[\n                styles.ripple,\n                {\n                  // Since we have a single ripple, we have to reposition it so that it appears to expand from active tab.\n                  // We need to move it from the top to center of the navigation bar and from the left to the active tab.\n                  top: (BAR_HEIGHT - rippleSize) / 2,\n                  left:\n                    (Math.min(layout.width, maxTabBarWidth) / routes.length) *\n                      (navigationState.index + 0.5) -\n                    rippleSize / 2,\n                  height: rippleSize,\n                  width: rippleSize,\n                  borderRadius: rippleSize / 2,\n                  backgroundColor: getColor({\n                    route: routes[navigationState.index],\n                  }),\n                  transform: [\n                    {\n                      // Scale to twice the size  to ensure it covers the whole navigation bar\n                      scale: rippleAnim.interpolate({\n                        inputRange: [0, 1],\n                        outputRange: [0, 8],\n                      }),\n                    },\n                  ],\n                  opacity: rippleAnim.interpolate({\n                    inputRange: [0, MIN_RIPPLE_SCALE, 0.3, 1],\n                    outputRange: [0, 0, 1, 1],\n                  }),\n                },\n              ]}\n              testID={`${testID}-content-ripple`}\n            />\n          ) : null}\n          {routes.map((route, index) => {\n            const focused = navigationState.index === index;\n            const active = tabsAnims[index];\n\n            // Scale the label up\n            const scale =\n              labeled && shifting\n                ? active.interpolate({\n                    inputRange: [0, 1],\n                    outputRange: [0.5, 1],\n                  })\n                : 1;\n\n            // Move down the icon to account for no-label in shifting and smaller label in non-shifting.\n            const translateY = labeled\n              ? shifting\n                ? active.interpolate({\n                    inputRange: [0, 1],\n                    outputRange: [7, 0],\n                  })\n                : 0\n              : 7;\n\n            // We render the active icon and label on top of inactive ones and cross-fade them on change.\n            // This trick gives the illusion that we are animating between active and inactive colors.\n            // This is to ensure that we can use native driver, as colors cannot be animated with native driver.\n            const activeOpacity = active;\n            const inactiveOpacity = active.interpolate({\n              inputRange: [0, 1],\n              outputRange: [1, 0],\n            });\n\n            const v3ActiveOpacity = focused ? 1 : 0;\n            const v3InactiveOpacity = shifting\n              ? inactiveOpacity\n              : focused\n              ? 0\n              : 1;\n\n            // Scale horizontally the outline pill\n            const outlineScale = focused\n              ? active.interpolate({\n                  inputRange: [0, 1],\n                  outputRange: [0.5, 1],\n                })\n              : 0;\n\n            const badge = getBadge({ route });\n\n            const activeLabelColor = getLabelColor({\n              tintColor: activeTintColor,\n              hasColor: Boolean(activeColor),\n              focused,\n              defaultColor: textColor,\n              theme,\n            });\n\n            const inactiveLabelColor = getLabelColor({\n              tintColor: inactiveTintColor,\n              hasColor: Boolean(inactiveColor),\n              focused,\n              defaultColor: textColor,\n              theme,\n            });\n\n            const badgeStyle = {\n              top: !isV3 ? -2 : typeof badge === 'boolean' ? 4 : 2,\n              right:\n                (badge != null && typeof badge !== 'boolean'\n                  ? String(badge).length * -2\n                  : 0) - (!isV3 ? 2 : 0),\n            };\n\n            const isLegacyOrV3Shifting = !isV3 || (isV3 && shifting && labeled);\n\n            const font = isV3 ? theme.fonts.labelMedium : {};\n\n            return renderTouchable({\n              key: route.key,\n              route,\n              borderless: true,\n              centered: true,\n              rippleColor: isV3 ? 'transparent' : touchColor,\n              onPress: () => onTabPress(eventForIndex(index)),\n              onLongPress: () => onTabLongPress?.(eventForIndex(index)),\n              testID: getTestID({ route }),\n              accessibilityLabel: getAccessibilityLabel({ route }),\n              accessibilityRole: Platform.OS === 'ios' ? 'button' : 'tab',\n              accessibilityState: { selected: focused },\n              style: [styles.item, isV3 && styles.v3Item],\n              children: (\n                <View\n                  pointerEvents=\"none\"\n                  style={\n                    isV3 &&\n                    (labeled\n                      ? styles.v3TouchableContainer\n                      : styles.v3NoLabelContainer)\n                  }\n                >\n                  <Animated.View\n                    style={[\n                      styles.iconContainer,\n                      isV3 && styles.v3IconContainer,\n                      isLegacyOrV3Shifting && {\n                        transform: [{ translateY }],\n                      },\n                    ]}\n                  >\n                    {isV3 && focused && (\n                      <Animated.View\n                        style={[\n                          styles.outline,\n                          {\n                            transform: [\n                              {\n                                scaleX: outlineScale,\n                              },\n                            ],\n                            backgroundColor: theme.colors.secondaryContainer,\n                          },\n                          activeIndicatorStyle,\n                        ]}\n                      />\n                    )}\n                    <Animated.View\n                      style={[\n                        styles.iconWrapper,\n                        isV3 && styles.v3IconWrapper,\n                        {\n                          opacity: isLegacyOrV3Shifting\n                            ? activeOpacity\n                            : v3ActiveOpacity,\n                        },\n                      ]}\n                    >\n                      {renderIcon ? (\n                        renderIcon({\n                          route,\n                          focused: true,\n                          color: activeTintColor,\n                        })\n                      ) : (\n                        <Icon\n                          source={route.focusedIcon as IconSource}\n                          color={activeTintColor}\n                          size={24}\n                        />\n                      )}\n                    </Animated.View>\n                    <Animated.View\n                      style={[\n                        styles.iconWrapper,\n                        isV3 && styles.v3IconWrapper,\n                        {\n                          opacity: isLegacyOrV3Shifting\n                            ? inactiveOpacity\n                            : v3InactiveOpacity,\n                        },\n                      ]}\n                    >\n                      {renderIcon ? (\n                        renderIcon({\n                          route,\n                          focused: false,\n                          color: inactiveTintColor,\n                        })\n                      ) : (\n                        <Icon\n                          source={\n                            theme.isV3 && route.unfocusedIcon !== undefined\n                              ? route.unfocusedIcon\n                              : (route.focusedIcon as IconSource)\n                          }\n                          color={inactiveTintColor}\n                          size={24}\n                        />\n                      )}\n                    </Animated.View>\n                    <View style={[styles.badgeContainer, badgeStyle]}>\n                      {typeof badge === 'boolean' ? (\n                        <Badge visible={badge} size={isV3 ? 6 : 8} />\n                      ) : (\n                        <Badge visible={badge != null} size={16}>\n                          {badge}\n                        </Badge>\n                      )}\n                    </View>\n                  </Animated.View>\n                  {labeled ? (\n                    <Animated.View\n                      style={[\n                        styles.labelContainer,\n                        !isV3 && { transform: [{ scale }] },\n                      ]}\n                    >\n                      <Animated.View\n                        style={[\n                          styles.labelWrapper,\n                          {\n                            opacity: isLegacyOrV3Shifting\n                              ? activeOpacity\n                              : v3ActiveOpacity,\n                          },\n                        ]}\n                      >\n                        {renderLabel ? (\n                          renderLabel({\n                            route,\n                            focused: true,\n                            color: activeLabelColor,\n                          })\n                        ) : (\n                          <Text\n                            maxFontSizeMultiplier={labelMaxFontSizeMultiplier}\n                            variant=\"labelMedium\"\n                            style={[\n                              styles.label,\n                              {\n                                color: activeLabelColor,\n                                ...font,\n                              },\n                            ]}\n                          >\n                            {getLabelText({ route })}\n                          </Text>\n                        )}\n                      </Animated.View>\n                      {shifting ? null : (\n                        <Animated.View\n                          style={[\n                            styles.labelWrapper,\n                            {\n                              opacity: isLegacyOrV3Shifting\n                                ? inactiveOpacity\n                                : v3InactiveOpacity,\n                            },\n                          ]}\n                        >\n                          {renderLabel ? (\n                            renderLabel({\n                              route,\n                              focused: false,\n                              color: inactiveLabelColor,\n                            })\n                          ) : (\n                            <Text\n                              maxFontSizeMultiplier={labelMaxFontSizeMultiplier}\n                              variant=\"labelMedium\"\n                              selectable={false}\n                              style={[\n                                styles.label,\n                                {\n                                  color: inactiveLabelColor,\n                                  ...font,\n                                },\n                              ]}\n                            >\n                              {getLabelText({ route })}\n                            </Text>\n                          )}\n                        </Animated.View>\n                      )}\n                    </Animated.View>\n                  ) : (\n                    !isV3 && <View style={styles.labelContainer} />\n                  )}\n                </View>\n              ),\n            });\n          })}\n        </View>\n      </Animated.View>\n    </Surface>\n  );\n};\n\nBottomNavigationBar.displayName = 'BottomNavigation.Bar';\n\nexport default BottomNavigationBar;\n\nconst styles = StyleSheet.create({\n  bar: {\n    left: 0,\n    right: 0,\n    bottom: 0,\n  },\n  barContent: {\n    alignItems: 'center',\n    overflow: 'hidden',\n  },\n  items: {\n    flexDirection: 'row',\n    ...(Platform.OS === 'web'\n      ? {\n          width: '100%',\n        }\n      : null),\n  },\n  item: {\n    flex: 1,\n    // Top padding is 6 and bottom padding is 10\n    // The extra 4dp bottom padding is offset by label's height\n    paddingVertical: 6,\n  },\n  v3Item: {\n    paddingVertical: 0,\n  },\n  ripple: {\n    position: 'absolute',\n  },\n  iconContainer: {\n    height: 24,\n    width: 24,\n    marginTop: 2,\n    marginHorizontal: 12,\n    alignSelf: 'center',\n  },\n  v3IconContainer: {\n    height: 32,\n    width: 32,\n    marginBottom: 4,\n    marginTop: 0,\n    justifyContent: 'center',\n  },\n  iconWrapper: {\n    ...StyleSheet.absoluteFillObject,\n    alignItems: 'center',\n  },\n  v3IconWrapper: {\n    top: 4,\n  },\n  labelContainer: {\n    height: 16,\n    paddingBottom: 2,\n  },\n  labelWrapper: {\n    ...StyleSheet.absoluteFillObject,\n  },\n  // eslint-disable-next-line react-native/no-color-literals\n  label: {\n    fontSize: 12,\n    height: BAR_HEIGHT,\n    textAlign: 'center',\n    backgroundColor: 'transparent',\n    ...(Platform.OS === 'web'\n      ? {\n          whiteSpace: 'nowrap',\n          alignSelf: 'center',\n        }\n      : null),\n  },\n  badgeContainer: {\n    position: 'absolute',\n    left: 0,\n  },\n  v3TouchableContainer: {\n    paddingTop: 12,\n    paddingBottom: 16,\n  },\n  v3NoLabelContainer: {\n    height: 80,\n    justifyContent: 'center',\n    alignItems: 'center',\n  },\n  outline: {\n    width: OUTLINE_WIDTH,\n    height: OUTLINE_WIDTH / 2,\n    borderRadius: OUTLINE_WIDTH / 4,\n    alignSelf: 'center',\n  },\n  elevation: {\n    elevation: 4,\n  },\n});\n"],"mappings":"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","ignoreList":[]},"metadata":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}