@amazon-devices/react-navigation__react-native-tab-view 2.0.1758683737
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/LICENSE +7 -0
- package/README.md +649 -0
- package/SystemBundles/c5889b273a6efc2a3c30241851055c37630fbf3381df86d403967369775f0536.bundle +14497 -0
- package/SystemBundles/c5889b273a6efc2a3c30241851055c37630fbf3381df86d403967369775f0536.map +1 -0
- package/SystemModules/amzn__react-navigation__react-native-tab-view-2.modules.txt +41 -0
- package/SystemModules/amzn__react-navigation__react-native-tab-view-2.private.modules.txt +98 -0
- package/SystemModules/keplerscript-system-bundle-config.json +7 -0
- package/THIRD_PARTY_NOTICES.txt +24 -0
- package/kepler-compatibility.json +8 -0
- package/kepler-transformed-package-info.json +3 -0
- package/lib/commonjs/Pager.android.js +14 -0
- package/lib/commonjs/Pager.android.js.map +1 -0
- package/lib/commonjs/Pager.ios.js +14 -0
- package/lib/commonjs/Pager.ios.js.map +1 -0
- package/lib/commonjs/Pager.js +14 -0
- package/lib/commonjs/Pager.js.map +1 -0
- package/lib/commonjs/PagerViewAdapter.js +132 -0
- package/lib/commonjs/PagerViewAdapter.js.map +1 -0
- package/lib/commonjs/PanResponderAdapter.js +204 -0
- package/lib/commonjs/PanResponderAdapter.js.map +1 -0
- package/lib/commonjs/PlatformPressable.js +43 -0
- package/lib/commonjs/PlatformPressable.js.map +1 -0
- package/lib/commonjs/SceneMap.js +29 -0
- package/lib/commonjs/SceneMap.js.map +1 -0
- package/lib/commonjs/SceneView.js +78 -0
- package/lib/commonjs/SceneView.js.map +1 -0
- package/lib/commonjs/TabBar.js +405 -0
- package/lib/commonjs/TabBar.js.map +1 -0
- package/lib/commonjs/TabBarIndicator.js +110 -0
- package/lib/commonjs/TabBarIndicator.js.map +1 -0
- package/lib/commonjs/TabBarItem.js +227 -0
- package/lib/commonjs/TabBarItem.js.map +1 -0
- package/lib/commonjs/TabView.js +122 -0
- package/lib/commonjs/TabView.js.map +1 -0
- package/lib/commonjs/index.js +42 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/useAnimatedValue.js +18 -0
- package/lib/commonjs/useAnimatedValue.js.map +1 -0
- package/lib/module/Pager.android.js +2 -0
- package/lib/module/Pager.android.js.map +1 -0
- package/lib/module/Pager.ios.js +2 -0
- package/lib/module/Pager.ios.js.map +1 -0
- package/lib/module/Pager.js +2 -0
- package/lib/module/Pager.js.map +1 -0
- package/lib/module/PagerViewAdapter.js +123 -0
- package/lib/module/PagerViewAdapter.js.map +1 -0
- package/lib/module/PanResponderAdapter.js +195 -0
- package/lib/module/PanResponderAdapter.js.map +1 -0
- package/lib/module/PlatformPressable.js +35 -0
- package/lib/module/PlatformPressable.js.map +1 -0
- package/lib/module/SceneMap.js +21 -0
- package/lib/module/SceneMap.js.map +1 -0
- package/lib/module/SceneView.js +70 -0
- package/lib/module/SceneView.js.map +1 -0
- package/lib/module/TabBar.js +396 -0
- package/lib/module/TabBar.js.map +1 -0
- package/lib/module/TabBarIndicator.js +101 -0
- package/lib/module/TabBarIndicator.js.map +1 -0
- package/lib/module/TabBarItem.js +218 -0
- package/lib/module/TabBarItem.js.map +1 -0
- package/lib/module/TabView.js +113 -0
- package/lib/module/TabView.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useAnimatedValue.js +10 -0
- package/lib/module/useAnimatedValue.js.map +1 -0
- package/lib/typescript/src/Pager.android.d.ts +2 -0
- package/lib/typescript/src/Pager.android.d.ts.map +1 -0
- package/lib/typescript/src/Pager.d.ts +2 -0
- package/lib/typescript/src/Pager.d.ts.map +1 -0
- package/lib/typescript/src/Pager.ios.d.ts +2 -0
- package/lib/typescript/src/Pager.ios.d.ts.map +1 -0
- package/lib/typescript/src/PagerViewAdapter.d.ts +15 -0
- package/lib/typescript/src/PagerViewAdapter.d.ts.map +1 -0
- package/lib/typescript/src/PanResponderAdapter.d.ts +16 -0
- package/lib/typescript/src/PanResponderAdapter.d.ts.map +1 -0
- package/lib/typescript/src/PlatformPressable.d.ts +16 -0
- package/lib/typescript/src/PlatformPressable.d.ts.map +1 -0
- package/lib/typescript/src/SceneMap.d.ts +10 -0
- package/lib/typescript/src/SceneMap.d.ts.map +1 -0
- package/lib/typescript/src/SceneView.d.ts +16 -0
- package/lib/typescript/src/SceneView.d.ts.map +1 -0
- package/lib/typescript/src/TabBar.d.ts +44 -0
- package/lib/typescript/src/TabBar.d.ts.map +1 -0
- package/lib/typescript/src/TabBarIndicator.d.ts +13 -0
- package/lib/typescript/src/TabBarIndicator.d.ts.map +1 -0
- package/lib/typescript/src/TabBarItem.d.ts +37 -0
- package/lib/typescript/src/TabBarItem.d.ts.map +1 -0
- package/lib/typescript/src/TabView.d.ts +27 -0
- package/lib/typescript/src/TabView.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +11 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +42 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/useAnimatedValue.d.ts +3 -0
- package/lib/typescript/src/useAnimatedValue.d.ts.map +1 -0
- package/package.json +1 -0
- package/src/Pager.android.tsx +1 -0
- package/src/Pager.ios.tsx +1 -0
- package/src/Pager.tsx +1 -0
- package/src/PagerViewAdapter.tsx +180 -0
- package/src/PanResponderAdapter.tsx +340 -0
- package/src/PlatformPressable.tsx +42 -0
- package/src/SceneMap.tsx +30 -0
- package/src/SceneView.tsx +107 -0
- package/src/TabBar.tsx +639 -0
- package/src/TabBarIndicator.tsx +153 -0
- package/src/TabBarItem.tsx +319 -0
- package/src/TabView.tsx +155 -0
- package/src/index.tsx +10 -0
- package/src/types.tsx +59 -0
- package/src/useAnimatedValue.tsx +12 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Animated, I18nManager, Platform, StyleSheet, View } from 'react-native';
|
|
3
|
+
import useLatestCallback from 'use-latest-callback';
|
|
4
|
+
import TabBarIndicator from './TabBarIndicator';
|
|
5
|
+
import TabBarItem from './TabBarItem';
|
|
6
|
+
import useAnimatedValue from './useAnimatedValue';
|
|
7
|
+
const Separator = ({
|
|
8
|
+
width
|
|
9
|
+
}) => {
|
|
10
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
11
|
+
style: {
|
|
12
|
+
width
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
const getFlattenedTabWidth = style => {
|
|
17
|
+
const tabStyle = StyleSheet.flatten(style);
|
|
18
|
+
return tabStyle === null || tabStyle === void 0 ? void 0 : tabStyle.width;
|
|
19
|
+
};
|
|
20
|
+
const getComputedTabWidth = (index, layout, routes, scrollEnabled, tabWidths, flattenedWidth) => {
|
|
21
|
+
if (flattenedWidth === 'auto') {
|
|
22
|
+
return tabWidths[routes[index].key] || 0;
|
|
23
|
+
}
|
|
24
|
+
switch (typeof flattenedWidth) {
|
|
25
|
+
case 'number':
|
|
26
|
+
return flattenedWidth;
|
|
27
|
+
case 'string':
|
|
28
|
+
if (flattenedWidth.endsWith('%')) {
|
|
29
|
+
const width = parseFloat(flattenedWidth);
|
|
30
|
+
if (Number.isFinite(width)) {
|
|
31
|
+
return layout.width * (width / 100);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (scrollEnabled) {
|
|
36
|
+
return layout.width / 5 * 2;
|
|
37
|
+
}
|
|
38
|
+
return layout.width / routes.length;
|
|
39
|
+
};
|
|
40
|
+
const getMaxScrollDistance = (tabBarWidth, layoutWidth) => tabBarWidth - layoutWidth;
|
|
41
|
+
const getTranslateX = (scrollAmount, maxScrollDistance) => Animated.multiply(Platform.OS === 'android' && I18nManager.isRTL ? Animated.add(maxScrollDistance, Animated.multiply(scrollAmount, -1)) : scrollAmount, I18nManager.isRTL ? 1 : -1);
|
|
42
|
+
const getTabBarWidth = ({
|
|
43
|
+
navigationState,
|
|
44
|
+
layout,
|
|
45
|
+
gap,
|
|
46
|
+
scrollEnabled,
|
|
47
|
+
flattenedTabWidth,
|
|
48
|
+
tabWidths
|
|
49
|
+
}) => {
|
|
50
|
+
const {
|
|
51
|
+
routes
|
|
52
|
+
} = navigationState;
|
|
53
|
+
return routes.reduce((acc, _, i) => acc + (i > 0 ? gap ?? 0 : 0) + getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, flattenedTabWidth), 0);
|
|
54
|
+
};
|
|
55
|
+
const normalizeScrollValue = ({
|
|
56
|
+
layout,
|
|
57
|
+
navigationState,
|
|
58
|
+
gap,
|
|
59
|
+
scrollEnabled,
|
|
60
|
+
tabWidths,
|
|
61
|
+
value,
|
|
62
|
+
flattenedTabWidth
|
|
63
|
+
}) => {
|
|
64
|
+
const tabBarWidth = getTabBarWidth({
|
|
65
|
+
layout,
|
|
66
|
+
navigationState,
|
|
67
|
+
tabWidths,
|
|
68
|
+
gap,
|
|
69
|
+
scrollEnabled,
|
|
70
|
+
flattenedTabWidth
|
|
71
|
+
});
|
|
72
|
+
const maxDistance = getMaxScrollDistance(tabBarWidth, layout.width);
|
|
73
|
+
const scrollValue = Math.max(Math.min(value, maxDistance), 0);
|
|
74
|
+
if (Platform.OS === 'android' && I18nManager.isRTL) {
|
|
75
|
+
// On Android, scroll value is not applied in reverse in RTL
|
|
76
|
+
// so we need to manually adjust it to apply correct value
|
|
77
|
+
return maxDistance - scrollValue;
|
|
78
|
+
}
|
|
79
|
+
return scrollValue;
|
|
80
|
+
};
|
|
81
|
+
const getScrollAmount = ({
|
|
82
|
+
layout,
|
|
83
|
+
navigationState,
|
|
84
|
+
gap,
|
|
85
|
+
scrollEnabled,
|
|
86
|
+
flattenedTabWidth,
|
|
87
|
+
tabWidths
|
|
88
|
+
}) => {
|
|
89
|
+
const centerDistance = Array.from({
|
|
90
|
+
length: navigationState.index + 1
|
|
91
|
+
}).reduce((total, _, i) => {
|
|
92
|
+
const tabWidth = getComputedTabWidth(i, layout, navigationState.routes, scrollEnabled, tabWidths, flattenedTabWidth);
|
|
93
|
+
|
|
94
|
+
// To get the current index centered we adjust scroll amount by width of indexes
|
|
95
|
+
// 0 through (i - 1) and add half the width of current index i
|
|
96
|
+
return total + (navigationState.index === i ? (tabWidth + (gap ?? 0)) / 2 : tabWidth + (gap ?? 0));
|
|
97
|
+
}, 0);
|
|
98
|
+
const scrollAmount = centerDistance - layout.width / 2;
|
|
99
|
+
return normalizeScrollValue({
|
|
100
|
+
layout,
|
|
101
|
+
navigationState,
|
|
102
|
+
tabWidths,
|
|
103
|
+
value: scrollAmount,
|
|
104
|
+
gap,
|
|
105
|
+
scrollEnabled,
|
|
106
|
+
flattenedTabWidth
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
const getLabelTextDefault = ({
|
|
110
|
+
route
|
|
111
|
+
}) => route.title;
|
|
112
|
+
const getAccessibleDefault = ({
|
|
113
|
+
route
|
|
114
|
+
}) => typeof route.accessible !== 'undefined' ? route.accessible : true;
|
|
115
|
+
const getAccessibilityLabelDefault = ({
|
|
116
|
+
route
|
|
117
|
+
}) => typeof route.accessibilityLabel === 'string' ? route.accessibilityLabel : typeof route.title === 'string' ? route.title : undefined;
|
|
118
|
+
const renderIndicatorDefault = props => /*#__PURE__*/React.createElement(TabBarIndicator, props);
|
|
119
|
+
const getTestIdDefault = ({
|
|
120
|
+
route
|
|
121
|
+
}) => route.testID;
|
|
122
|
+
|
|
123
|
+
// How many items measurements should we update per batch.
|
|
124
|
+
// Defaults to 10, since that's whats FlatList is using in initialNumToRender.
|
|
125
|
+
const MEASURE_PER_BATCH = 10;
|
|
126
|
+
export default function TabBar({
|
|
127
|
+
getLabelText = getLabelTextDefault,
|
|
128
|
+
getAccessible = getAccessibleDefault,
|
|
129
|
+
getAccessibilityLabel = getAccessibilityLabelDefault,
|
|
130
|
+
getTestID = getTestIdDefault,
|
|
131
|
+
renderIndicator = renderIndicatorDefault,
|
|
132
|
+
gap = 0,
|
|
133
|
+
scrollEnabled,
|
|
134
|
+
jumpTo,
|
|
135
|
+
navigationState,
|
|
136
|
+
position,
|
|
137
|
+
activeColor,
|
|
138
|
+
bounces,
|
|
139
|
+
contentContainerStyle,
|
|
140
|
+
inactiveColor,
|
|
141
|
+
indicatorContainerStyle,
|
|
142
|
+
indicatorStyle,
|
|
143
|
+
labelStyle,
|
|
144
|
+
onTabLongPress,
|
|
145
|
+
onTabPress,
|
|
146
|
+
pressColor,
|
|
147
|
+
pressOpacity,
|
|
148
|
+
renderBadge,
|
|
149
|
+
renderIcon,
|
|
150
|
+
renderLabel,
|
|
151
|
+
renderTabBarItem,
|
|
152
|
+
style,
|
|
153
|
+
tabStyle,
|
|
154
|
+
testID,
|
|
155
|
+
android_ripple
|
|
156
|
+
}) {
|
|
157
|
+
const [layout, setLayout] = React.useState({
|
|
158
|
+
width: 0,
|
|
159
|
+
height: 0
|
|
160
|
+
});
|
|
161
|
+
const [tabWidths, setTabWidths] = React.useState({});
|
|
162
|
+
const flatListRef = React.useRef(null);
|
|
163
|
+
const isFirst = React.useRef(true);
|
|
164
|
+
const scrollAmount = useAnimatedValue(0);
|
|
165
|
+
const measuredTabWidths = React.useRef({});
|
|
166
|
+
const {
|
|
167
|
+
routes
|
|
168
|
+
} = navigationState;
|
|
169
|
+
const flattenedTabWidth = getFlattenedTabWidth(tabStyle);
|
|
170
|
+
const isWidthDynamic = flattenedTabWidth === 'auto';
|
|
171
|
+
const scrollOffset = getScrollAmount({
|
|
172
|
+
layout,
|
|
173
|
+
navigationState,
|
|
174
|
+
tabWidths,
|
|
175
|
+
gap,
|
|
176
|
+
scrollEnabled,
|
|
177
|
+
flattenedTabWidth
|
|
178
|
+
});
|
|
179
|
+
const hasMeasuredTabWidths = Boolean(layout.width) && routes.slice(0, navigationState.index).every(r => typeof tabWidths[r.key] === 'number');
|
|
180
|
+
React.useEffect(() => {
|
|
181
|
+
if (isFirst.current) {
|
|
182
|
+
isFirst.current = false;
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (isWidthDynamic && !hasMeasuredTabWidths) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (scrollEnabled) {
|
|
189
|
+
var _flatListRef$current;
|
|
190
|
+
(_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToOffset({
|
|
191
|
+
offset: scrollOffset,
|
|
192
|
+
animated: true
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}, [hasMeasuredTabWidths, isWidthDynamic, scrollEnabled, scrollOffset]);
|
|
196
|
+
const handleLayout = e => {
|
|
197
|
+
const {
|
|
198
|
+
height,
|
|
199
|
+
width
|
|
200
|
+
} = e.nativeEvent.layout;
|
|
201
|
+
setLayout(layout => layout.width === width && layout.height === height ? layout : {
|
|
202
|
+
width,
|
|
203
|
+
height
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
const tabBarWidth = getTabBarWidth({
|
|
207
|
+
layout,
|
|
208
|
+
navigationState,
|
|
209
|
+
tabWidths,
|
|
210
|
+
gap,
|
|
211
|
+
scrollEnabled,
|
|
212
|
+
flattenedTabWidth
|
|
213
|
+
});
|
|
214
|
+
const separatorsWidth = Math.max(0, routes.length - 1) * gap;
|
|
215
|
+
const separatorPercent = separatorsWidth / tabBarWidth * 100;
|
|
216
|
+
const tabBarWidthPercent = `${routes.length * 40}%`;
|
|
217
|
+
const translateX = React.useMemo(() => getTranslateX(scrollAmount, getMaxScrollDistance(tabBarWidth, layout.width)), [layout.width, scrollAmount, tabBarWidth]);
|
|
218
|
+
const renderItem = React.useCallback(({
|
|
219
|
+
item: route,
|
|
220
|
+
index
|
|
221
|
+
}) => {
|
|
222
|
+
const props = {
|
|
223
|
+
key: route.key,
|
|
224
|
+
position: position,
|
|
225
|
+
route: route,
|
|
226
|
+
navigationState: navigationState,
|
|
227
|
+
getAccessibilityLabel: getAccessibilityLabel,
|
|
228
|
+
getAccessible: getAccessible,
|
|
229
|
+
getLabelText: getLabelText,
|
|
230
|
+
getTestID: getTestID,
|
|
231
|
+
renderBadge: renderBadge,
|
|
232
|
+
renderIcon: renderIcon,
|
|
233
|
+
renderLabel: renderLabel,
|
|
234
|
+
activeColor: activeColor,
|
|
235
|
+
inactiveColor: inactiveColor,
|
|
236
|
+
pressColor: pressColor,
|
|
237
|
+
pressOpacity: pressOpacity,
|
|
238
|
+
onLayout: isWidthDynamic ? e => {
|
|
239
|
+
measuredTabWidths.current[route.key] = e.nativeEvent.layout.width;
|
|
240
|
+
|
|
241
|
+
// When we have measured widths for all of the tabs, we should updates the state
|
|
242
|
+
// We avoid doing separate setState for each layout since it triggers multiple renders and slows down app
|
|
243
|
+
// If we have more than 10 routes divide updating tabWidths into multiple batches. Here we update only first batch of 10 items.
|
|
244
|
+
if (routes.length > MEASURE_PER_BATCH && index === MEASURE_PER_BATCH && routes.slice(0, MEASURE_PER_BATCH).every(r => typeof measuredTabWidths.current[r.key] === 'number')) {
|
|
245
|
+
setTabWidths({
|
|
246
|
+
...measuredTabWidths.current
|
|
247
|
+
});
|
|
248
|
+
} else if (routes.every(r => typeof measuredTabWidths.current[r.key] === 'number')) {
|
|
249
|
+
// When we have measured widths for all of the tabs, we should updates the state
|
|
250
|
+
// We avoid doing separate setState for each layout since it triggers multiple renders and slows down app
|
|
251
|
+
setTabWidths({
|
|
252
|
+
...measuredTabWidths.current
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
} : undefined,
|
|
256
|
+
onPress: () => {
|
|
257
|
+
const event = {
|
|
258
|
+
route,
|
|
259
|
+
defaultPrevented: false,
|
|
260
|
+
preventDefault: () => {
|
|
261
|
+
event.defaultPrevented = true;
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
onTabPress === null || onTabPress === void 0 || onTabPress(event);
|
|
265
|
+
if (event.defaultPrevented) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
jumpTo(route.key);
|
|
269
|
+
},
|
|
270
|
+
onLongPress: () => onTabLongPress === null || onTabLongPress === void 0 ? void 0 : onTabLongPress({
|
|
271
|
+
route
|
|
272
|
+
}),
|
|
273
|
+
labelStyle: labelStyle,
|
|
274
|
+
style: tabStyle,
|
|
275
|
+
// Calculate the deafult width for tab for FlatList to work
|
|
276
|
+
defaultTabWidth: !isWidthDynamic ? getComputedTabWidth(index, layout, routes, scrollEnabled, tabWidths, getFlattenedTabWidth(tabStyle)) : undefined,
|
|
277
|
+
android_ripple
|
|
278
|
+
};
|
|
279
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, gap > 0 && index > 0 ? /*#__PURE__*/React.createElement(Separator, {
|
|
280
|
+
width: gap
|
|
281
|
+
}) : null, renderTabBarItem ? renderTabBarItem(props) : /*#__PURE__*/React.createElement(TabBarItem, props));
|
|
282
|
+
}, [activeColor, android_ripple, gap, getAccessibilityLabel, getAccessible, getLabelText, getTestID, inactiveColor, isWidthDynamic, jumpTo, labelStyle, layout, navigationState, onTabLongPress, onTabPress, position, pressColor, pressOpacity, renderBadge, renderIcon, renderLabel, renderTabBarItem, routes, scrollEnabled, tabStyle, tabWidths]);
|
|
283
|
+
const keyExtractor = React.useCallback(item => item.key, []);
|
|
284
|
+
const contentContainerStyleMemoized = React.useMemo(() => [styles.tabContent, scrollEnabled ? {
|
|
285
|
+
width: tabBarWidth > separatorsWidth ? tabBarWidth : tabBarWidthPercent
|
|
286
|
+
} : styles.container, contentContainerStyle], [contentContainerStyle, scrollEnabled, separatorsWidth, tabBarWidth, tabBarWidthPercent]);
|
|
287
|
+
const handleScroll = React.useMemo(() => Animated.event([{
|
|
288
|
+
nativeEvent: {
|
|
289
|
+
contentOffset: {
|
|
290
|
+
x: scrollAmount
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}], {
|
|
294
|
+
useNativeDriver: true
|
|
295
|
+
}), [scrollAmount]);
|
|
296
|
+
const handleViewableItemsChanged = useLatestCallback(({
|
|
297
|
+
changed
|
|
298
|
+
}) => {
|
|
299
|
+
if (routes.length <= MEASURE_PER_BATCH) {
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
// Get next vievable item
|
|
303
|
+
const item = changed[changed.length - 1];
|
|
304
|
+
const index = (item === null || item === void 0 ? void 0 : item.index) || 0;
|
|
305
|
+
if (item.isViewable && (index % 10 === 0 || index === navigationState.index || index === routes.length - 1)) {
|
|
306
|
+
setTabWidths({
|
|
307
|
+
...measuredTabWidths.current
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
// FIXME: Not sure why i have to as-any here (x3) ..
|
|
313
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
314
|
+
onLayout: handleLayout,
|
|
315
|
+
style: [styles.tabBar, style]
|
|
316
|
+
}, /*#__PURE__*/React.createElement(Animated.View, {
|
|
317
|
+
pointerEvents: "none",
|
|
318
|
+
style: [styles.indicatorContainer, scrollEnabled ? {
|
|
319
|
+
transform: [{
|
|
320
|
+
translateX
|
|
321
|
+
}]
|
|
322
|
+
} : null, tabBarWidth > separatorsWidth ? {
|
|
323
|
+
width: tabBarWidth - separatorsWidth
|
|
324
|
+
} : scrollEnabled ? {
|
|
325
|
+
width: tabBarWidthPercent
|
|
326
|
+
} : null, indicatorContainerStyle]
|
|
327
|
+
}, renderIndicator({
|
|
328
|
+
position,
|
|
329
|
+
layout,
|
|
330
|
+
navigationState,
|
|
331
|
+
jumpTo,
|
|
332
|
+
width: isWidthDynamic ? 'auto' : `${(100 - separatorPercent) / routes.length}%`,
|
|
333
|
+
style: indicatorStyle,
|
|
334
|
+
getTabWidth: i => getComputedTabWidth(i, layout, routes, scrollEnabled, tabWidths, flattenedTabWidth),
|
|
335
|
+
gap
|
|
336
|
+
})), /*#__PURE__*/React.createElement(View, {
|
|
337
|
+
style: styles.scroll
|
|
338
|
+
}, /*#__PURE__*/React.createElement(Animated.FlatList, {
|
|
339
|
+
data: routes,
|
|
340
|
+
keyExtractor: keyExtractor,
|
|
341
|
+
horizontal: true,
|
|
342
|
+
accessibilityRole: "tablist",
|
|
343
|
+
keyboardShouldPersistTaps: "handled",
|
|
344
|
+
scrollEnabled: scrollEnabled,
|
|
345
|
+
bounces: bounces,
|
|
346
|
+
initialNumToRender: MEASURE_PER_BATCH,
|
|
347
|
+
onViewableItemsChanged: handleViewableItemsChanged,
|
|
348
|
+
alwaysBounceHorizontal: false,
|
|
349
|
+
scrollsToTop: false,
|
|
350
|
+
showsHorizontalScrollIndicator: false,
|
|
351
|
+
showsVerticalScrollIndicator: false,
|
|
352
|
+
automaticallyAdjustContentInsets: false,
|
|
353
|
+
overScrollMode: "never",
|
|
354
|
+
contentContainerStyle: contentContainerStyleMemoized,
|
|
355
|
+
scrollEventThrottle: 16,
|
|
356
|
+
renderItem: renderItem,
|
|
357
|
+
onScroll: handleScroll,
|
|
358
|
+
ref: flatListRef,
|
|
359
|
+
testID: testID
|
|
360
|
+
})));
|
|
361
|
+
}
|
|
362
|
+
const styles = StyleSheet.create({
|
|
363
|
+
container: {
|
|
364
|
+
flex: 1
|
|
365
|
+
},
|
|
366
|
+
scroll: {
|
|
367
|
+
overflow: Platform.select({
|
|
368
|
+
default: 'scroll',
|
|
369
|
+
web: undefined
|
|
370
|
+
})
|
|
371
|
+
},
|
|
372
|
+
tabBar: {
|
|
373
|
+
backgroundColor: '#2196f3',
|
|
374
|
+
elevation: 4,
|
|
375
|
+
shadowColor: 'black',
|
|
376
|
+
shadowOpacity: 0.1,
|
|
377
|
+
shadowRadius: StyleSheet.hairlineWidth,
|
|
378
|
+
shadowOffset: {
|
|
379
|
+
height: StyleSheet.hairlineWidth,
|
|
380
|
+
width: 0
|
|
381
|
+
},
|
|
382
|
+
zIndex: 1
|
|
383
|
+
},
|
|
384
|
+
tabContent: {
|
|
385
|
+
flexDirection: 'row',
|
|
386
|
+
flexWrap: 'nowrap'
|
|
387
|
+
},
|
|
388
|
+
indicatorContainer: {
|
|
389
|
+
position: 'absolute',
|
|
390
|
+
top: 0,
|
|
391
|
+
left: 0,
|
|
392
|
+
right: 0,
|
|
393
|
+
bottom: 0
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
//# sourceMappingURL=TabBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Animated","I18nManager","Platform","StyleSheet","View","useLatestCallback","TabBarIndicator","TabBarItem","useAnimatedValue","Separator","width","createElement","style","getFlattenedTabWidth","tabStyle","flatten","getComputedTabWidth","index","layout","routes","scrollEnabled","tabWidths","flattenedWidth","key","endsWith","parseFloat","Number","isFinite","length","getMaxScrollDistance","tabBarWidth","layoutWidth","getTranslateX","scrollAmount","maxScrollDistance","multiply","OS","isRTL","add","getTabBarWidth","navigationState","gap","flattenedTabWidth","reduce","acc","_","i","normalizeScrollValue","value","maxDistance","scrollValue","Math","max","min","getScrollAmount","centerDistance","Array","from","total","tabWidth","getLabelTextDefault","route","title","getAccessibleDefault","accessible","getAccessibilityLabelDefault","accessibilityLabel","undefined","renderIndicatorDefault","props","getTestIdDefault","testID","MEASURE_PER_BATCH","TabBar","getLabelText","getAccessible","getAccessibilityLabel","getTestID","renderIndicator","jumpTo","position","activeColor","bounces","contentContainerStyle","inactiveColor","indicatorContainerStyle","indicatorStyle","labelStyle","onTabLongPress","onTabPress","pressColor","pressOpacity","renderBadge","renderIcon","renderLabel","renderTabBarItem","android_ripple","setLayout","useState","height","setTabWidths","flatListRef","useRef","isFirst","measuredTabWidths","isWidthDynamic","scrollOffset","hasMeasuredTabWidths","Boolean","slice","every","r","useEffect","current","_flatListRef$current","scrollToOffset","offset","animated","handleLayout","e","nativeEvent","separatorsWidth","separatorPercent","tabBarWidthPercent","translateX","useMemo","renderItem","useCallback","item","onLayout","onPress","event","defaultPrevented","preventDefault","onLongPress","defaultTabWidth","Fragment","keyExtractor","contentContainerStyleMemoized","styles","tabContent","container","handleScroll","contentOffset","x","useNativeDriver","handleViewableItemsChanged","changed","isViewable","tabBar","pointerEvents","indicatorContainer","transform","getTabWidth","scroll","FlatList","data","horizontal","accessibilityRole","keyboardShouldPersistTaps","initialNumToRender","onViewableItemsChanged","alwaysBounceHorizontal","scrollsToTop","showsHorizontalScrollIndicator","showsVerticalScrollIndicator","automaticallyAdjustContentInsets","overScrollMode","scrollEventThrottle","onScroll","ref","create","flex","overflow","select","default","web","backgroundColor","elevation","shadowColor","shadowOpacity","shadowRadius","hairlineWidth","shadowOffset","zIndex","flexDirection","flexWrap","top","left","right","bottom"],"sourceRoot":"../../src","sources":["TabBar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Animated, Easing, I18nManager, Platform, StyleSheet } from 'react-native';
|
|
3
|
+
import useAnimatedValue from './useAnimatedValue';
|
|
4
|
+
const getTranslateX = (position, routes, getTabWidth, gap) => {
|
|
5
|
+
const inputRange = routes.map((_, i) => i);
|
|
6
|
+
|
|
7
|
+
// every index contains widths at all previous indices
|
|
8
|
+
const outputRange = routes.reduce((acc, _, i) => {
|
|
9
|
+
if (i === 0) return [0];
|
|
10
|
+
return [...acc, acc[i - 1] + getTabWidth(i - 1) + (gap ?? 0)];
|
|
11
|
+
}, []);
|
|
12
|
+
const translateX = position.interpolate({
|
|
13
|
+
inputRange,
|
|
14
|
+
outputRange,
|
|
15
|
+
extrapolate: 'clamp'
|
|
16
|
+
});
|
|
17
|
+
return Animated.multiply(translateX, I18nManager.isRTL ? -1 : 1);
|
|
18
|
+
};
|
|
19
|
+
export default function TabBarIndicator({
|
|
20
|
+
getTabWidth,
|
|
21
|
+
layout,
|
|
22
|
+
navigationState,
|
|
23
|
+
position,
|
|
24
|
+
width,
|
|
25
|
+
gap,
|
|
26
|
+
style
|
|
27
|
+
}) {
|
|
28
|
+
const isIndicatorShown = React.useRef(false);
|
|
29
|
+
const isWidthDynamic = width === 'auto';
|
|
30
|
+
const opacity = useAnimatedValue(isWidthDynamic ? 0 : 1);
|
|
31
|
+
const indicatorVisible = isWidthDynamic ? layout.width && navigationState.routes.slice(0, navigationState.index).every((_, r) => getTabWidth(r)) : true;
|
|
32
|
+
React.useEffect(() => {
|
|
33
|
+
const fadeInIndicator = () => {
|
|
34
|
+
if (!isIndicatorShown.current && isWidthDynamic &&
|
|
35
|
+
// We should fade-in the indicator when we have widths for all the tab items
|
|
36
|
+
indicatorVisible) {
|
|
37
|
+
isIndicatorShown.current = true;
|
|
38
|
+
Animated.timing(opacity, {
|
|
39
|
+
toValue: 1,
|
|
40
|
+
duration: 150,
|
|
41
|
+
easing: Easing.in(Easing.linear),
|
|
42
|
+
useNativeDriver: true
|
|
43
|
+
}).start();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
fadeInIndicator();
|
|
47
|
+
return () => opacity.stopAnimation();
|
|
48
|
+
}, [indicatorVisible, isWidthDynamic, opacity]);
|
|
49
|
+
const {
|
|
50
|
+
routes
|
|
51
|
+
} = navigationState;
|
|
52
|
+
const transform = [];
|
|
53
|
+
if (layout.width) {
|
|
54
|
+
const translateX = routes.length > 1 ? getTranslateX(position, routes, getTabWidth, gap) : 0;
|
|
55
|
+
transform.push({
|
|
56
|
+
translateX
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (width === 'auto') {
|
|
60
|
+
const inputRange = routes.map((_, i) => i);
|
|
61
|
+
const outputRange = inputRange.map(getTabWidth);
|
|
62
|
+
transform.push({
|
|
63
|
+
scaleX: routes.length > 1 ? position.interpolate({
|
|
64
|
+
inputRange,
|
|
65
|
+
outputRange,
|
|
66
|
+
extrapolate: 'clamp'
|
|
67
|
+
}) : outputRange[0]
|
|
68
|
+
}, {
|
|
69
|
+
translateX: 0.5
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
73
|
+
style: [styles.indicator, {
|
|
74
|
+
width: width === 'auto' ? 1 : width
|
|
75
|
+
},
|
|
76
|
+
// If layout is not available, use `left` property for positioning the indicator
|
|
77
|
+
// This avoids rendering delay until we are able to calculate translateX
|
|
78
|
+
// If platform is macos use `left` property as `transform` is broken at the moment.
|
|
79
|
+
// See: https://github.com/microsoft/react-native-macos/issues/280
|
|
80
|
+
layout.width && Platform.OS !== 'macos' ? {
|
|
81
|
+
left: 0
|
|
82
|
+
} : {
|
|
83
|
+
left: `${100 / routes.length * navigationState.index}%`
|
|
84
|
+
}, {
|
|
85
|
+
transform
|
|
86
|
+
}, width === 'auto' ? {
|
|
87
|
+
opacity: opacity
|
|
88
|
+
} : null, style]
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
const styles = StyleSheet.create({
|
|
92
|
+
indicator: {
|
|
93
|
+
backgroundColor: '#ffeb3b',
|
|
94
|
+
position: 'absolute',
|
|
95
|
+
left: 0,
|
|
96
|
+
bottom: 0,
|
|
97
|
+
right: 0,
|
|
98
|
+
height: 2
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
//# sourceMappingURL=TabBarIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Animated","Easing","I18nManager","Platform","StyleSheet","useAnimatedValue","getTranslateX","position","routes","getTabWidth","gap","inputRange","map","_","i","outputRange","reduce","acc","translateX","interpolate","extrapolate","multiply","isRTL","TabBarIndicator","layout","navigationState","width","style","isIndicatorShown","useRef","isWidthDynamic","opacity","indicatorVisible","slice","index","every","r","useEffect","fadeInIndicator","current","timing","toValue","duration","easing","in","linear","useNativeDriver","start","stopAnimation","transform","length","push","scaleX","createElement","View","styles","indicator","OS","left","create","backgroundColor","bottom","right","height"],"sourceRoot":"../../src","sources":["TabBarIndicator.tsx"],"mappings":"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","ignoreList":[]}
|