react-native-tab-view 4.2.2 → 4.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/module/TabBar.js +7 -30
- package/lib/module/TabBar.js.map +1 -1
- package/lib/module/TabBarIndicator.js +110 -35
- package/lib/module/TabBarIndicator.js.map +1 -1
- package/lib/typescript/src/TabBar.d.ts.map +1 -1
- package/lib/typescript/src/TabBarIndicator.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/TabBar.tsx +10 -44
- package/src/TabBarIndicator.tsx +182 -41
package/lib/module/TabBar.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { Animated, I18nManager, Platform, StyleSheet, View } from 'react-native';
|
|
5
|
-
import useLatestCallback from 'use-latest-callback';
|
|
6
5
|
import { TabBarIndicator } from "./TabBarIndicator.js";
|
|
7
6
|
import { TabBarItem } from "./TabBarItem.js";
|
|
8
7
|
import { useAnimatedValue } from "./useAnimatedValue.js";
|
|
@@ -202,7 +201,6 @@ export function TabBar({
|
|
|
202
201
|
const flatListRef = React.useRef(null);
|
|
203
202
|
const isFirst = React.useRef(true);
|
|
204
203
|
const scrollAmount = useAnimatedValue(0);
|
|
205
|
-
const measuredTabWidths = React.useRef({});
|
|
206
204
|
const {
|
|
207
205
|
routes
|
|
208
206
|
} = navigationState;
|
|
@@ -260,6 +258,8 @@ export function TabBar({
|
|
|
260
258
|
const separatorsWidth = Math.max(0, routes.length - 1) * gap;
|
|
261
259
|
const paddingsWidth = Math.max(0, convertPaddingPercentToSize(flattenedPaddingStart, layout) + convertPaddingPercentToSize(flattenedPaddingEnd, layout));
|
|
262
260
|
const translateX = React.useMemo(() => getTranslateX(scrollAmount, getMaxScrollDistance(tabBarWidth, layout.width), direction), [direction, layout.width, scrollAmount, tabBarWidth]);
|
|
261
|
+
const measuredTabWidths = React.useRef({});
|
|
262
|
+
const animationFrameHandle = React.useRef(null);
|
|
263
263
|
const renderItem = React.useCallback(({
|
|
264
264
|
item: route,
|
|
265
265
|
index
|
|
@@ -281,21 +281,14 @@ export function TabBar({
|
|
|
281
281
|
} = options?.[route.key] ?? {};
|
|
282
282
|
const onLayout = isWidthDynamic ? e => {
|
|
283
283
|
measuredTabWidths.current[route.key] = e.nativeEvent.layout.width;
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
if (routes.length > MEASURE_PER_BATCH && index === MEASURE_PER_BATCH && routes.slice(0, MEASURE_PER_BATCH).every(r => typeof measuredTabWidths.current[r.key] === 'number')) {
|
|
289
|
-
setTabWidths({
|
|
290
|
-
...measuredTabWidths.current
|
|
291
|
-
});
|
|
292
|
-
} else if (routes.every(r => typeof measuredTabWidths.current[r.key] === 'number')) {
|
|
293
|
-
// When we have measured widths for all of the tabs, we should updates the state
|
|
294
|
-
// We avoid doing separate setState for each layout since it triggers multiple renders and slows down app
|
|
284
|
+
if (animationFrameHandle.current != null) {
|
|
285
|
+
cancelAnimationFrame(animationFrameHandle.current);
|
|
286
|
+
}
|
|
287
|
+
animationFrameHandle.current = requestAnimationFrame(() => {
|
|
295
288
|
setTabWidths({
|
|
296
289
|
...measuredTabWidths.current
|
|
297
290
|
});
|
|
298
|
-
}
|
|
291
|
+
});
|
|
299
292
|
} : undefined;
|
|
300
293
|
const onPress = () => {
|
|
301
294
|
const event = {
|
|
@@ -361,21 +354,6 @@ export function TabBar({
|
|
|
361
354
|
}], {
|
|
362
355
|
useNativeDriver
|
|
363
356
|
}), [scrollAmount]);
|
|
364
|
-
const handleViewableItemsChanged = useLatestCallback(({
|
|
365
|
-
changed
|
|
366
|
-
}) => {
|
|
367
|
-
if (routes.length <= MEASURE_PER_BATCH) {
|
|
368
|
-
return;
|
|
369
|
-
}
|
|
370
|
-
// Get next vievable item
|
|
371
|
-
const item = changed[changed.length - 1];
|
|
372
|
-
const index = item?.index || 0;
|
|
373
|
-
if (item.isViewable && (index % 10 === 0 || index === navigationState.index || index === routes.length - 1)) {
|
|
374
|
-
setTabWidths({
|
|
375
|
-
...measuredTabWidths.current
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
});
|
|
379
357
|
return /*#__PURE__*/_jsxs(Animated.View, {
|
|
380
358
|
onLayout: handleLayout,
|
|
381
359
|
style: [styles.tabBar, style],
|
|
@@ -413,7 +391,6 @@ export function TabBar({
|
|
|
413
391
|
scrollEnabled: scrollEnabled,
|
|
414
392
|
bounces: bounces,
|
|
415
393
|
initialNumToRender: MEASURE_PER_BATCH,
|
|
416
|
-
onViewableItemsChanged: handleViewableItemsChanged,
|
|
417
394
|
alwaysBounceHorizontal: false,
|
|
418
395
|
scrollsToTop: false,
|
|
419
396
|
showsHorizontalScrollIndicator: false,
|
package/lib/module/TabBar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Animated","I18nManager","Platform","StyleSheet","View","useLatestCallback","TabBarIndicator","TabBarItem","useAnimatedValue","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","useNativeDriver","OS","Separator","width","style","getFlattenedTabWidth","tabStyle","flatten","getFlattenedPaddingStart","flattenStyle","paddingLeft","paddingStart","paddingHorizontal","getFlattenedPaddingEnd","paddingRight","paddingEnd","convertPaddingPercentToSize","value","layout","endsWith","parseFloat","Number","isFinite","getComputedTabWidth","index","routes","scrollEnabled","tabWidths","flattenedWidth","flattenedPaddingStart","flattenedPaddingEnd","gap","key","gapTotalWidth","length","paddingTotalWidth","getMaxScrollDistance","tabBarWidth","layoutWidth","getTranslateX","scrollAmount","maxScrollDistance","direction","multiply","add","getTabBarWidth","navigationState","flattenedTabWidth","paddingsWidth","Math","max","reduce","acc","_","i","normalizeScrollValue","maxDistance","scrollValue","min","getScrollAmount","paddingInitial","centerDistance","Array","from","total","tabWidth","getLabelTextDefault","route","title","getAccessibleDefault","accessible","getAccessibilityLabelDefault","accessibilityLabel","undefined","renderIndicatorDefault","props","getTestIdDefault","testID","MEASURE_PER_BATCH","TabBar","renderIndicator","jumpTo","position","activeColor","bounces","contentContainerStyle","inactiveColor","indicatorContainerStyle","indicatorStyle","onTabLongPress","onTabPress","pressColor","pressOpacity","getConstants","isRTL","renderTabBarItem","propLayout","android_ripple","options","setLayout","useState","height","setTabWidths","flatListRef","useRef","isFirst","measuredTabWidths","isWidthDynamic","scrollOffset","hasMeasuredTabWidths","Boolean","slice","every","r","useEffect","current","scrollToOffset","offset","animated","handleLayout","e","nativeEvent","separatorsWidth","translateX","useMemo","renderItem","useCallback","item","labelText","rest","onLayout","onPress","event","defaultPrevented","preventDefault","onLongPress","defaultTabWidth","children","keyExtractor","contentContainerStyleMemoized","styles","tabContent","handleScroll","contentOffset","x","handleViewableItemsChanged","changed","isViewable","tabBar","pointerEvents","indicatorContainer","transform","start","end","getTabWidth","scroll","FlatList","data","horizontal","role","keyboardShouldPersistTaps","initialNumToRender","onViewableItemsChanged","alwaysBounceHorizontal","scrollsToTop","showsHorizontalScrollIndicator","showsVerticalScrollIndicator","automaticallyAdjustContentInsets","overScrollMode","scrollEventThrottle","onScroll","ref","create","overflow","select","default","web","zIndex","backgroundColor","elevation","shadowColor","shadowOpacity","shadowRadius","hairlineWidth","shadowOffset","boxShadow","flexGrow","flexDirection","flexWrap","top","bottom"],"sourceRoot":"../../src","sources":["TabBar.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Animated","I18nManager","Platform","StyleSheet","View","TabBarIndicator","TabBarItem","useAnimatedValue","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","useNativeDriver","OS","Separator","width","style","getFlattenedTabWidth","tabStyle","flatten","getFlattenedPaddingStart","flattenStyle","paddingLeft","paddingStart","paddingHorizontal","getFlattenedPaddingEnd","paddingRight","paddingEnd","convertPaddingPercentToSize","value","layout","endsWith","parseFloat","Number","isFinite","getComputedTabWidth","index","routes","scrollEnabled","tabWidths","flattenedWidth","flattenedPaddingStart","flattenedPaddingEnd","gap","key","gapTotalWidth","length","paddingTotalWidth","getMaxScrollDistance","tabBarWidth","layoutWidth","getTranslateX","scrollAmount","maxScrollDistance","direction","multiply","add","getTabBarWidth","navigationState","flattenedTabWidth","paddingsWidth","Math","max","reduce","acc","_","i","normalizeScrollValue","maxDistance","scrollValue","min","getScrollAmount","paddingInitial","centerDistance","Array","from","total","tabWidth","getLabelTextDefault","route","title","getAccessibleDefault","accessible","getAccessibilityLabelDefault","accessibilityLabel","undefined","renderIndicatorDefault","props","getTestIdDefault","testID","MEASURE_PER_BATCH","TabBar","renderIndicator","jumpTo","position","activeColor","bounces","contentContainerStyle","inactiveColor","indicatorContainerStyle","indicatorStyle","onTabLongPress","onTabPress","pressColor","pressOpacity","getConstants","isRTL","renderTabBarItem","propLayout","android_ripple","options","setLayout","useState","height","setTabWidths","flatListRef","useRef","isFirst","isWidthDynamic","scrollOffset","hasMeasuredTabWidths","Boolean","slice","every","r","useEffect","current","scrollToOffset","offset","animated","handleLayout","e","nativeEvent","separatorsWidth","translateX","useMemo","measuredTabWidths","animationFrameHandle","renderItem","useCallback","item","labelText","rest","onLayout","cancelAnimationFrame","requestAnimationFrame","onPress","event","defaultPrevented","preventDefault","onLongPress","defaultTabWidth","children","keyExtractor","contentContainerStyleMemoized","styles","tabContent","handleScroll","contentOffset","x","tabBar","pointerEvents","indicatorContainer","transform","start","end","getTabWidth","scroll","FlatList","data","horizontal","role","keyboardShouldPersistTaps","initialNumToRender","alwaysBounceHorizontal","scrollsToTop","showsHorizontalScrollIndicator","showsVerticalScrollIndicator","automaticallyAdjustContentInsets","overScrollMode","scrollEventThrottle","onScroll","ref","create","overflow","select","default","web","zIndex","backgroundColor","elevation","shadowColor","shadowOpacity","shadowRadius","hairlineWidth","shadowOffset","boxShadow","flexGrow","flexDirection","flexWrap","top","bottom"],"sourceRoot":"../../src","sources":["TabBar.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,23 +5,48 @@ import { Animated, Easing, Platform, StyleSheet } from 'react-native';
|
|
|
5
5
|
import { useAnimatedValue } from "./useAnimatedValue.js";
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
7
|
const useNativeDriver = Platform.OS !== 'web';
|
|
8
|
-
const
|
|
8
|
+
const calculateSize = (value, referenceWidth) => {
|
|
9
|
+
if (typeof value === 'number') {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
if (typeof value === 'string' && value.endsWith('%')) {
|
|
13
|
+
const parsed = parseFloat(value);
|
|
14
|
+
if (Number.isFinite(parsed)) {
|
|
15
|
+
return referenceWidth * (parsed / 100);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
};
|
|
20
|
+
const getIndicatorWidthWithMargins = (width, style, direction) => {
|
|
21
|
+
const marginHorizontal = style?.marginHorizontal ?? style?.margin;
|
|
22
|
+
const leftMargin = (direction === 'ltr' ? style?.marginStart : style?.marginEnd) ?? style?.marginLeft ?? marginHorizontal;
|
|
23
|
+
const rightMargin = (direction === 'rtl' ? style?.marginStart : style?.marginEnd) ?? style?.marginRight ?? marginHorizontal;
|
|
24
|
+
return Math.max(0, width - (calculateSize(leftMargin, width) ?? 0) - (calculateSize(rightMargin, width) ?? 0));
|
|
25
|
+
};
|
|
26
|
+
const getIndicatorWidth = (tabWidth, width, style, direction) => {
|
|
27
|
+
const customWidth = calculateSize(style?.width, tabWidth);
|
|
28
|
+
if (customWidth !== undefined) {
|
|
29
|
+
return customWidth;
|
|
30
|
+
}
|
|
31
|
+
if (typeof width === 'number') {
|
|
32
|
+
return getIndicatorWidthWithMargins(width, style, direction);
|
|
33
|
+
}
|
|
34
|
+
return width;
|
|
35
|
+
};
|
|
36
|
+
const getTranslateX = (position, routes, getTabWidth, direction, gap, getWidth) => {
|
|
9
37
|
const inputRange = routes.map((_, i) => i);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return [...acc, sumTabWidth + getTabWidth(i) / 2 + (gap ? gap * i : 0) - width / 2];
|
|
20
|
-
} else {
|
|
21
|
-
if (i === 0) return [0];
|
|
22
|
-
return [...acc, acc[i - 1] + getTabWidth(i - 1) + (gap ?? 0)];
|
|
38
|
+
const outputRange = routes.map((_, i) => {
|
|
39
|
+
let sumTabWidth = 0;
|
|
40
|
+
for (let j = 0; j < i; j++) {
|
|
41
|
+
sumTabWidth += getTabWidth(j);
|
|
42
|
+
}
|
|
43
|
+
const indicatorWidth = getWidth?.(i);
|
|
44
|
+
const tabOffset = sumTabWidth + (gap ? gap * i : 0);
|
|
45
|
+
if (indicatorWidth === undefined) {
|
|
46
|
+
return tabOffset;
|
|
23
47
|
}
|
|
24
|
-
|
|
48
|
+
return tabOffset + getTabWidth(i) / 2 - indicatorWidth / 2;
|
|
49
|
+
});
|
|
25
50
|
const translateX = position.interpolate({
|
|
26
51
|
inputRange,
|
|
27
52
|
outputRange,
|
|
@@ -42,20 +67,41 @@ export function TabBarIndicator({
|
|
|
42
67
|
}) {
|
|
43
68
|
const isIndicatorShown = React.useRef(false);
|
|
44
69
|
const isWidthDynamic = width === 'auto';
|
|
70
|
+
const flattenedStyle = StyleSheet.flatten(style);
|
|
71
|
+
const hasCustomIndicatorWidth = typeof flattenedStyle?.width === 'number' || typeof flattenedStyle?.width === 'string' && flattenedStyle?.width.endsWith('%');
|
|
72
|
+
const constantIndicatorWidth = typeof flattenedStyle?.width === 'number' ? flattenedStyle.width : undefined;
|
|
73
|
+
const isCentered = hasCustomIndicatorWidth && (flattenedStyle?.margin === 'auto' || flattenedStyle?.marginHorizontal === 'auto');
|
|
74
|
+
|
|
75
|
+
// If indicator has a custom width, we need to adjust calculations to account for it
|
|
76
|
+
// It should be centered relative to the tab if the margin is set to auto
|
|
77
|
+
const getCenteredIndicatorWidth = tabWidth => {
|
|
78
|
+
if (isCentered) {
|
|
79
|
+
return calculateSize(flattenedStyle?.width, tabWidth);
|
|
80
|
+
}
|
|
81
|
+
if (typeof width === 'number') {
|
|
82
|
+
return width;
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
};
|
|
45
86
|
const opacity = useAnimatedValue(isWidthDynamic ? 0 : 1);
|
|
46
|
-
|
|
87
|
+
|
|
88
|
+
// We should fade-in the indicator when we have widths for all the tab items
|
|
89
|
+
const indicatorVisible = isWidthDynamic ? layout.width && navigationState.routes.slice(0, navigationState.index + 1).every((_, r) => getTabWidth(r)) : true;
|
|
47
90
|
React.useEffect(() => {
|
|
48
91
|
const fadeInIndicator = () => {
|
|
49
|
-
if (!isIndicatorShown.current && isWidthDynamic &&
|
|
50
|
-
// We should fade-in the indicator when we have widths for all the tab items
|
|
51
|
-
indicatorVisible) {
|
|
52
|
-
isIndicatorShown.current = true;
|
|
92
|
+
if (!isIndicatorShown.current && isWidthDynamic && indicatorVisible) {
|
|
53
93
|
Animated.timing(opacity, {
|
|
54
94
|
toValue: 1,
|
|
55
95
|
duration: 150,
|
|
56
96
|
easing: Easing.in(Easing.linear),
|
|
57
97
|
useNativeDriver
|
|
58
|
-
}).start(
|
|
98
|
+
}).start(({
|
|
99
|
+
finished
|
|
100
|
+
}) => {
|
|
101
|
+
if (finished) {
|
|
102
|
+
isIndicatorShown.current = true;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
59
105
|
}
|
|
60
106
|
};
|
|
61
107
|
fadeInIndicator();
|
|
@@ -65,15 +111,16 @@ export function TabBarIndicator({
|
|
|
65
111
|
routes
|
|
66
112
|
} = navigationState;
|
|
67
113
|
const transform = [];
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
if (width === 'auto') {
|
|
114
|
+
const translateX = layout.width && routes.length > 1 ? getTranslateX(position, routes, getTabWidth, direction, gap, index => getCenteredIndicatorWidth(getTabWidth(index))) : 0;
|
|
115
|
+
transform.push({
|
|
116
|
+
translateX
|
|
117
|
+
});
|
|
118
|
+
if (width === 'auto' && constantIndicatorWidth == null) {
|
|
75
119
|
const inputRange = routes.map((_, i) => i);
|
|
76
|
-
const outputRange = inputRange.map(
|
|
120
|
+
const outputRange = inputRange.map(i => {
|
|
121
|
+
const tabW = getTabWidth(i);
|
|
122
|
+
return calculateSize(flattenedStyle?.width, tabW) ?? getIndicatorWidthWithMargins(tabW, flattenedStyle, direction);
|
|
123
|
+
});
|
|
77
124
|
transform.push({
|
|
78
125
|
scaleX: routes.length > 1 ? position.interpolate({
|
|
79
126
|
inputRange,
|
|
@@ -86,26 +133,54 @@ export function TabBarIndicator({
|
|
|
86
133
|
}
|
|
87
134
|
const styleList = [];
|
|
88
135
|
|
|
89
|
-
//
|
|
90
|
-
|
|
136
|
+
// transform doesn't work properly on chrome and opera for linux and android
|
|
137
|
+
// so we need to use width and left/right instead of scaleX and translateX
|
|
138
|
+
// https://github.com/react-navigation/react-navigation/pull/11440
|
|
139
|
+
if (Platform.OS === 'web' && width === 'auto' && constantIndicatorWidth == null) {
|
|
140
|
+
const start = flattenedStyle?.start;
|
|
141
|
+
const translate = direction === 'rtl' ? Animated.multiply(translateX, -1) : translateX;
|
|
142
|
+
const offset = typeof start === 'number' ? Animated.add(translate, start) : translate;
|
|
91
143
|
styleList.push({
|
|
92
144
|
width: transform[1].scaleX
|
|
93
|
-
}, {
|
|
94
|
-
|
|
145
|
+
}, direction === 'rtl' ? {
|
|
146
|
+
right: offset
|
|
147
|
+
} : {
|
|
148
|
+
left: offset
|
|
95
149
|
});
|
|
96
150
|
} else {
|
|
97
151
|
styleList.push({
|
|
98
|
-
width: width === 'auto' ?
|
|
152
|
+
width: width === 'auto' ?
|
|
153
|
+
// if the indicator has a constant width, use it as is
|
|
154
|
+
// we don't need to scale it to match tab width
|
|
155
|
+
constantIndicatorWidth ?? 1 : getIndicatorWidth(getTabWidth(navigationState.index), width, flattenedStyle, direction)
|
|
99
156
|
}, {
|
|
100
157
|
start: `${100 / routes.length * navigationState.index}%`
|
|
101
158
|
}, {
|
|
102
159
|
transform
|
|
103
160
|
});
|
|
104
161
|
}
|
|
162
|
+
let finalStyle;
|
|
163
|
+
if (hasCustomIndicatorWidth && style != null) {
|
|
164
|
+
const rest = {
|
|
165
|
+
...flattenedStyle
|
|
166
|
+
};
|
|
167
|
+
delete rest.width;
|
|
168
|
+
if (isCentered) {
|
|
169
|
+
if (rest.margin === 'auto') {
|
|
170
|
+
delete rest.margin;
|
|
171
|
+
}
|
|
172
|
+
if (rest.marginHorizontal === 'auto') {
|
|
173
|
+
delete rest.marginHorizontal;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
finalStyle = rest;
|
|
177
|
+
} else {
|
|
178
|
+
finalStyle = style;
|
|
179
|
+
}
|
|
105
180
|
return /*#__PURE__*/_jsx(Animated.View, {
|
|
106
181
|
style: [styles.indicator, styleList, width === 'auto' ? {
|
|
107
182
|
opacity: opacity
|
|
108
|
-
} : null,
|
|
183
|
+
} : null, finalStyle],
|
|
109
184
|
children: children
|
|
110
185
|
});
|
|
111
186
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Animated","Easing","Platform","StyleSheet","useAnimatedValue","jsx","_jsx","useNativeDriver","OS","getTranslateX","position","routes","getTabWidth","
|
|
1
|
+
{"version":3,"names":["React","Animated","Easing","Platform","StyleSheet","useAnimatedValue","jsx","_jsx","useNativeDriver","OS","calculateSize","value","referenceWidth","endsWith","parsed","parseFloat","Number","isFinite","undefined","getIndicatorWidthWithMargins","width","style","direction","marginHorizontal","margin","leftMargin","marginStart","marginEnd","marginLeft","rightMargin","marginRight","Math","max","getIndicatorWidth","tabWidth","customWidth","getTranslateX","position","routes","getTabWidth","gap","getWidth","inputRange","map","_","i","outputRange","sumTabWidth","j","indicatorWidth","tabOffset","translateX","interpolate","extrapolate","multiply","TabBarIndicator","layout","navigationState","children","isIndicatorShown","useRef","isWidthDynamic","flattenedStyle","flatten","hasCustomIndicatorWidth","constantIndicatorWidth","isCentered","getCenteredIndicatorWidth","opacity","indicatorVisible","slice","index","every","r","useEffect","fadeInIndicator","current","timing","toValue","duration","easing","in","linear","start","finished","stopAnimation","transform","length","push","tabW","scaleX","styleList","translate","offset","add","right","left","finalStyle","rest","View","styles","indicator","create","backgroundColor","bottom","end","height"],"sourceRoot":"../../src","sources":["TabBarIndicator.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../src/TabBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAQL,KAAK,4BAA4B,EACjC,KAAK,SAAS,EAGd,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../src/TabBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAQL,KAAK,4BAA4B,EACjC,KAAK,SAAS,EAGd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,KAAK,IAAI,cAAc,EAE7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,KAAK,IAAI,eAAe,EAAc,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EACV,KAAK,EAEL,eAAe,EACf,eAAe,EACf,KAAK,EACL,KAAK,EACL,kBAAkB,EAClB,aAAa,EACd,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,KAAK,IAAI,kBAAkB,GAAG;IACxD,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IAChE,gBAAgB,CAAC,EAAE,CACjB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KACxC,KAAK,CAAC,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,uBAAuB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/C,qBAAqB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,4BAA4B,CAAC;CAC/C,CAAC;AAkRF,wBAAgB,MAAM,CAAC,CAAC,SAAS,KAAK,EAAE,EACtC,eAAwC,EACxC,GAAO,EACP,aAAa,EACb,MAAM,EACN,eAAe,EACf,QAAQ,EACR,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,YAAY,EACZ,SAA4D,EAC5D,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,MAAM,EAAE,UAAU,EAClB,MAAM,EACN,cAAc,EACd,OAAO,GACR,EAAE,KAAK,CAAC,CAAC,CAAC,2CA4SV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabBarIndicator.d.ts","sourceRoot":"","sources":["../../../src/TabBarIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,KAAK,EACL,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAEpD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,KAAK,IAAI,kBAAkB,GAAG;IACxD,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;
|
|
1
|
+
{"version":3,"file":"TabBarIndicator.d.ts","sourceRoot":"","sources":["../../../src/TabBarIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,KAAK,EACL,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAEpD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,KAAK,IAAI,kBAAkB,GAAG;IACxD,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAsGF,wBAAgB,eAAe,CAAC,CAAC,SAAS,KAAK,EAAE,EAC/C,WAAW,EACX,MAAM,EACN,eAAe,EACf,QAAQ,EACR,KAAK,EACL,SAAS,EACT,GAAG,EACH,KAAK,EACL,QAAQ,GACT,EAAE,KAAK,CAAC,CAAC,CAAC,2CAmLV"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-tab-view",
|
|
3
3
|
"description": "Tab view component for React Native",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.3.0",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native-component",
|
|
7
7
|
"react-component",
|
|
@@ -80,5 +80,5 @@
|
|
|
80
80
|
]
|
|
81
81
|
]
|
|
82
82
|
},
|
|
83
|
-
"gitHead": "
|
|
83
|
+
"gitHead": "166a1b609e6c12ab6e2bdbf3edffd0a57a70039d"
|
|
84
84
|
}
|
package/src/TabBar.tsx
CHANGED
|
@@ -12,9 +12,7 @@ import {
|
|
|
12
12
|
StyleSheet,
|
|
13
13
|
View,
|
|
14
14
|
type ViewStyle,
|
|
15
|
-
type ViewToken,
|
|
16
15
|
} from 'react-native';
|
|
17
|
-
import useLatestCallback from 'use-latest-callback';
|
|
18
16
|
|
|
19
17
|
import {
|
|
20
18
|
type Props as IndicatorProps,
|
|
@@ -364,7 +362,6 @@ export function TabBar<T extends Route>({
|
|
|
364
362
|
const flatListRef = React.useRef<FlatList | null>(null);
|
|
365
363
|
const isFirst = React.useRef(true);
|
|
366
364
|
const scrollAmount = useAnimatedValue(0);
|
|
367
|
-
const measuredTabWidths = React.useRef<Record<string, number>>({});
|
|
368
365
|
const { routes } = navigationState;
|
|
369
366
|
const flattenedTabWidth = getFlattenedTabWidth(tabStyle);
|
|
370
367
|
const isWidthDynamic = flattenedTabWidth === 'auto';
|
|
@@ -444,6 +441,10 @@ export function TabBar<T extends Route>({
|
|
|
444
441
|
[direction, layout.width, scrollAmount, tabBarWidth]
|
|
445
442
|
);
|
|
446
443
|
|
|
444
|
+
const measuredTabWidths = React.useRef<Record<string, number>>({});
|
|
445
|
+
const animationFrameHandle =
|
|
446
|
+
React.useRef<ReturnType<typeof requestAnimationFrame>>(null);
|
|
447
|
+
|
|
447
448
|
const renderItem = React.useCallback(
|
|
448
449
|
({ item: route, index }: ListRenderItemInfo<T>) => {
|
|
449
450
|
const {
|
|
@@ -458,28 +459,13 @@ export function TabBar<T extends Route>({
|
|
|
458
459
|
? (e: LayoutChangeEvent) => {
|
|
459
460
|
measuredTabWidths.current[route.key] = e.nativeEvent.layout.width;
|
|
460
461
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
// If we have more than 10 routes divide updating tabWidths into multiple batches. Here we update only first batch of 10 items.
|
|
464
|
-
if (
|
|
465
|
-
routes.length > MEASURE_PER_BATCH &&
|
|
466
|
-
index === MEASURE_PER_BATCH &&
|
|
467
|
-
routes
|
|
468
|
-
.slice(0, MEASURE_PER_BATCH)
|
|
469
|
-
.every(
|
|
470
|
-
(r) => typeof measuredTabWidths.current[r.key] === 'number'
|
|
471
|
-
)
|
|
472
|
-
) {
|
|
473
|
-
setTabWidths({ ...measuredTabWidths.current });
|
|
474
|
-
} else if (
|
|
475
|
-
routes.every(
|
|
476
|
-
(r) => typeof measuredTabWidths.current[r.key] === 'number'
|
|
477
|
-
)
|
|
478
|
-
) {
|
|
479
|
-
// When we have measured widths for all of the tabs, we should updates the state
|
|
480
|
-
// We avoid doing separate setState for each layout since it triggers multiple renders and slows down app
|
|
481
|
-
setTabWidths({ ...measuredTabWidths.current });
|
|
462
|
+
if (animationFrameHandle.current != null) {
|
|
463
|
+
cancelAnimationFrame(animationFrameHandle.current);
|
|
482
464
|
}
|
|
465
|
+
|
|
466
|
+
animationFrameHandle.current = requestAnimationFrame(() => {
|
|
467
|
+
setTabWidths({ ...measuredTabWidths.current });
|
|
468
|
+
});
|
|
483
469
|
}
|
|
484
470
|
: undefined;
|
|
485
471
|
|
|
@@ -600,25 +586,6 @@ export function TabBar<T extends Route>({
|
|
|
600
586
|
[scrollAmount]
|
|
601
587
|
);
|
|
602
588
|
|
|
603
|
-
const handleViewableItemsChanged = useLatestCallback(
|
|
604
|
-
({ changed }: { changed: ViewToken[] }) => {
|
|
605
|
-
if (routes.length <= MEASURE_PER_BATCH) {
|
|
606
|
-
return;
|
|
607
|
-
}
|
|
608
|
-
// Get next vievable item
|
|
609
|
-
const item = changed[changed.length - 1];
|
|
610
|
-
const index = item?.index || 0;
|
|
611
|
-
if (
|
|
612
|
-
item.isViewable &&
|
|
613
|
-
(index % 10 === 0 ||
|
|
614
|
-
index === navigationState.index ||
|
|
615
|
-
index === routes.length - 1)
|
|
616
|
-
) {
|
|
617
|
-
setTabWidths({ ...measuredTabWidths.current });
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
);
|
|
621
|
-
|
|
622
589
|
return (
|
|
623
590
|
<Animated.View onLayout={handleLayout} style={[styles.tabBar, style]}>
|
|
624
591
|
<Animated.View
|
|
@@ -671,7 +638,6 @@ export function TabBar<T extends Route>({
|
|
|
671
638
|
scrollEnabled={scrollEnabled}
|
|
672
639
|
bounces={bounces}
|
|
673
640
|
initialNumToRender={MEASURE_PER_BATCH}
|
|
674
|
-
onViewableItemsChanged={handleViewableItemsChanged}
|
|
675
641
|
alwaysBounceHorizontal={false}
|
|
676
642
|
scrollsToTop={false}
|
|
677
643
|
showsHorizontalScrollIndicator={false}
|
package/src/TabBarIndicator.tsx
CHANGED
|
@@ -30,35 +30,94 @@ export type Props<T extends Route> = SceneRendererProps & {
|
|
|
30
30
|
|
|
31
31
|
const useNativeDriver = Platform.OS !== 'web';
|
|
32
32
|
|
|
33
|
+
const calculateSize = (
|
|
34
|
+
value: ViewStyle['width'] | undefined,
|
|
35
|
+
referenceWidth: number
|
|
36
|
+
): number | undefined => {
|
|
37
|
+
if (typeof value === 'number') {
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (typeof value === 'string' && value.endsWith('%')) {
|
|
42
|
+
const parsed = parseFloat(value);
|
|
43
|
+
|
|
44
|
+
if (Number.isFinite(parsed)) {
|
|
45
|
+
return referenceWidth * (parsed / 100);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return undefined;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const getIndicatorWidthWithMargins = (
|
|
53
|
+
width: number,
|
|
54
|
+
style: ViewStyle | undefined,
|
|
55
|
+
direction: LocaleDirection
|
|
56
|
+
) => {
|
|
57
|
+
const marginHorizontal = style?.marginHorizontal ?? style?.margin;
|
|
58
|
+
|
|
59
|
+
const leftMargin =
|
|
60
|
+
(direction === 'ltr' ? style?.marginStart : style?.marginEnd) ??
|
|
61
|
+
style?.marginLeft ??
|
|
62
|
+
marginHorizontal;
|
|
63
|
+
|
|
64
|
+
const rightMargin =
|
|
65
|
+
(direction === 'rtl' ? style?.marginStart : style?.marginEnd) ??
|
|
66
|
+
style?.marginRight ??
|
|
67
|
+
marginHorizontal;
|
|
68
|
+
|
|
69
|
+
return Math.max(
|
|
70
|
+
0,
|
|
71
|
+
width -
|
|
72
|
+
(calculateSize(leftMargin, width) ?? 0) -
|
|
73
|
+
(calculateSize(rightMargin, width) ?? 0)
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const getIndicatorWidth = (
|
|
78
|
+
tabWidth: number,
|
|
79
|
+
width: number | `${number}%`,
|
|
80
|
+
style: ViewStyle | undefined,
|
|
81
|
+
direction: LocaleDirection
|
|
82
|
+
): number | `${number}%` => {
|
|
83
|
+
const customWidth = calculateSize(style?.width, tabWidth);
|
|
84
|
+
|
|
85
|
+
if (customWidth !== undefined) {
|
|
86
|
+
return customWidth;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (typeof width === 'number') {
|
|
90
|
+
return getIndicatorWidthWithMargins(width, style, direction);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return width;
|
|
94
|
+
};
|
|
95
|
+
|
|
33
96
|
const getTranslateX = (
|
|
34
97
|
position: Animated.AnimatedInterpolation<number>,
|
|
35
98
|
routes: Route[],
|
|
36
99
|
getTabWidth: GetTabWidth,
|
|
37
100
|
direction: LocaleDirection,
|
|
38
101
|
gap?: number,
|
|
39
|
-
|
|
102
|
+
getWidth?: (index: number) => number | undefined
|
|
40
103
|
) => {
|
|
41
104
|
const inputRange = routes.map((_, i) => i);
|
|
105
|
+
const outputRange = routes.map((_, i) => {
|
|
106
|
+
let sumTabWidth = 0;
|
|
42
107
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if (i === 0) return [getTabWidth(i) / 2 - width / 2];
|
|
108
|
+
for (let j = 0; j < i; j++) {
|
|
109
|
+
sumTabWidth += getTabWidth(j);
|
|
110
|
+
}
|
|
47
111
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
sumTabWidth += getTabWidth(j);
|
|
51
|
-
}
|
|
112
|
+
const indicatorWidth = getWidth?.(i);
|
|
113
|
+
const tabOffset = sumTabWidth + (gap ? gap * i : 0);
|
|
52
114
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
sumTabWidth + getTabWidth(i) / 2 + (gap ? gap * i : 0) - width / 2,
|
|
56
|
-
];
|
|
57
|
-
} else {
|
|
58
|
-
if (i === 0) return [0];
|
|
59
|
-
return [...acc, acc[i - 1] + getTabWidth(i - 1) + (gap ?? 0)];
|
|
115
|
+
if (indicatorWidth === undefined) {
|
|
116
|
+
return tabOffset;
|
|
60
117
|
}
|
|
61
|
-
|
|
118
|
+
|
|
119
|
+
return tabOffset + getTabWidth(i) / 2 - indicatorWidth / 2;
|
|
120
|
+
});
|
|
62
121
|
|
|
63
122
|
const translateX = position.interpolate({
|
|
64
123
|
inputRange,
|
|
@@ -83,31 +142,60 @@ export function TabBarIndicator<T extends Route>({
|
|
|
83
142
|
const isIndicatorShown = React.useRef(false);
|
|
84
143
|
const isWidthDynamic = width === 'auto';
|
|
85
144
|
|
|
145
|
+
const flattenedStyle = StyleSheet.flatten(style);
|
|
146
|
+
|
|
147
|
+
const hasCustomIndicatorWidth =
|
|
148
|
+
typeof flattenedStyle?.width === 'number' ||
|
|
149
|
+
(typeof flattenedStyle?.width === 'string' &&
|
|
150
|
+
flattenedStyle?.width.endsWith('%'));
|
|
151
|
+
|
|
152
|
+
const constantIndicatorWidth =
|
|
153
|
+
typeof flattenedStyle?.width === 'number'
|
|
154
|
+
? flattenedStyle.width
|
|
155
|
+
: undefined;
|
|
156
|
+
|
|
157
|
+
const isCentered =
|
|
158
|
+
hasCustomIndicatorWidth &&
|
|
159
|
+
(flattenedStyle?.margin === 'auto' ||
|
|
160
|
+
flattenedStyle?.marginHorizontal === 'auto');
|
|
161
|
+
|
|
162
|
+
// If indicator has a custom width, we need to adjust calculations to account for it
|
|
163
|
+
// It should be centered relative to the tab if the margin is set to auto
|
|
164
|
+
const getCenteredIndicatorWidth = (tabWidth: number) => {
|
|
165
|
+
if (isCentered) {
|
|
166
|
+
return calculateSize(flattenedStyle?.width, tabWidth);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (typeof width === 'number') {
|
|
170
|
+
return width;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return undefined;
|
|
174
|
+
};
|
|
175
|
+
|
|
86
176
|
const opacity = useAnimatedValue(isWidthDynamic ? 0 : 1);
|
|
87
177
|
|
|
178
|
+
// We should fade-in the indicator when we have widths for all the tab items
|
|
88
179
|
const indicatorVisible = isWidthDynamic
|
|
89
180
|
? layout.width &&
|
|
90
181
|
navigationState.routes
|
|
91
|
-
.slice(0, navigationState.index)
|
|
182
|
+
.slice(0, navigationState.index + 1)
|
|
92
183
|
.every((_, r) => getTabWidth(r))
|
|
93
184
|
: true;
|
|
94
185
|
|
|
95
186
|
React.useEffect(() => {
|
|
96
187
|
const fadeInIndicator = () => {
|
|
97
|
-
if (
|
|
98
|
-
!isIndicatorShown.current &&
|
|
99
|
-
isWidthDynamic &&
|
|
100
|
-
// We should fade-in the indicator when we have widths for all the tab items
|
|
101
|
-
indicatorVisible
|
|
102
|
-
) {
|
|
103
|
-
isIndicatorShown.current = true;
|
|
104
|
-
|
|
188
|
+
if (!isIndicatorShown.current && isWidthDynamic && indicatorVisible) {
|
|
105
189
|
Animated.timing(opacity, {
|
|
106
190
|
toValue: 1,
|
|
107
191
|
duration: 150,
|
|
108
192
|
easing: Easing.in(Easing.linear),
|
|
109
193
|
useNativeDriver,
|
|
110
|
-
}).start()
|
|
194
|
+
}).start(({ finished }) => {
|
|
195
|
+
if (finished) {
|
|
196
|
+
isIndicatorShown.current = true;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
111
199
|
}
|
|
112
200
|
};
|
|
113
201
|
|
|
@@ -120,18 +208,25 @@ export function TabBarIndicator<T extends Route>({
|
|
|
120
208
|
|
|
121
209
|
const transform = [];
|
|
122
210
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
routes
|
|
126
|
-
|
|
127
|
-
|
|
211
|
+
const translateX =
|
|
212
|
+
layout.width && routes.length > 1
|
|
213
|
+
? getTranslateX(position, routes, getTabWidth, direction, gap, (index) =>
|
|
214
|
+
getCenteredIndicatorWidth(getTabWidth(index))
|
|
215
|
+
)
|
|
216
|
+
: 0;
|
|
128
217
|
|
|
129
|
-
|
|
130
|
-
}
|
|
218
|
+
transform.push({ translateX });
|
|
131
219
|
|
|
132
|
-
if (width === 'auto') {
|
|
220
|
+
if (width === 'auto' && constantIndicatorWidth == null) {
|
|
133
221
|
const inputRange = routes.map((_, i) => i);
|
|
134
|
-
const outputRange = inputRange.map(
|
|
222
|
+
const outputRange = inputRange.map((i) => {
|
|
223
|
+
const tabW = getTabWidth(i);
|
|
224
|
+
|
|
225
|
+
return (
|
|
226
|
+
calculateSize(flattenedStyle?.width, tabW) ??
|
|
227
|
+
getIndicatorWidthWithMargins(tabW, flattenedStyle, direction)
|
|
228
|
+
);
|
|
229
|
+
});
|
|
135
230
|
|
|
136
231
|
transform.push(
|
|
137
232
|
{
|
|
@@ -150,27 +245,73 @@ export function TabBarIndicator<T extends Route>({
|
|
|
150
245
|
|
|
151
246
|
const styleList: StyleProp<ViewStyle> = [];
|
|
152
247
|
|
|
153
|
-
//
|
|
154
|
-
|
|
248
|
+
// transform doesn't work properly on chrome and opera for linux and android
|
|
249
|
+
// so we need to use width and left/right instead of scaleX and translateX
|
|
250
|
+
// https://github.com/react-navigation/react-navigation/pull/11440
|
|
251
|
+
if (
|
|
252
|
+
Platform.OS === 'web' &&
|
|
253
|
+
width === 'auto' &&
|
|
254
|
+
constantIndicatorWidth == null
|
|
255
|
+
) {
|
|
256
|
+
const start = flattenedStyle?.start;
|
|
257
|
+
const translate =
|
|
258
|
+
direction === 'rtl' ? Animated.multiply(translateX, -1) : translateX;
|
|
259
|
+
const offset =
|
|
260
|
+
typeof start === 'number' ? Animated.add(translate, start) : translate;
|
|
261
|
+
|
|
155
262
|
styleList.push(
|
|
156
263
|
{ width: transform[1].scaleX },
|
|
157
|
-
{ left:
|
|
264
|
+
direction === 'rtl' ? { right: offset } : { left: offset }
|
|
158
265
|
);
|
|
159
266
|
} else {
|
|
160
267
|
styleList.push(
|
|
161
|
-
{
|
|
268
|
+
{
|
|
269
|
+
width:
|
|
270
|
+
width === 'auto'
|
|
271
|
+
? // if the indicator has a constant width, use it as is
|
|
272
|
+
// we don't need to scale it to match tab width
|
|
273
|
+
(constantIndicatorWidth ?? 1)
|
|
274
|
+
: getIndicatorWidth(
|
|
275
|
+
getTabWidth(navigationState.index),
|
|
276
|
+
width,
|
|
277
|
+
flattenedStyle,
|
|
278
|
+
direction
|
|
279
|
+
),
|
|
280
|
+
},
|
|
162
281
|
{ start: `${(100 / routes.length) * navigationState.index}%` },
|
|
163
282
|
{ transform }
|
|
164
283
|
);
|
|
165
284
|
}
|
|
166
285
|
|
|
286
|
+
let finalStyle;
|
|
287
|
+
|
|
288
|
+
if (hasCustomIndicatorWidth && style != null) {
|
|
289
|
+
const rest = { ...flattenedStyle };
|
|
290
|
+
|
|
291
|
+
delete rest.width;
|
|
292
|
+
|
|
293
|
+
if (isCentered) {
|
|
294
|
+
if (rest.margin === 'auto') {
|
|
295
|
+
delete rest.margin;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (rest.marginHorizontal === 'auto') {
|
|
299
|
+
delete rest.marginHorizontal;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
finalStyle = rest;
|
|
304
|
+
} else {
|
|
305
|
+
finalStyle = style;
|
|
306
|
+
}
|
|
307
|
+
|
|
167
308
|
return (
|
|
168
309
|
<Animated.View
|
|
169
310
|
style={[
|
|
170
311
|
styles.indicator,
|
|
171
312
|
styleList,
|
|
172
313
|
width === 'auto' ? { opacity: opacity } : null,
|
|
173
|
-
|
|
314
|
+
finalStyle,
|
|
174
315
|
]}
|
|
175
316
|
>
|
|
176
317
|
{children}
|