react-native-tab-view 5.0.0-alpha.8 → 5.0.0-alpha.9
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/PagerViewAdapter.native.js +29 -13
- package/lib/module/PagerViewAdapter.native.js.map +1 -1
- package/lib/module/PlatformPressable.js +1 -1
- package/lib/module/ScrollViewAdapter.js +46 -18
- package/lib/module/ScrollViewAdapter.js.map +1 -1
- package/lib/module/TabBar.js +260 -148
- package/lib/module/TabBar.js.map +1 -1
- package/lib/module/TabBarIndicator.js +282 -168
- package/lib/module/TabBarIndicator.js.map +1 -1
- package/lib/module/TabBarItem.js +94 -44
- package/lib/module/TabBarItem.js.map +1 -1
- package/lib/module/TabBarItemLabel.js +3 -2
- package/lib/module/TabBarItemLabel.js.map +1 -1
- package/lib/module/constants.js +10 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/useLayoutWidths.js +46 -0
- package/lib/module/useLayoutWidths.js.map +1 -0
- package/lib/typescript/src/PagerViewAdapter.native.d.ts +1 -1
- package/lib/typescript/src/PagerViewAdapter.native.d.ts.map +1 -1
- package/lib/typescript/src/ScrollViewAdapter.d.ts +1 -2
- package/lib/typescript/src/ScrollViewAdapter.d.ts.map +1 -1
- package/lib/typescript/src/TabBar.d.ts +2 -1
- package/lib/typescript/src/TabBar.d.ts.map +1 -1
- package/lib/typescript/src/TabBarIndicator.d.ts +4 -7
- package/lib/typescript/src/TabBarIndicator.d.ts.map +1 -1
- package/lib/typescript/src/TabBarItem.d.ts +10 -4
- package/lib/typescript/src/TabBarItem.d.ts.map +1 -1
- package/lib/typescript/src/TabBarItemLabel.d.ts +4 -3
- package/lib/typescript/src/TabBarItemLabel.d.ts.map +1 -1
- package/lib/typescript/src/constants.d.ts +8 -0
- package/lib/typescript/src/constants.d.ts.map +1 -0
- package/lib/typescript/src/useLayoutWidths.d.ts +2 -0
- package/lib/typescript/src/useLayoutWidths.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/PagerViewAdapter.native.tsx +36 -18
- package/src/PlatformPressable.tsx +1 -1
- package/src/ScrollViewAdapter.tsx +81 -21
- package/src/TabBar.tsx +386 -181
- package/src/TabBarIndicator.tsx +323 -248
- package/src/TabBarItem.tsx +102 -41
- package/src/TabBarItemLabel.tsx +5 -4
- package/src/constants.tsx +8 -0
- package/src/useLayoutWidths.tsx +51 -0
|
@@ -19,28 +19,43 @@ export function PagerViewAdapter({
|
|
|
19
19
|
children,
|
|
20
20
|
style,
|
|
21
21
|
animationEnabled,
|
|
22
|
+
layoutDirection = 'ltr',
|
|
22
23
|
...rest
|
|
23
24
|
}) {
|
|
24
25
|
const {
|
|
25
|
-
index
|
|
26
|
+
index,
|
|
27
|
+
routes
|
|
26
28
|
} = navigationState;
|
|
29
|
+
const isRTL = layoutDirection === 'rtl';
|
|
30
|
+
|
|
31
|
+
// iOS reports RTL pager offsets from the opposite end
|
|
32
|
+
// So we need to invert them to get the logical route index
|
|
33
|
+
const shouldInvertOffset = Platform.OS === 'ios' && isRTL;
|
|
34
|
+
const initialPosition = shouldInvertOffset ? routes.length - 1 - index : index;
|
|
27
35
|
const listeners = React.useRef(new Set()).current;
|
|
28
36
|
const pagerRef = React.useRef(null);
|
|
29
37
|
const indexRef = React.useRef(index);
|
|
30
38
|
const navigationStateRef = React.useRef(navigationState);
|
|
31
|
-
const position = useAnimatedValue(
|
|
39
|
+
const position = useAnimatedValue(initialPosition);
|
|
32
40
|
const offset = useAnimatedValue(0);
|
|
33
41
|
React.useEffect(() => {
|
|
34
42
|
navigationStateRef.current = navigationState;
|
|
35
43
|
});
|
|
36
|
-
const
|
|
37
|
-
|
|
44
|
+
const setReportedOffset = useLatestCallback(index => {
|
|
45
|
+
position.setValue(shouldInvertOffset ? routes.length - 1 - index : index);
|
|
46
|
+
offset.setValue(0);
|
|
47
|
+
});
|
|
48
|
+
const setPage = useLatestCallback(index => {
|
|
38
49
|
if (animationEnabled) {
|
|
39
50
|
pagerRef.current?.setPage(index);
|
|
40
51
|
} else {
|
|
41
52
|
pagerRef.current?.setPageWithoutAnimation(index);
|
|
42
|
-
|
|
53
|
+
setReportedOffset(index);
|
|
43
54
|
}
|
|
55
|
+
});
|
|
56
|
+
const jumpTo = useLatestCallback(key => {
|
|
57
|
+
const index = navigationStateRef.current.routes.findIndex(route => route.key === key);
|
|
58
|
+
setPage(index);
|
|
44
59
|
onIndexChange(index);
|
|
45
60
|
});
|
|
46
61
|
React.useEffect(() => {
|
|
@@ -48,14 +63,9 @@ export function PagerViewAdapter({
|
|
|
48
63
|
Keyboard.dismiss();
|
|
49
64
|
}
|
|
50
65
|
if (indexRef.current !== index) {
|
|
51
|
-
|
|
52
|
-
pagerRef.current?.setPage(index);
|
|
53
|
-
} else {
|
|
54
|
-
pagerRef.current?.setPageWithoutAnimation(index);
|
|
55
|
-
position.setValue(index);
|
|
56
|
-
}
|
|
66
|
+
setPage(index);
|
|
57
67
|
}
|
|
58
|
-
}, [keyboardDismissMode, index,
|
|
68
|
+
}, [keyboardDismissMode, index, setPage]);
|
|
59
69
|
const onPageScrollStateChanged = state => {
|
|
60
70
|
const {
|
|
61
71
|
pageScrollState
|
|
@@ -89,7 +99,12 @@ export function PagerViewAdapter({
|
|
|
89
99
|
listeners.delete(listener);
|
|
90
100
|
};
|
|
91
101
|
});
|
|
92
|
-
const memoizedPosition = React.useMemo(() =>
|
|
102
|
+
const memoizedPosition = React.useMemo(() => {
|
|
103
|
+
const value = Animated.add(position, offset);
|
|
104
|
+
|
|
105
|
+
// Convert the native RTL offset back to the logical route index
|
|
106
|
+
return shouldInvertOffset ? Animated.subtract(routes.length - 1, value) : value;
|
|
107
|
+
}, [offset, position, routes.length, shouldInvertOffset]);
|
|
93
108
|
return children({
|
|
94
109
|
position: memoizedPosition,
|
|
95
110
|
subscribe,
|
|
@@ -99,6 +114,7 @@ export function PagerViewAdapter({
|
|
|
99
114
|
ref: pagerRef,
|
|
100
115
|
style: [styles.container, style],
|
|
101
116
|
initialPage: index,
|
|
117
|
+
layoutDirection: layoutDirection,
|
|
102
118
|
keyboardDismissMode: keyboardDismissMode === 'auto' ? 'on-drag' : keyboardDismissMode,
|
|
103
119
|
onPageScroll: Animated.event([{
|
|
104
120
|
nativeEvent: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Animated","Keyboard","Platform","StyleSheet","ViewPager","useLatestCallback","useAnimatedValue","jsx","_jsx","AnimatedViewPager","createAnimatedComponent","useNativeDriver","OS","PagerViewAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onTabSelect","onSwipeStart","onSwipeEnd","children","style","animationEnabled","rest","index","listeners","useRef","Set","current","pagerRef","indexRef","navigationStateRef","position","offset","useEffect","
|
|
1
|
+
{"version":3,"names":["React","Animated","Keyboard","Platform","StyleSheet","ViewPager","useLatestCallback","useAnimatedValue","jsx","_jsx","AnimatedViewPager","createAnimatedComponent","useNativeDriver","OS","PagerViewAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onTabSelect","onSwipeStart","onSwipeEnd","children","style","animationEnabled","layoutDirection","rest","index","routes","isRTL","shouldInvertOffset","initialPosition","length","listeners","useRef","Set","current","pagerRef","indexRef","navigationStateRef","position","offset","useEffect","setReportedOffset","setValue","setPage","setPageWithoutAnimation","jumpTo","key","findIndex","route","dismiss","onPageScrollStateChanged","state","pageScrollState","nativeEvent","subscription","addListener","value","next","Math","ceil","floor","forEach","listener","type","removeListener","subscribe","add","delete","memoizedPosition","useMemo","subtract","render","ref","styles","container","initialPage","onPageScroll","event","onPageSelected","e","scrollEnabled","create","flex"],"sourceRoot":"../../src","sources":["PagerViewAdapter.native.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,7 +12,7 @@ const ANDROID_SUPPORTS_RIPPLE = Platform.OS === 'android' && Platform.Version >=
|
|
|
12
12
|
export function PlatformPressable({
|
|
13
13
|
disabled,
|
|
14
14
|
android_ripple,
|
|
15
|
-
pressColor = 'rgba(0, 0, 0, .
|
|
15
|
+
pressColor = 'rgba(0, 0, 0, .10)',
|
|
16
16
|
pressOpacity,
|
|
17
17
|
style,
|
|
18
18
|
onPress,
|
|
@@ -16,8 +16,7 @@ export function ScrollViewAdapter({
|
|
|
16
16
|
children,
|
|
17
17
|
style,
|
|
18
18
|
animationEnabled = true,
|
|
19
|
-
layoutDirection
|
|
20
|
-
// Not supported in ScrollViewAdapter
|
|
19
|
+
layoutDirection = 'ltr',
|
|
21
20
|
decelerationRate = 'fast',
|
|
22
21
|
bounces = false,
|
|
23
22
|
overScrollMode = 'never',
|
|
@@ -28,33 +27,54 @@ export function ScrollViewAdapter({
|
|
|
28
27
|
index,
|
|
29
28
|
routes
|
|
30
29
|
} = navigationState;
|
|
30
|
+
const isRTL = layoutDirection === 'rtl';
|
|
31
|
+
|
|
32
|
+
// Android reports RTL scroll offsets from the opposite end (0 at the max scroll offset)
|
|
33
|
+
// So we need to invert them to get the logical route index
|
|
34
|
+
const shouldInvertOffset = Platform.OS === 'android' && isRTL;
|
|
35
|
+
|
|
36
|
+
// Web uses negative scroll offsets in RTL
|
|
37
|
+
// So we need to negate them to get the logical route index
|
|
38
|
+
const shouldNegateOffset = Platform.OS === 'web' && isRTL;
|
|
31
39
|
const listeners = React.useRef(new Set()).current;
|
|
32
40
|
const scrollViewRef = React.useRef(null);
|
|
33
41
|
const containerRef = React.useRef(null);
|
|
34
42
|
const isInitialRef = React.useRef(true);
|
|
43
|
+
const getScrollOffsetForIndex = React.useCallback((index, width) => (shouldNegateOffset ? -index : index) * width, [shouldNegateOffset]);
|
|
44
|
+
const getReportedOffsetForIndex = React.useCallback((index, width) => shouldInvertOffset ? (routes.length - 1 - index) * width : getScrollOffsetForIndex(index, width), [getScrollOffsetForIndex, routes.length, shouldInvertOffset]);
|
|
45
|
+
const getIndexFromOffset = React.useCallback((x, width) => {
|
|
46
|
+
const offset = clamp(x / width, shouldNegateOffset ? -(routes.length - 1) : 0, routes.length - 1);
|
|
47
|
+
if (shouldInvertOffset) {
|
|
48
|
+
return routes.length - 1 - offset;
|
|
49
|
+
}
|
|
50
|
+
if (shouldNegateOffset) {
|
|
51
|
+
return -offset;
|
|
52
|
+
}
|
|
53
|
+
return offset;
|
|
54
|
+
}, [routes.length, shouldInvertOffset, shouldNegateOffset]);
|
|
35
55
|
const [layout, onLayout] = useMeasureLayout(containerRef, ({
|
|
36
56
|
width
|
|
37
57
|
}) => {
|
|
38
58
|
if (isInitialRef.current) {
|
|
39
|
-
const x = index
|
|
59
|
+
const x = getScrollOffsetForIndex(index, width);
|
|
40
60
|
setContentOffset({
|
|
41
61
|
x,
|
|
42
62
|
y: 0
|
|
43
63
|
});
|
|
44
|
-
offsetX.setValue(
|
|
64
|
+
offsetX.setValue(getReportedOffsetForIndex(index, width));
|
|
45
65
|
} else if (indexRef.current !== index) {
|
|
46
66
|
scrollToIndex(index);
|
|
47
67
|
}
|
|
48
68
|
isInitialRef.current = false;
|
|
49
69
|
});
|
|
50
70
|
const [contentOffset, setContentOffset] = React.useState(() => ({
|
|
51
|
-
x: index
|
|
71
|
+
x: getScrollOffsetForIndex(index, layout.width),
|
|
52
72
|
y: 0
|
|
53
73
|
}));
|
|
54
74
|
React.useEffect(() => {
|
|
55
|
-
// FIXME: contentOffset is not supported on Android
|
|
75
|
+
// FIXME: contentOffset is not supported on Android and Web
|
|
56
76
|
// So we manually scroll after state update
|
|
57
|
-
if (Platform.OS === 'android') {
|
|
77
|
+
if (Platform.OS === 'android' || Platform.OS === 'web') {
|
|
58
78
|
requestAnimationFrame(() => {
|
|
59
79
|
scrollViewRef.current?.scrollTo({
|
|
60
80
|
x: contentOffset.x,
|
|
@@ -62,11 +82,11 @@ export function ScrollViewAdapter({
|
|
|
62
82
|
});
|
|
63
83
|
});
|
|
64
84
|
}
|
|
65
|
-
}, [
|
|
85
|
+
}, [contentOffset.x]);
|
|
66
86
|
const [offsetX] = React.useState(() => new Animated.Value(contentOffset.x));
|
|
67
87
|
const scrollToIndex = useLatestCallback(index => {
|
|
68
88
|
scrollViewRef.current?.scrollTo({
|
|
69
|
-
x: index
|
|
89
|
+
x: getScrollOffsetForIndex(index, layout.width),
|
|
70
90
|
animated: animationEnabled
|
|
71
91
|
});
|
|
72
92
|
});
|
|
@@ -89,18 +109,26 @@ export function ScrollViewAdapter({
|
|
|
89
109
|
listeners.delete(listener);
|
|
90
110
|
};
|
|
91
111
|
});
|
|
92
|
-
const position = React.useMemo(() =>
|
|
112
|
+
const position = React.useMemo(() => {
|
|
113
|
+
if (!layout.width) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const value = Animated.divide(offsetX, layout.width);
|
|
117
|
+
|
|
118
|
+
// Convert platform scroll offsets back to logical route index
|
|
119
|
+
return shouldInvertOffset ? Animated.subtract(routes.length - 1, value) : shouldNegateOffset ? Animated.multiply(value, -1) : value;
|
|
120
|
+
}, [layout.width, offsetX, routes.length, shouldInvertOffset, shouldNegateOffset]);
|
|
93
121
|
const indexRef = React.useRef(index);
|
|
94
122
|
const timerRef = React.useRef(undefined);
|
|
95
123
|
const onScrollEnd = x => {
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
98
|
-
indexRef.current =
|
|
99
|
-
if (
|
|
100
|
-
onIndexChange(
|
|
124
|
+
const nextIndex = getIndexFromOffset(x, layout.width);
|
|
125
|
+
if (nextIndex % 1 === 0) {
|
|
126
|
+
indexRef.current = nextIndex;
|
|
127
|
+
if (nextIndex !== index) {
|
|
128
|
+
onIndexChange(nextIndex);
|
|
101
129
|
}
|
|
102
130
|
onTabSelect?.({
|
|
103
|
-
index:
|
|
131
|
+
index: nextIndex
|
|
104
132
|
});
|
|
105
133
|
}
|
|
106
134
|
};
|
|
@@ -111,12 +139,12 @@ export function ScrollViewAdapter({
|
|
|
111
139
|
}
|
|
112
140
|
}
|
|
113
141
|
}], {
|
|
114
|
-
useNativeDriver:
|
|
142
|
+
useNativeDriver: Platform.OS !== 'web',
|
|
115
143
|
listener: event => {
|
|
116
144
|
const {
|
|
117
145
|
x
|
|
118
146
|
} = event.nativeEvent.contentOffset;
|
|
119
|
-
const value =
|
|
147
|
+
const value = getIndexFromOffset(x, layout.width);
|
|
120
148
|
|
|
121
149
|
// The offset will overlap the current and the adjacent page
|
|
122
150
|
// So we need to get the index of the adjacent page
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Animated","Keyboard","Platform","StyleSheet","View","useLatestCallback","useMeasureLayout","jsx","_jsx","ScrollViewAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onTabSelect","onSwipeStart","onSwipeEnd","children","style","animationEnabled","layoutDirection","
|
|
1
|
+
{"version":3,"names":["React","Animated","Keyboard","Platform","StyleSheet","View","useLatestCallback","useMeasureLayout","jsx","_jsx","ScrollViewAdapter","keyboardDismissMode","swipeEnabled","navigationState","onIndexChange","onTabSelect","onSwipeStart","onSwipeEnd","children","style","animationEnabled","layoutDirection","decelerationRate","bounces","overScrollMode","keyboardShouldPersistTaps","rest","index","routes","isRTL","shouldInvertOffset","OS","shouldNegateOffset","listeners","useRef","Set","current","scrollViewRef","containerRef","isInitialRef","getScrollOffsetForIndex","useCallback","width","getReportedOffsetForIndex","length","getIndexFromOffset","x","offset","clamp","layout","onLayout","setContentOffset","y","offsetX","setValue","indexRef","scrollToIndex","contentOffset","useState","useEffect","requestAnimationFrame","scrollTo","animated","Value","jumpTo","key","i","findIndex","route","dismiss","handleSwipeStart","handleSwipeEnd","subscribe","listener","add","delete","position","useMemo","value","divide","subtract","multiply","timerRef","undefined","onScrollEnd","nextIndex","onScroll","event","nativeEvent","useNativeDriver","next","Math","ceil","floor","find","forEach","type","clearTimeout","setTimeout","onMomentumScrollEnd","render","ref","styles","container","ScrollView","horizontal","pagingEnabled","directionalLockEnabled","scrollEnabled","Boolean","scrollToOverflowEnabled","scrollsToTop","automaticallyAdjustContentInsets","showsHorizontalScrollIndicator","scrollEventThrottle","onScrollBeginDrag","onScrollEndDrag","contentContainerStyle","scroll","map","child","focused","filter","min","max","create","flex","overflow"],"sourceRoot":"../../src","sources":["ScrollViewAdapter.tsx"],"mappings":"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","ignoreList":[]}
|