@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
package/lib/commonjs/index.js
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
Object.defineProperty(exports, "
|
|
6
|
+
Object.defineProperty(exports, "BottomTabBar", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function () {
|
|
9
|
-
return
|
|
9
|
+
return _BottomTabBar.default;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
Object.defineProperty(exports, "
|
|
12
|
+
Object.defineProperty(exports, "BottomTabBarHeightContext", {
|
|
13
13
|
enumerable: true,
|
|
14
14
|
get: function () {
|
|
15
|
-
return
|
|
15
|
+
return _BottomTabBarHeightContext.default;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
18
|
Object.defineProperty(exports, "BottomTabView", {
|
|
@@ -21,10 +21,10 @@ Object.defineProperty(exports, "BottomTabView", {
|
|
|
21
21
|
return _BottomTabView.default;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
-
Object.defineProperty(exports, "
|
|
24
|
+
Object.defineProperty(exports, "createBottomTabNavigator", {
|
|
25
25
|
enumerable: true,
|
|
26
26
|
get: function () {
|
|
27
|
-
return
|
|
27
|
+
return _createBottomTabNavigator.default;
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
30
|
Object.defineProperty(exports, "useBottomTabBarHeight", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;AAKA;;AACA;;AAKA;;AACA","sourcesContent":["/**\n * Navigators\n */\nexport { default as createBottomTabNavigator } from './navigators/createBottomTabNavigator';\n\n/**\n * Views\n */\nexport { default as BottomTabBar } from './views/BottomTabBar';\nexport { default as BottomTabView } from './views/BottomTabView';\n\n/**\n * Utilities\n */\nexport { default as BottomTabBarHeightContext } from './utils/BottomTabBarHeightContext';\nexport { default as useBottomTabBarHeight } from './utils/useBottomTabBarHeight';\n\n/**\n * Types\n */\nexport type {\n BottomTabBarButtonProps,\n BottomTabBarProps,\n BottomTabHeaderProps,\n BottomTabNavigationOptions,\n BottomTabNavigationProp,\n BottomTabScreenProps,\n} from './types';\n"]}
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;AAKA;;AACA;;AAKA;;AACA","sourcesContent":["/**\n * Navigators\n */\nexport { default as createBottomTabNavigator } from './navigators/createBottomTabNavigator';\n\n/**\n * Views\n */\nexport { default as BottomTabBar } from './views/BottomTabBar';\nexport { default as BottomTabView } from './views/BottomTabView';\n\n/**\n * Utilities\n */\nexport { default as BottomTabBarHeightContext } from './utils/BottomTabBarHeightContext';\nexport { default as useBottomTabBarHeight } from './utils/useBottomTabBarHeight';\n\n/**\n * Types\n */\nexport type {\n BottomTabBarButtonProps,\n BottomTabBarProps,\n BottomTabHeaderProps,\n BottomTabNavigationEventMap,\n BottomTabNavigationOptions,\n BottomTabNavigationProp,\n BottomTabScreenProps,\n} from './types';\n"]}
|
|
@@ -21,15 +21,17 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
21
21
|
|
|
22
22
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
23
23
|
|
|
24
|
-
function BottomTabNavigator({
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
function BottomTabNavigator(_ref) {
|
|
25
|
+
let {
|
|
26
|
+
id,
|
|
27
|
+
initialRouteName,
|
|
28
|
+
backBehavior,
|
|
29
|
+
children,
|
|
30
|
+
screenListeners,
|
|
31
|
+
screenOptions,
|
|
32
|
+
sceneContainerStyle,
|
|
33
|
+
...restWithDeprecated
|
|
34
|
+
} = _ref;
|
|
33
35
|
const {
|
|
34
36
|
// @ts-expect-error: lazy is deprecated
|
|
35
37
|
lazy,
|
|
@@ -78,6 +80,7 @@ function BottomTabNavigator({
|
|
|
78
80
|
navigation,
|
|
79
81
|
NavigationContent
|
|
80
82
|
} = (0, _native.useNavigationBuilder)(_native.TabRouter, {
|
|
83
|
+
id,
|
|
81
84
|
initialRouteName,
|
|
82
85
|
backBehavior,
|
|
83
86
|
children,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["createBottomTabNavigator.tsx"],"names":["BottomTabNavigator","initialRouteName","backBehavior","children","screenListeners","screenOptions","sceneContainerStyle","restWithDeprecated","lazy","tabBarOptions","rest","defaultScreenOptions","Object","assign","tabBarHideOnKeyboard","keyboardHidesTabBar","tabBarActiveTintColor","activeTintColor","tabBarInactiveTintColor","inactiveTintColor","tabBarActiveBackgroundColor","activeBackgroundColor","tabBarInactiveBackgroundColor","inactiveBackgroundColor","tabBarAllowFontScaling","allowFontScaling","tabBarShowLabel","showLabel","tabBarLabelStyle","labelStyle","tabBarIconStyle","iconStyle","tabBarItemStyle","tabStyle","tabBarLabelPosition","labelPosition","adaptive","undefined","tabBarStyle","display","tabBarVisible","keys","forEach","key","JSON","stringify","state","descriptors","navigation","NavigationContent","TabRouter"],"mappings":";;;;;;;AAAA;;AAUA;;AACA;;AAOA;;;;;;;;;;AAWA,SAASA,kBAAT,
|
|
1
|
+
{"version":3,"sources":["createBottomTabNavigator.tsx"],"names":["BottomTabNavigator","id","initialRouteName","backBehavior","children","screenListeners","screenOptions","sceneContainerStyle","restWithDeprecated","lazy","tabBarOptions","rest","defaultScreenOptions","Object","assign","tabBarHideOnKeyboard","keyboardHidesTabBar","tabBarActiveTintColor","activeTintColor","tabBarInactiveTintColor","inactiveTintColor","tabBarActiveBackgroundColor","activeBackgroundColor","tabBarInactiveBackgroundColor","inactiveBackgroundColor","tabBarAllowFontScaling","allowFontScaling","tabBarShowLabel","showLabel","tabBarLabelStyle","labelStyle","tabBarIconStyle","iconStyle","tabBarItemStyle","tabStyle","tabBarLabelPosition","labelPosition","adaptive","undefined","tabBarStyle","display","tabBarVisible","keys","forEach","key","JSON","stringify","state","descriptors","navigation","NavigationContent","TabRouter"],"mappings":";;;;;;;AAAA;;AAUA;;AACA;;AAOA;;;;;;;;;;AAWA,SAASA,kBAAT,OASU;AAAA,MATkB;AAC1BC,IAAAA,EAD0B;AAE1BC,IAAAA,gBAF0B;AAG1BC,IAAAA,YAH0B;AAI1BC,IAAAA,QAJ0B;AAK1BC,IAAAA,eAL0B;AAM1BC,IAAAA,aAN0B;AAO1BC,IAAAA,mBAP0B;AAQ1B,OAAGC;AARuB,GASlB;AACR,QAAM;AACJ;AACAC,IAAAA,IAFI;AAGJ;AACAC,IAAAA,aAJI;AAKJ,OAAGC;AALC,MAMFH,kBANJ;AAQA,MAAII,oBAAgD,GAAG,EAAvD;;AAEA,MAAIF,aAAJ,EAAmB;AAAA;;AACjBG,IAAAA,MAAM,CAACC,MAAP,CAAcF,oBAAd,EAAoC;AAClCG,MAAAA,oBAAoB,EAAEL,aAAa,CAACM,mBADF;AAElCC,MAAAA,qBAAqB,EAAEP,aAAa,CAACQ,eAFH;AAGlCC,MAAAA,uBAAuB,EAAET,aAAa,CAACU,iBAHL;AAIlCC,MAAAA,2BAA2B,EAAEX,aAAa,CAACY,qBAJT;AAKlCC,MAAAA,6BAA6B,EAAEb,aAAa,CAACc,uBALX;AAMlCC,MAAAA,sBAAsB,EAAEf,aAAa,CAACgB,gBANJ;AAOlCC,MAAAA,eAAe,EAAEjB,aAAa,CAACkB,SAPG;AAQlCC,MAAAA,gBAAgB,EAAEnB,aAAa,CAACoB,UARE;AASlCC,MAAAA,eAAe,EAAErB,aAAa,CAACsB,SATG;AAUlCC,MAAAA,eAAe,EAAEvB,aAAa,CAACwB,QAVG;AAWlCC,MAAAA,mBAAmB,2BACjBzB,aAAa,CAAC0B,aADG,yEAEhB1B,aAAa,CAAC2B,QAAd,KAA2B,KAA3B,GAAmC,YAAnC,GAAkDC,SAbnB;AAclCC,MAAAA,WAAW,EAAE,CACX;AAAEC,QAAAA,OAAO,EAAE9B,aAAa,CAAC+B,aAAd,GAA8B,MAA9B,GAAuC;AAAlD,OADW,EAEX7B,oBAAoB,CAAC2B,WAFV;AAdqB,KAApC;AAqBE1B,IAAAA,MAAM,CAAC6B,IAAP,CAAY9B,oBAAZ,CADF,CAEE+B,OAFF,CAEWC,GAAD,IAAS;AACjB,UAAIhC,oBAAoB,CAACgC,GAAD,CAApB,KAA8BN,SAAlC,EAA6C;AAC3C;AACA,eAAO1B,oBAAoB,CAACgC,GAAD,CAA3B;AACD;AACF,KAPD;AASA,2BACElC,aADF,EAEG,4LAA2LmC,IAAI,CAACC,SAAL,CAC1LlC,oBAD0L,EAE1L,IAF0L,EAG1L,CAH0L,CAI1L,yFANJ;AAQD;;AAED,MAAI,OAAOH,IAAP,KAAgB,SAApB,EAA+B;AAC7BG,IAAAA,oBAAoB,CAACH,IAArB,GAA4BA,IAA5B;AAEA,2BACE,IADF,EAEG,+KAFH;AAID;;AAED,QAAM;AAAEsC,IAAAA,KAAF;AAASC,IAAAA,WAAT;AAAsBC,IAAAA,UAAtB;AAAkCC,IAAAA;AAAlC,MACJ,kCAMEC,iBANF,EAMa;AACXlD,IAAAA,EADW;AAEXC,IAAAA,gBAFW;AAGXC,IAAAA,YAHW;AAIXC,IAAAA,QAJW;AAKXC,IAAAA,eALW;AAMXC,IAAAA,aANW;AAOXM,IAAAA;AAPW,GANb,CADF;AAiBA,sBACE,oBAAC,iBAAD,qBACE,oBAAC,sBAAD,eACMD,IADN;AAEE,IAAA,KAAK,EAAEoC,KAFT;AAGE,IAAA,UAAU,EAAEE,UAHd;AAIE,IAAA,WAAW,EAAED,WAJf;AAKE,IAAA,mBAAmB,EAAEzC;AALvB,KADF,CADF;AAWD;;eAEc,oCAKbP,kBALa,C","sourcesContent":["import {\n createNavigatorFactory,\n DefaultNavigatorOptions,\n ParamListBase,\n TabActionHelpers,\n TabNavigationState,\n TabRouter,\n TabRouterOptions,\n useNavigationBuilder,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport warnOnce from 'warn-once';\n\nimport type {\n BottomTabNavigationConfig,\n BottomTabNavigationEventMap,\n BottomTabNavigationOptions,\n} from '../types';\nimport BottomTabView from '../views/BottomTabView';\n\ntype Props = DefaultNavigatorOptions<\n ParamListBase,\n TabNavigationState<ParamListBase>,\n BottomTabNavigationOptions,\n BottomTabNavigationEventMap\n> &\n TabRouterOptions &\n BottomTabNavigationConfig;\n\nfunction BottomTabNavigator({\n id,\n initialRouteName,\n backBehavior,\n children,\n screenListeners,\n screenOptions,\n sceneContainerStyle,\n ...restWithDeprecated\n}: Props) {\n const {\n // @ts-expect-error: lazy is deprecated\n lazy,\n // @ts-expect-error: tabBarOptions is deprecated\n tabBarOptions,\n ...rest\n } = restWithDeprecated;\n\n let defaultScreenOptions: BottomTabNavigationOptions = {};\n\n if (tabBarOptions) {\n Object.assign(defaultScreenOptions, {\n tabBarHideOnKeyboard: tabBarOptions.keyboardHidesTabBar,\n tabBarActiveTintColor: tabBarOptions.activeTintColor,\n tabBarInactiveTintColor: tabBarOptions.inactiveTintColor,\n tabBarActiveBackgroundColor: tabBarOptions.activeBackgroundColor,\n tabBarInactiveBackgroundColor: tabBarOptions.inactiveBackgroundColor,\n tabBarAllowFontScaling: tabBarOptions.allowFontScaling,\n tabBarShowLabel: tabBarOptions.showLabel,\n tabBarLabelStyle: tabBarOptions.labelStyle,\n tabBarIconStyle: tabBarOptions.iconStyle,\n tabBarItemStyle: tabBarOptions.tabStyle,\n tabBarLabelPosition:\n tabBarOptions.labelPosition ??\n (tabBarOptions.adaptive === false ? 'below-icon' : undefined),\n tabBarStyle: [\n { display: tabBarOptions.tabBarVisible ? 'none' : 'flex' },\n defaultScreenOptions.tabBarStyle,\n ],\n });\n\n (\n Object.keys(defaultScreenOptions) as (keyof BottomTabNavigationOptions)[]\n ).forEach((key) => {\n if (defaultScreenOptions[key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete defaultScreenOptions[key];\n }\n });\n\n warnOnce(\n tabBarOptions,\n `Bottom Tab Navigator: 'tabBarOptions' is deprecated. Migrate the options to 'screenOptions' instead.\\n\\nPlace the following in 'screenOptions' in your code to keep current behavior:\\n\\n${JSON.stringify(\n defaultScreenOptions,\n null,\n 2\n )}\\n\\nSee https://reactnavigation.org/docs/bottom-tab-navigator#options for more details.`\n );\n }\n\n if (typeof lazy === 'boolean') {\n defaultScreenOptions.lazy = lazy;\n\n warnOnce(\n true,\n `Bottom Tab Navigator: 'lazy' in props is deprecated. Move it to 'screenOptions' instead.\\n\\nSee https://reactnavigation.org/docs/bottom-tab-navigator/#lazy for more details.`\n );\n }\n\n const { state, descriptors, navigation, NavigationContent } =\n useNavigationBuilder<\n TabNavigationState<ParamListBase>,\n TabRouterOptions,\n TabActionHelpers<ParamListBase>,\n BottomTabNavigationOptions,\n BottomTabNavigationEventMap\n >(TabRouter, {\n id,\n initialRouteName,\n backBehavior,\n children,\n screenListeners,\n screenOptions,\n defaultScreenOptions,\n });\n\n return (\n <NavigationContent>\n <BottomTabView\n {...rest}\n state={state}\n navigation={navigation}\n descriptors={descriptors}\n sceneContainerStyle={sceneContainerStyle}\n />\n </NavigationContent>\n );\n}\n\nexport default createNavigatorFactory<\n TabNavigationState<ParamListBase>,\n BottomTabNavigationOptions,\n BottomTabNavigationEventMap,\n typeof BottomTabNavigator\n>(BottomTabNavigator);\n"]}
|
|
@@ -21,15 +21,16 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
21
21
|
|
|
22
22
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
23
23
|
|
|
24
|
-
function Badge({
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
function Badge(_ref) {
|
|
25
|
+
let {
|
|
26
|
+
children,
|
|
27
|
+
style,
|
|
28
|
+
visible = true,
|
|
29
|
+
size = 18,
|
|
30
|
+
...rest
|
|
31
|
+
} = _ref;
|
|
31
32
|
const [opacity] = React.useState(() => new _reactNative.Animated.Value(visible ? 1 : 0));
|
|
32
|
-
const [rendered, setRendered] = React.useState(visible
|
|
33
|
+
const [rendered, setRendered] = React.useState(visible);
|
|
33
34
|
const theme = (0, _native.useTheme)();
|
|
34
35
|
React.useEffect(() => {
|
|
35
36
|
if (!rendered) {
|
|
@@ -40,9 +41,11 @@ function Badge({
|
|
|
40
41
|
toValue: visible ? 1 : 0,
|
|
41
42
|
duration: 150,
|
|
42
43
|
useNativeDriver: true
|
|
43
|
-
}).start(
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
}).start(_ref2 => {
|
|
45
|
+
let {
|
|
46
|
+
finished
|
|
47
|
+
} = _ref2;
|
|
48
|
+
|
|
46
49
|
if (finished && !visible) {
|
|
47
50
|
setRendered(false);
|
|
48
51
|
}
|
|
@@ -51,12 +54,12 @@ function Badge({
|
|
|
51
54
|
return () => opacity.stopAnimation();
|
|
52
55
|
}, [opacity, rendered, visible]);
|
|
53
56
|
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
if (!rendered) {
|
|
58
|
+
if (visible) {
|
|
59
|
+
setRendered(true);
|
|
60
|
+
} else {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
60
63
|
} // @ts-expect-error: backgroundColor definitely exists
|
|
61
64
|
|
|
62
65
|
|
|
@@ -70,19 +73,19 @@ function Badge({
|
|
|
70
73
|
return /*#__PURE__*/React.createElement(_reactNative.Animated.Text, _extends({
|
|
71
74
|
numberOfLines: 1,
|
|
72
75
|
style: [{
|
|
73
|
-
opacity,
|
|
74
76
|
transform: [{
|
|
75
77
|
scale: opacity.interpolate({
|
|
76
78
|
inputRange: [0, 1],
|
|
77
79
|
outputRange: [0.5, 1]
|
|
78
80
|
})
|
|
79
81
|
}],
|
|
80
|
-
backgroundColor,
|
|
81
82
|
color: textColor,
|
|
82
|
-
fontSize,
|
|
83
83
|
lineHeight: size - 1,
|
|
84
84
|
height: size,
|
|
85
85
|
minWidth: size,
|
|
86
|
+
opacity,
|
|
87
|
+
backgroundColor,
|
|
88
|
+
fontSize,
|
|
86
89
|
borderRadius
|
|
87
90
|
}, styles.container, restStyle]
|
|
88
91
|
}, rest), children);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Badge.tsx"],"names":["Badge","
|
|
1
|
+
{"version":3,"sources":["Badge.tsx"],"names":["Badge","children","style","visible","size","rest","opacity","React","useState","Animated","Value","rendered","setRendered","theme","useEffect","timing","toValue","duration","useNativeDriver","start","finished","stopAnimation","backgroundColor","colors","notification","restStyle","StyleSheet","flatten","textColor","isLight","borderRadius","fontSize","Math","floor","transform","scale","interpolate","inputRange","outputRange","color","lineHeight","height","minWidth","styles","container","create","alignSelf","textAlign","paddingHorizontal","overflow"],"mappings":"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","sourcesContent":["import { useTheme } from '@react-navigation/native';\nimport color from 'color';\nimport * as React from 'react';\nimport { Animated, StyleProp, StyleSheet, TextStyle } from 'react-native';\n\ntype Props = {\n /**\n * Whether the badge is visible\n */\n visible: boolean;\n /**\n * Content of the `Badge`.\n */\n children?: string | number;\n /**\n * Size of the `Badge`.\n */\n size?: number;\n /**\n * Style object for the tab bar container.\n */\n style?: Animated.WithAnimatedValue<StyleProp<TextStyle>>;\n};\n\nexport default function Badge({\n children,\n style,\n visible = true,\n size = 18,\n ...rest\n}: Props) {\n const [opacity] = React.useState(() => new Animated.Value(visible ? 1 : 0));\n const [rendered, setRendered] = React.useState(visible);\n\n const theme = useTheme();\n\n React.useEffect(() => {\n if (!rendered) {\n return;\n }\n\n Animated.timing(opacity, {\n toValue: visible ? 1 : 0,\n duration: 150,\n useNativeDriver: true,\n }).start(({ finished }) => {\n if (finished && !visible) {\n setRendered(false);\n }\n });\n\n return () => opacity.stopAnimation();\n }, [opacity, rendered, visible]);\n\n if (!rendered) {\n if (visible) {\n setRendered(true);\n } else {\n return null;\n }\n }\n\n // @ts-expect-error: backgroundColor definitely exists\n const { backgroundColor = theme.colors.notification, ...restStyle } =\n StyleSheet.flatten(style) || {};\n const textColor = color(backgroundColor).isLight() ? 'black' : 'white';\n\n const borderRadius = size / 2;\n const fontSize = Math.floor((size * 3) / 4);\n\n return (\n <Animated.Text\n numberOfLines={1}\n style={[\n {\n transform: [\n {\n scale: opacity.interpolate({\n inputRange: [0, 1],\n outputRange: [0.5, 1],\n }),\n },\n ],\n color: textColor,\n lineHeight: size - 1,\n height: size,\n minWidth: size,\n opacity,\n backgroundColor,\n fontSize,\n borderRadius,\n },\n styles.container,\n restStyle,\n ]}\n {...rest}\n >\n {children}\n </Animated.Text>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n alignSelf: 'flex-end',\n textAlign: 'center',\n paddingHorizontal: 4,\n overflow: 'hidden',\n },\n});\n"]}
|
|
@@ -29,12 +29,13 @@ const COMPACT_TABBAR_HEIGHT = 32;
|
|
|
29
29
|
const DEFAULT_MAX_TAB_ITEM_WIDTH = 125;
|
|
30
30
|
const useNativeDriver = _reactNative.Platform.OS !== 'web';
|
|
31
31
|
|
|
32
|
-
const shouldUseHorizontalLabels =
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
const shouldUseHorizontalLabels = _ref => {
|
|
33
|
+
let {
|
|
34
|
+
state,
|
|
35
|
+
descriptors,
|
|
36
|
+
layout,
|
|
37
|
+
dimensions
|
|
38
|
+
} = _ref;
|
|
38
39
|
const {
|
|
39
40
|
tabBarLabelPosition
|
|
40
41
|
} = descriptors[state.routes[state.index].key].options;
|
|
@@ -79,16 +80,17 @@ const getPaddingBottom = insets => Math.max(insets.bottom - _reactNative.Platfor
|
|
|
79
80
|
default: 0
|
|
80
81
|
}), 0);
|
|
81
82
|
|
|
82
|
-
const getTabBarHeight =
|
|
83
|
-
state,
|
|
84
|
-
descriptors,
|
|
85
|
-
dimensions,
|
|
86
|
-
insets,
|
|
87
|
-
style,
|
|
88
|
-
...rest
|
|
89
|
-
}) => {
|
|
83
|
+
const getTabBarHeight = _ref2 => {
|
|
90
84
|
var _StyleSheet$flatten;
|
|
91
85
|
|
|
86
|
+
let {
|
|
87
|
+
state,
|
|
88
|
+
descriptors,
|
|
89
|
+
dimensions,
|
|
90
|
+
insets,
|
|
91
|
+
style,
|
|
92
|
+
...rest
|
|
93
|
+
} = _ref2;
|
|
92
94
|
// @ts-ignore
|
|
93
95
|
const customHeight = (_StyleSheet$flatten = _reactNative.StyleSheet.flatten(style)) === null || _StyleSheet$flatten === void 0 ? void 0 : _StyleSheet$flatten.height;
|
|
94
96
|
|
|
@@ -114,13 +116,14 @@ const getTabBarHeight = ({
|
|
|
114
116
|
|
|
115
117
|
exports.getTabBarHeight = getTabBarHeight;
|
|
116
118
|
|
|
117
|
-
function BottomTabBar({
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
119
|
+
function BottomTabBar(_ref3) {
|
|
120
|
+
let {
|
|
121
|
+
state,
|
|
122
|
+
navigation,
|
|
123
|
+
descriptors,
|
|
124
|
+
insets,
|
|
125
|
+
style
|
|
126
|
+
} = _ref3;
|
|
124
127
|
const {
|
|
125
128
|
colors
|
|
126
129
|
} = (0, _native.useTheme)();
|
|
@@ -168,9 +171,11 @@ function BottomTabBar({
|
|
|
168
171
|
useNativeDriver,
|
|
169
172
|
duration: 250,
|
|
170
173
|
...(visibilityAnimationConfig === null || visibilityAnimationConfig === void 0 ? void 0 : (_visibilityAnimationC2 = visibilityAnimationConfig.show) === null || _visibilityAnimationC2 === void 0 ? void 0 : _visibilityAnimationC2.config)
|
|
171
|
-
}).start(
|
|
172
|
-
|
|
173
|
-
|
|
174
|
+
}).start(_ref4 => {
|
|
175
|
+
let {
|
|
176
|
+
finished
|
|
177
|
+
} = _ref4;
|
|
178
|
+
|
|
174
179
|
if (finished) {
|
|
175
180
|
setIsTabBarHidden(false);
|
|
176
181
|
}
|
|
@@ -314,13 +319,16 @@ function BottomTabBar({
|
|
|
314
319
|
activeBackgroundColor: tabBarActiveBackgroundColor,
|
|
315
320
|
inactiveBackgroundColor: tabBarInactiveBackgroundColor,
|
|
316
321
|
button: options.tabBarButton,
|
|
317
|
-
icon: (_options$tabBarIcon = options.tabBarIcon) !== null && _options$tabBarIcon !== void 0 ? _options$tabBarIcon :
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
322
|
+
icon: (_options$tabBarIcon = options.tabBarIcon) !== null && _options$tabBarIcon !== void 0 ? _options$tabBarIcon : _ref5 => {
|
|
323
|
+
let {
|
|
324
|
+
color,
|
|
325
|
+
size
|
|
326
|
+
} = _ref5;
|
|
327
|
+
return /*#__PURE__*/_react.default.createElement(_elements.MissingIcon, {
|
|
328
|
+
color: color,
|
|
329
|
+
size: size
|
|
330
|
+
});
|
|
331
|
+
},
|
|
324
332
|
badge: options.tabBarBadge,
|
|
325
333
|
badgeStyle: options.tabBarBadgeStyle,
|
|
326
334
|
label: label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["BottomTabBar.tsx"],"names":["DEFAULT_TABBAR_HEIGHT","COMPACT_TABBAR_HEIGHT","DEFAULT_MAX_TAB_ITEM_WIDTH","useNativeDriver","Platform","OS","shouldUseHorizontalLabels","state","descriptors","layout","dimensions","tabBarLabelPosition","routes","index","key","options","width","maxTabWidth","reduce","acc","route","tabBarItemStyle","flattenedStyle","StyleSheet","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","React","useContext","BottomTabBarHeightCallbackContext","shouldShowTabBar","visibilityAnimationConfigRef","useRef","useEffect","current","isTabBarHidden","setIsTabBarHidden","useState","visible","Animated","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","CommonActions","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":["DEFAULT_TABBAR_HEIGHT","COMPACT_TABBAR_HEIGHT","DEFAULT_MAX_TAB_ITEM_WIDTH","useNativeDriver","Platform","OS","shouldUseHorizontalLabels","state","descriptors","layout","dimensions","tabBarLabelPosition","routes","index","key","options","width","maxTabWidth","reduce","acc","route","tabBarItemStyle","flattenedStyle","StyleSheet","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","React","useContext","BottomTabBarHeightCallbackContext","shouldShowTabBar","visibilityAnimationConfigRef","useRef","useEffect","current","isTabBarHidden","setIsTabBarHidden","useState","visible","Animated","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","CommonActions","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"]}
|
|
@@ -19,68 +19,74 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
19
19
|
|
|
20
20
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
21
21
|
|
|
22
|
-
function BottomTabBarItem({
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
button = ({
|
|
31
|
-
children,
|
|
32
|
-
style,
|
|
33
|
-
onPress,
|
|
22
|
+
function BottomTabBarItem(_ref) {
|
|
23
|
+
let {
|
|
24
|
+
focused,
|
|
25
|
+
route,
|
|
26
|
+
label,
|
|
27
|
+
icon,
|
|
28
|
+
badge,
|
|
29
|
+
badgeStyle,
|
|
34
30
|
to,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
31
|
+
button = _ref2 => {
|
|
32
|
+
let {
|
|
33
|
+
children,
|
|
34
|
+
style,
|
|
35
|
+
onPress,
|
|
36
|
+
to,
|
|
37
|
+
accessibilityRole,
|
|
38
|
+
...rest
|
|
39
|
+
} = _ref2;
|
|
40
|
+
|
|
41
|
+
if (_reactNative.Platform.OS === 'web' && to) {
|
|
42
|
+
// React Native Web doesn't forward `onClick` if we use `TouchableWithoutFeedback`.
|
|
43
|
+
// We need to use `onClick` to be able to prevent default browser handling of links.
|
|
44
|
+
return /*#__PURE__*/_react.default.createElement(_native.Link, _extends({}, rest, {
|
|
45
|
+
to: to,
|
|
46
|
+
style: [styles.button, style],
|
|
47
|
+
onPress: e => {
|
|
48
|
+
if (!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && ( // ignore clicks with modifier keys
|
|
49
|
+
e.button == null || e.button === 0) // ignore everything but left clicks
|
|
50
|
+
) {
|
|
51
|
+
e.preventDefault();
|
|
52
|
+
onPress === null || onPress === void 0 ? void 0 : onPress(e);
|
|
53
|
+
}
|
|
49
54
|
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}) {
|
|
55
|
+
}), children);
|
|
56
|
+
} else {
|
|
57
|
+
return /*#__PURE__*/_react.default.createElement(_reactNative.Pressable, _extends({}, rest, {
|
|
58
|
+
accessibilityRole: accessibilityRole,
|
|
59
|
+
onPress: onPress,
|
|
60
|
+
style: style
|
|
61
|
+
}), children);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
accessibilityLabel,
|
|
65
|
+
testID,
|
|
66
|
+
onPress,
|
|
67
|
+
onLongPress,
|
|
68
|
+
horizontal,
|
|
69
|
+
activeTintColor: customActiveTintColor,
|
|
70
|
+
inactiveTintColor: customInactiveTintColor,
|
|
71
|
+
activeBackgroundColor = 'transparent',
|
|
72
|
+
inactiveBackgroundColor = 'transparent',
|
|
73
|
+
showLabel = true,
|
|
74
|
+
allowFontScaling,
|
|
75
|
+
labelStyle,
|
|
76
|
+
iconStyle,
|
|
77
|
+
style
|
|
78
|
+
} = _ref;
|
|
75
79
|
const {
|
|
76
80
|
colors
|
|
77
81
|
} = (0, _native.useTheme)();
|
|
78
82
|
const activeTintColor = customActiveTintColor === undefined ? colors.primary : customActiveTintColor;
|
|
79
83
|
const inactiveTintColor = customInactiveTintColor === undefined ? (0, _color.default)(colors.text).mix((0, _color.default)(colors.card), 0.5).hex() : customInactiveTintColor;
|
|
80
84
|
|
|
81
|
-
const renderLabel =
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
const renderLabel = _ref3 => {
|
|
86
|
+
let {
|
|
87
|
+
focused
|
|
88
|
+
} = _ref3;
|
|
89
|
+
|
|
84
90
|
if (showLabel === false) {
|
|
85
91
|
return null;
|
|
86
92
|
}
|
|
@@ -104,9 +110,11 @@ function BottomTabBarItem({
|
|
|
104
110
|
});
|
|
105
111
|
};
|
|
106
112
|
|
|
107
|
-
const renderIcon =
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
const renderIcon = _ref4 => {
|
|
114
|
+
let {
|
|
115
|
+
focused
|
|
116
|
+
} = _ref4;
|
|
117
|
+
|
|
110
118
|
if (icon === undefined) {
|
|
111
119
|
return null;
|
|
112
120
|
}
|