react-navigation-reanimated-top-tabs 0.2.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/LICENSE +20 -0
- package/README.md +26 -0
- package/lib/commonjs/components/ReanimatedTopTab/AnimationHelper.js +76 -0
- package/lib/commonjs/components/ReanimatedTopTab/AnimationHelper.js.map +1 -0
- package/lib/commonjs/components/ReanimatedTopTab/ReanimatedTabView.js +125 -0
- package/lib/commonjs/components/ReanimatedTopTab/ReanimatedTabView.js.map +1 -0
- package/lib/commonjs/components/ReanimatedTopTab/types.js +8 -0
- package/lib/commonjs/components/ReanimatedTopTab/types.js.map +1 -0
- package/lib/commonjs/components/elements/TabBarBaseComponent.js +71 -0
- package/lib/commonjs/components/elements/TabBarBaseComponent.js.map +1 -0
- package/lib/commonjs/components/elements/TabBarLabelBaseComponent.js +48 -0
- package/lib/commonjs/components/elements/TabBarLabelBaseComponent.js.map +1 -0
- package/lib/commonjs/components/wrappers/GestureWrapper.js +100 -0
- package/lib/commonjs/components/wrappers/GestureWrapper.js.map +1 -0
- package/lib/commonjs/components/wrappers/ScreenWrapper.js +34 -0
- package/lib/commonjs/components/wrappers/ScreenWrapper.js.map +1 -0
- package/lib/commonjs/components/wrappers/ScrollView.js +58 -0
- package/lib/commonjs/components/wrappers/ScrollView.js.map +1 -0
- package/lib/commonjs/context/TopTabContext.hooks.js +48 -0
- package/lib/commonjs/context/TopTabContext.hooks.js.map +1 -0
- package/lib/commonjs/context/TopTabContext.js +86 -0
- package/lib/commonjs/context/TopTabContext.js.map +1 -0
- package/lib/commonjs/hooks/TopTab.hooks.js +120 -0
- package/lib/commonjs/hooks/TopTab.hooks.js.map +1 -0
- package/lib/commonjs/index.js +92 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/navigator/createReanimatedTopTabNavigator.js +141 -0
- package/lib/commonjs/navigator/createReanimatedTopTabNavigator.js.map +1 -0
- package/lib/commonjs/types.js +8 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/components/ReanimatedTopTab/AnimationHelper.js +72 -0
- package/lib/module/components/ReanimatedTopTab/AnimationHelper.js.map +1 -0
- package/lib/module/components/ReanimatedTopTab/ReanimatedTabView.js +119 -0
- package/lib/module/components/ReanimatedTopTab/ReanimatedTabView.js.map +1 -0
- package/lib/module/components/ReanimatedTopTab/types.js +4 -0
- package/lib/module/components/ReanimatedTopTab/types.js.map +1 -0
- package/lib/module/components/elements/TabBarBaseComponent.js +64 -0
- package/lib/module/components/elements/TabBarBaseComponent.js.map +1 -0
- package/lib/module/components/elements/TabBarLabelBaseComponent.js +41 -0
- package/lib/module/components/elements/TabBarLabelBaseComponent.js.map +1 -0
- package/lib/module/components/wrappers/GestureWrapper.js +94 -0
- package/lib/module/components/wrappers/GestureWrapper.js.map +1 -0
- package/lib/module/components/wrappers/ScreenWrapper.js +28 -0
- package/lib/module/components/wrappers/ScreenWrapper.js.map +1 -0
- package/lib/module/components/wrappers/ScrollView.js +52 -0
- package/lib/module/components/wrappers/ScrollView.js.map +1 -0
- package/lib/module/context/TopTabContext.hooks.js +44 -0
- package/lib/module/context/TopTabContext.hooks.js.map +1 -0
- package/lib/module/context/TopTabContext.js +82 -0
- package/lib/module/context/TopTabContext.js.map +1 -0
- package/lib/module/hooks/TopTab.hooks.js +110 -0
- package/lib/module/hooks/TopTab.hooks.js.map +1 -0
- package/lib/module/index.js +11 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/navigator/createReanimatedTopTabNavigator.js +134 -0
- package/lib/module/navigator/createReanimatedTopTabNavigator.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/components/ReanimatedTopTab/AnimationHelper.d.ts +11 -0
- package/lib/typescript/commonjs/src/components/ReanimatedTopTab/AnimationHelper.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts +14 -0
- package/lib/typescript/commonjs/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/ReanimatedTopTab/types.d.ts +30 -0
- package/lib/typescript/commonjs/src/components/ReanimatedTopTab/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/elements/TabBarBaseComponent.d.ts +24 -0
- package/lib/typescript/commonjs/src/components/elements/TabBarBaseComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/elements/TabBarLabelBaseComponent.d.ts +8 -0
- package/lib/typescript/commonjs/src/components/elements/TabBarLabelBaseComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/wrappers/GestureWrapper.d.ts +2 -0
- package/lib/typescript/commonjs/src/components/wrappers/GestureWrapper.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/wrappers/ScreenWrapper.d.ts +6 -0
- package/lib/typescript/commonjs/src/components/wrappers/ScreenWrapper.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/components/wrappers/ScrollView.d.ts +6 -0
- package/lib/typescript/commonjs/src/components/wrappers/ScrollView.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/context/TopTabContext.d.ts +4 -0
- package/lib/typescript/commonjs/src/context/TopTabContext.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/context/TopTabContext.hooks.d.ts +5 -0
- package/lib/typescript/commonjs/src/context/TopTabContext.hooks.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/TopTab.hooks.d.ts +33 -0
- package/lib/typescript/commonjs/src/hooks/TopTab.hooks.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +10 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/navigator/createReanimatedTopTabNavigator.d.ts +4 -0
- package/lib/typescript/commonjs/src/navigator/createReanimatedTopTabNavigator.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types.d.ts +56 -0
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/components/ReanimatedTopTab/AnimationHelper.d.ts +11 -0
- package/lib/typescript/module/src/components/ReanimatedTopTab/AnimationHelper.d.ts.map +1 -0
- package/lib/typescript/module/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts +14 -0
- package/lib/typescript/module/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts.map +1 -0
- package/lib/typescript/module/src/components/ReanimatedTopTab/types.d.ts +30 -0
- package/lib/typescript/module/src/components/ReanimatedTopTab/types.d.ts.map +1 -0
- package/lib/typescript/module/src/components/elements/TabBarBaseComponent.d.ts +24 -0
- package/lib/typescript/module/src/components/elements/TabBarBaseComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/components/elements/TabBarLabelBaseComponent.d.ts +8 -0
- package/lib/typescript/module/src/components/elements/TabBarLabelBaseComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/components/wrappers/GestureWrapper.d.ts +2 -0
- package/lib/typescript/module/src/components/wrappers/GestureWrapper.d.ts.map +1 -0
- package/lib/typescript/module/src/components/wrappers/ScreenWrapper.d.ts +6 -0
- package/lib/typescript/module/src/components/wrappers/ScreenWrapper.d.ts.map +1 -0
- package/lib/typescript/module/src/components/wrappers/ScrollView.d.ts +6 -0
- package/lib/typescript/module/src/components/wrappers/ScrollView.d.ts.map +1 -0
- package/lib/typescript/module/src/context/TopTabContext.d.ts +4 -0
- package/lib/typescript/module/src/context/TopTabContext.d.ts.map +1 -0
- package/lib/typescript/module/src/context/TopTabContext.hooks.d.ts +5 -0
- package/lib/typescript/module/src/context/TopTabContext.hooks.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/TopTab.hooks.d.ts +33 -0
- package/lib/typescript/module/src/hooks/TopTab.hooks.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +10 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/navigator/createReanimatedTopTabNavigator.d.ts +4 -0
- package/lib/typescript/module/src/navigator/createReanimatedTopTabNavigator.d.ts.map +1 -0
- package/lib/typescript/module/src/types.d.ts +56 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -0
- package/package.json +204 -0
- package/src/components/ReanimatedTopTab/AnimationHelper.ts +94 -0
- package/src/components/ReanimatedTopTab/ReanimatedTabView.tsx +200 -0
- package/src/components/ReanimatedTopTab/types.ts +29 -0
- package/src/components/elements/TabBarBaseComponent.tsx +99 -0
- package/src/components/elements/TabBarLabelBaseComponent.tsx +63 -0
- package/src/components/wrappers/GestureWrapper.tsx +135 -0
- package/src/components/wrappers/ScreenWrapper.tsx +27 -0
- package/src/components/wrappers/ScrollView.tsx +59 -0
- package/src/context/TopTabContext.hooks.ts +55 -0
- package/src/context/TopTabContext.tsx +115 -0
- package/src/hooks/TopTab.hooks.ts +112 -0
- package/src/index.tsx +15 -0
- package/src/navigator/createReanimatedTopTabNavigator.tsx +192 -0
- package/src/types.ts +63 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
|
|
4
|
+
import { StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
5
|
+
import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
6
|
+
import Animated, { Extrapolation, interpolate, LinearTransition, runOnJS, useAnimatedStyle, useDerivedValue, useSharedValue } from 'react-native-reanimated';
|
|
7
|
+
import { AnimationHelper } from "./AnimationHelper.js";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
export const ReanimatedTabView = /*#__PURE__*/React.memo(({
|
|
10
|
+
LazyPlaceholder = () => null,
|
|
11
|
+
lazy = false,
|
|
12
|
+
navigationState,
|
|
13
|
+
onIndexChange,
|
|
14
|
+
percentageTrigger = 0.4,
|
|
15
|
+
positionInterpolation,
|
|
16
|
+
renderScene,
|
|
17
|
+
renderTabBar
|
|
18
|
+
}) => {
|
|
19
|
+
const {
|
|
20
|
+
width
|
|
21
|
+
} = useWindowDimensions();
|
|
22
|
+
const loadedScreens = useRef([navigationState.routes[navigationState.index]]);
|
|
23
|
+
// const width = 160;
|
|
24
|
+
const scrollPosition = useSharedValue(navigationState.index);
|
|
25
|
+
const position = useDerivedValue(() => {
|
|
26
|
+
if (!positionInterpolation) {
|
|
27
|
+
return -scrollPosition.value;
|
|
28
|
+
}
|
|
29
|
+
return interpolate(-scrollPosition.value, positionInterpolation.input, positionInterpolation.output, Extrapolation.CLAMP);
|
|
30
|
+
}, [positionInterpolation]);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
scrollPosition.value = AnimationHelper.animation(-navigationState.index * width);
|
|
33
|
+
}, [navigationState.index, scrollPosition, width]);
|
|
34
|
+
const minimumValueToChangeView = useMemo(() => width * percentageTrigger, [percentageTrigger, width]);
|
|
35
|
+
const panGesture = React.useMemo(() => Gesture.Pan().failOffsetY(-10).failOffsetY(10).activeOffsetX([-20, 20]).onChange(event => {
|
|
36
|
+
scrollPosition.value = AnimationHelper.onChange(event, scrollPosition.value, width, navigationState);
|
|
37
|
+
}).onEnd(event => {
|
|
38
|
+
const state = AnimationHelper.onEnd(event, minimumValueToChangeView, width, navigationState);
|
|
39
|
+
scrollPosition.value = AnimationHelper.animation(state.value);
|
|
40
|
+
runOnJS(onIndexChange)(state.index);
|
|
41
|
+
}), [minimumValueToChangeView, navigationState, onIndexChange, scrollPosition, width]);
|
|
42
|
+
const scrollPositionStyle = useAnimatedStyle(() => ({
|
|
43
|
+
transform: [{
|
|
44
|
+
translateX: interpolate(scrollPosition.value, [-width * (navigationState.routes.length - 1), 0], [-width * (navigationState.routes.length - 1), 0], Extrapolation.CLAMP)
|
|
45
|
+
}]
|
|
46
|
+
}));
|
|
47
|
+
const jumpTo = React.useCallback(key => {
|
|
48
|
+
const newIndex = navigationState.routes.findIndex(r => r.key === key);
|
|
49
|
+
if (newIndex === -1) {
|
|
50
|
+
// throw
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
scrollPosition.value = AnimationHelper.animation(-newIndex * width);
|
|
54
|
+
onIndexChange(newIndex);
|
|
55
|
+
}, [navigationState.routes, onIndexChange, scrollPosition, width]);
|
|
56
|
+
const chooseRender = useCallback((params, useRenderScene = true) => /*#__PURE__*/_jsx(View, {
|
|
57
|
+
style: {
|
|
58
|
+
width
|
|
59
|
+
},
|
|
60
|
+
children: useRenderScene ? renderScene(params) : LazyPlaceholder()
|
|
61
|
+
}, `RNNTabView_${params.route.key}`), [LazyPlaceholder, renderScene, width]);
|
|
62
|
+
const Routes = useMemo(() => navigationState.routes.map((route, index) => {
|
|
63
|
+
if (!lazy) {
|
|
64
|
+
return chooseRender({
|
|
65
|
+
jumpTo,
|
|
66
|
+
route
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const screen = loadedScreens.current.find(loadedScreen => loadedScreen?.key === route.key);
|
|
70
|
+
if (screen !== undefined) {
|
|
71
|
+
return chooseRender({
|
|
72
|
+
jumpTo,
|
|
73
|
+
route
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (navigationState.index === index) {
|
|
77
|
+
loadedScreens.current.push(route);
|
|
78
|
+
return chooseRender({
|
|
79
|
+
jumpTo,
|
|
80
|
+
route
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return chooseRender({
|
|
84
|
+
jumpTo,
|
|
85
|
+
route
|
|
86
|
+
}, false);
|
|
87
|
+
}), [navigationState.routes, navigationState.index, lazy, chooseRender, jumpTo]);
|
|
88
|
+
return /*#__PURE__*/_jsx(GestureHandlerRootView, {
|
|
89
|
+
style: defaultStyles.flex,
|
|
90
|
+
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
91
|
+
layout: LinearTransition,
|
|
92
|
+
style: defaultStyles.flex,
|
|
93
|
+
children: [renderTabBar ? renderTabBar({
|
|
94
|
+
navigationState,
|
|
95
|
+
position
|
|
96
|
+
}) : null, /*#__PURE__*/_jsx(GestureDetector, {
|
|
97
|
+
gesture: panGesture,
|
|
98
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
99
|
+
layout: LinearTransition,
|
|
100
|
+
style: [scrollPositionStyle, defaultStyles.flex, {
|
|
101
|
+
width: width * navigationState.routes.length - 1
|
|
102
|
+
}, defaultStyles.viewsContainer],
|
|
103
|
+
children: Routes
|
|
104
|
+
})
|
|
105
|
+
})]
|
|
106
|
+
})
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
//NOTE: purposely use of StyleSheet - simplify migration to library
|
|
111
|
+
const defaultStyles = StyleSheet.create({
|
|
112
|
+
flex: {
|
|
113
|
+
flex: 1
|
|
114
|
+
},
|
|
115
|
+
viewsContainer: {
|
|
116
|
+
flexDirection: 'row'
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=ReanimatedTabView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","StyleSheet","useWindowDimensions","View","Gesture","GestureDetector","GestureHandlerRootView","Animated","Extrapolation","interpolate","LinearTransition","runOnJS","useAnimatedStyle","useDerivedValue","useSharedValue","AnimationHelper","jsx","_jsx","jsxs","_jsxs","ReanimatedTabView","memo","LazyPlaceholder","lazy","navigationState","onIndexChange","percentageTrigger","positionInterpolation","renderScene","renderTabBar","width","loadedScreens","routes","index","scrollPosition","position","value","input","output","CLAMP","animation","minimumValueToChangeView","panGesture","Pan","failOffsetY","activeOffsetX","onChange","event","onEnd","state","scrollPositionStyle","transform","translateX","length","jumpTo","key","newIndex","findIndex","r","chooseRender","params","useRenderScene","style","children","route","Routes","map","screen","current","find","loadedScreen","undefined","push","defaultStyles","flex","layout","gesture","viewsContainer","create","flexDirection"],"sourceRoot":"../../../../src","sources":["components/ReanimatedTopTab/ReanimatedTabView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ReanimatedTabViewTypes"],"sourceRoot":"../../../../src","sources":["components/ReanimatedTopTab/types.ts"],"mappings":";;WAGiBA,sBAAsB","ignoreList":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Pressable, StyleSheet, Text, useWindowDimensions } from 'react-native';
|
|
5
|
+
import Reanimated, { interpolate, useAnimatedReaction } from 'react-native-reanimated';
|
|
6
|
+
import { useTabContext } from "../../hooks/TopTab.hooks.js";
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
export const TabBarBaseComponent = ({
|
|
9
|
+
children,
|
|
10
|
+
navigate,
|
|
11
|
+
navigationState,
|
|
12
|
+
position,
|
|
13
|
+
style
|
|
14
|
+
}) => {
|
|
15
|
+
const layout = useWindowDimensions();
|
|
16
|
+
const {
|
|
17
|
+
topTabHeight,
|
|
18
|
+
transformationX
|
|
19
|
+
} = useTabContext();
|
|
20
|
+
|
|
21
|
+
//Assign interpolated offsetX to transformationX
|
|
22
|
+
useAnimatedReaction(() => interpolate(position.value, navigationState.routes.map((_, i) => i * layout.width), navigationState.routes.map((_, i) => i), 'clamp'), value => {
|
|
23
|
+
transformationX.value = value;
|
|
24
|
+
}, [navigationState.routes]);
|
|
25
|
+
return /*#__PURE__*/_jsxs(Reanimated.View, {
|
|
26
|
+
onLayout: ({
|
|
27
|
+
nativeEvent
|
|
28
|
+
}) => {
|
|
29
|
+
topTabHeight.value = nativeEvent.layout.height;
|
|
30
|
+
},
|
|
31
|
+
children: [/*#__PURE__*/_jsx(Reanimated.View, {
|
|
32
|
+
style: [styles.wrapper, style],
|
|
33
|
+
children: navigationState.routes.map(route => /*#__PURE__*/_jsx(Pressable, {
|
|
34
|
+
style: styles.labelWrapper,
|
|
35
|
+
onPress: () => {
|
|
36
|
+
navigate(route);
|
|
37
|
+
},
|
|
38
|
+
children: route.tabBarLabel ? route.tabBarLabel() : /*#__PURE__*/_jsx(Text, {
|
|
39
|
+
style: {
|
|
40
|
+
color: 'red'
|
|
41
|
+
},
|
|
42
|
+
children: route.title
|
|
43
|
+
})
|
|
44
|
+
}, route.key))
|
|
45
|
+
}), children]
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Static styles
|
|
50
|
+
const styles = StyleSheet.create({
|
|
51
|
+
labelWrapper: {
|
|
52
|
+
flex: 1,
|
|
53
|
+
alignItems: 'center',
|
|
54
|
+
justifyContent: 'center'
|
|
55
|
+
},
|
|
56
|
+
wrapper: {
|
|
57
|
+
width: '100%',
|
|
58
|
+
flexDirection: 'row',
|
|
59
|
+
backgroundColor: 'white',
|
|
60
|
+
paddingVertical: 8,
|
|
61
|
+
height: 50
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=TabBarBaseComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Pressable","StyleSheet","Text","useWindowDimensions","Reanimated","interpolate","useAnimatedReaction","useTabContext","jsx","_jsx","jsxs","_jsxs","TabBarBaseComponent","children","navigate","navigationState","position","style","layout","topTabHeight","transformationX","value","routes","map","_","i","width","View","onLayout","nativeEvent","height","styles","wrapper","route","labelWrapper","onPress","tabBarLabel","color","title","key","create","flex","alignItems","justifyContent","flexDirection","backgroundColor","paddingVertical"],"sourceRoot":"../../../../src","sources":["components/elements/TabBarBaseComponent.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,SAAS,EAAEC,UAAU,EAAEC,IAAI,EAAEC,mBAAmB,QAAQ,cAAc;AAC/E,OAAOC,UAAU,IAEfC,WAAW,EAEXC,mBAAmB,QACd,yBAAyB;AAChC,SAASC,aAAa,QAAQ,6BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAsBzD,OAAO,MAAMC,mBAAmB,GAAGA,CAAC;EAClCC,QAAQ;EACRC,QAAQ;EACRC,eAAe;EACfC,QAAQ;EACRC;AACW,CAAC,KAAK;EACjB,MAAMC,MAAM,GAAGf,mBAAmB,CAAC,CAAC;EAEpC,MAAM;IAAEgB,YAAY;IAAEC;EAAgB,CAAC,GAAGb,aAAa,CAAC,CAAC;;EAEzD;EACAD,mBAAmB,CACjB,MACED,WAAW,CACTW,QAAQ,CAACK,KAAK,EACdN,eAAe,CAACO,MAAM,CAACC,GAAG,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,GAAGP,MAAM,CAACQ,KAAK,CAAC,EACtDX,eAAe,CAACO,MAAM,CAACC,GAAG,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAAC,EACvC,OACF,CAAC,EACFJ,KAAK,IAAK;IACTD,eAAe,CAACC,KAAK,GAAGA,KAAK;EAC/B,CAAC,EACD,CAACN,eAAe,CAACO,MAAM,CACzB,CAAC;EAED,oBACEX,KAAA,CAACP,UAAU,CAACuB,IAAI;IACdC,QAAQ,EAAEA,CAAC;MAAEC;IAAY,CAAC,KAAK;MAC7BV,YAAY,CAACE,KAAK,GAAGQ,WAAW,CAACX,MAAM,CAACY,MAAM;IAChD,CAAE;IAAAjB,QAAA,gBAEFJ,IAAA,CAACL,UAAU,CAACuB,IAAI;MAACV,KAAK,EAAE,CAACc,MAAM,CAACC,OAAO,EAAEf,KAAK,CAAE;MAAAJ,QAAA,EAC7CE,eAAe,CAACO,MAAM,CAACC,GAAG,CAAEU,KAAK,iBAChCxB,IAAA,CAACT,SAAS;QACRiB,KAAK,EAAEc,MAAM,CAACG,YAAa;QAE3BC,OAAO,EAAEA,CAAA,KAAM;UACbrB,QAAQ,CAACmB,KAAK,CAAC;QACjB,CAAE;QAAApB,QAAA,EAEDoB,KAAK,CAACG,WAAW,GAChBH,KAAK,CAACG,WAAW,CAAC,CAAC,gBAEnB3B,IAAA,CAACP,IAAI;UAACe,KAAK,EAAE;YAAEoB,KAAK,EAAE;UAAM,CAAE;UAAAxB,QAAA,EAAEoB,KAAK,CAACK;QAAK,CAAO;MACnD,GATIL,KAAK,CAACM,GAUF,CACZ;IAAC,CACa,CAAC,EACjB1B,QAAQ;EAAA,CACM,CAAC;AAEtB,CAAC;;AAED;AACA,MAAMkB,MAAM,GAAG9B,UAAU,CAACuC,MAAM,CAAC;EAC/BN,YAAY,EAAE;IACZO,IAAI,EAAE,CAAC;IACPC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDX,OAAO,EAAE;IACPN,KAAK,EAAE,MAAM;IACbkB,aAAa,EAAE,KAAK;IACpBC,eAAe,EAAE,OAAO;IACxBC,eAAe,EAAE,CAAC;IAClBhB,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { StyleSheet } from 'react-native';
|
|
4
|
+
import Reanimated, { interpolateColor, useAnimatedStyle } from 'react-native-reanimated';
|
|
5
|
+
import { useTabContext } from "../../hooks/TopTab.hooks.js";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export const TabBarLabelBaseComponent = ({
|
|
8
|
+
index,
|
|
9
|
+
...props
|
|
10
|
+
}) => {
|
|
11
|
+
const {
|
|
12
|
+
transformationX
|
|
13
|
+
} = useTabContext();
|
|
14
|
+
const style = useAnimatedStyle(() => ({
|
|
15
|
+
backgroundColor: interpolateColor(transformationX.value, [index - 1, index, index + 1], ['transparent', 'blue', 'transparent'])
|
|
16
|
+
}), []);
|
|
17
|
+
const textStyle = useAnimatedStyle(() => ({
|
|
18
|
+
color: interpolateColor(transformationX.value, [index - 1, index, index + 1], ['black', 'white', 'black'])
|
|
19
|
+
}), []);
|
|
20
|
+
return /*#__PURE__*/_jsx(Reanimated.View, {
|
|
21
|
+
style: [style, styles.wrapper],
|
|
22
|
+
children: /*#__PURE__*/_jsx(Reanimated.Text, {
|
|
23
|
+
style: [textStyle, styles.text],
|
|
24
|
+
children: props.title
|
|
25
|
+
})
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
const styles = StyleSheet.create({
|
|
29
|
+
text: {
|
|
30
|
+
fontWeight: 'bold',
|
|
31
|
+
textTransform: 'uppercase'
|
|
32
|
+
},
|
|
33
|
+
wrapper: {
|
|
34
|
+
borderRadius: 10,
|
|
35
|
+
height: 35,
|
|
36
|
+
justifyContent: 'center',
|
|
37
|
+
paddingHorizontal: 16,
|
|
38
|
+
paddingVertical: 8
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=TabBarLabelBaseComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","Reanimated","interpolateColor","useAnimatedStyle","useTabContext","jsx","_jsx","TabBarLabelBaseComponent","index","props","transformationX","style","backgroundColor","value","textStyle","color","View","styles","wrapper","children","Text","text","title","create","fontWeight","textTransform","borderRadius","height","justifyContent","paddingHorizontal","paddingVertical"],"sourceRoot":"../../../../src","sources":["components/elements/TabBarLabelBaseComponent.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,OAAOC,UAAU,IACfC,gBAAgB,EAChBC,gBAAgB,QACX,yBAAyB;AAChC,SAASC,aAAa,QAAQ,6BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQzD,OAAO,MAAMC,wBAAwB,GAAGA,CAAC;EACvCC,KAAK;EACL,GAAGC;AACa,CAAC,KAAK;EACtB,MAAM;IAAEC;EAAgB,CAAC,GAAGN,aAAa,CAAC,CAAC;EAE3C,MAAMO,KAAK,GAAGR,gBAAgB,CAC5B,OAAO;IACLS,eAAe,EAAEV,gBAAgB,CAC/BQ,eAAe,CAACG,KAAK,EACrB,CAACL,KAAK,GAAG,CAAC,EAAEA,KAAK,EAAEA,KAAK,GAAG,CAAC,CAAC,EAC7B,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,CACvC;EACF,CAAC,CAAC,EACF,EACF,CAAC;EAED,MAAMM,SAAS,GAAGX,gBAAgB,CAChC,OAAO;IACLY,KAAK,EAAEb,gBAAgB,CACrBQ,eAAe,CAACG,KAAK,EACrB,CAACL,KAAK,GAAG,CAAC,EAAEA,KAAK,EAAEA,KAAK,GAAG,CAAC,CAAC,EAC7B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAC5B;EACF,CAAC,CAAC,EACF,EACF,CAAC;EAED,oBACEF,IAAA,CAACL,UAAU,CAACe,IAAI;IAACL,KAAK,EAAE,CAACA,KAAK,EAAEM,MAAM,CAACC,OAAO,CAAE;IAAAC,QAAA,eAC9Cb,IAAA,CAACL,UAAU,CAACmB,IAAI;MAACT,KAAK,EAAE,CAACG,SAAS,EAAEG,MAAM,CAACI,IAAI,CAAE;MAAAF,QAAA,EAC9CV,KAAK,CAACa;IAAK,CACG;EAAC,CACH,CAAC;AAEtB,CAAC;AAED,MAAML,MAAM,GAAGjB,UAAU,CAACuB,MAAM,CAAC;EAC/BF,IAAI,EAAE;IACJG,UAAU,EAAE,MAAM;IAClBC,aAAa,EAAE;EACjB,CAAC;EACDP,OAAO,EAAE;IACPQ,YAAY,EAAE,EAAE;IAChBC,MAAM,EAAE,EAAE;IACVC,cAAc,EAAE,QAAQ;IACxBC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { Gesture, GestureDetector } from 'react-native-gesture-handler';
|
|
5
|
+
import Reanimated, { Easing, interpolate, runOnJS, useAnimatedReaction, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
|
|
6
|
+
import { useTabContext } from "../../hooks/TopTab.hooks.js";
|
|
7
|
+
|
|
8
|
+
//TODO: types
|
|
9
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
+
export const GestureWrapper = ({
|
|
11
|
+
children
|
|
12
|
+
}) => {
|
|
13
|
+
const {
|
|
14
|
+
currentScreenIndex,
|
|
15
|
+
currentYPosition,
|
|
16
|
+
gestureEnabled,
|
|
17
|
+
headerHeight,
|
|
18
|
+
screenProperties,
|
|
19
|
+
transformationY,
|
|
20
|
+
screenRefs
|
|
21
|
+
} = useTabContext();
|
|
22
|
+
const movedY = useSharedValue(0);
|
|
23
|
+
const gestureRef = useRef(Gesture.Pan());
|
|
24
|
+
const withTimingConfig = {
|
|
25
|
+
duration: 300,
|
|
26
|
+
easing: Easing.bezier(0.25, 0.1, 0.25, 1)
|
|
27
|
+
};
|
|
28
|
+
const [_gestureEnabled, setGestureEnabled] = useState(gestureEnabled.value);
|
|
29
|
+
useAnimatedReaction(() => gestureEnabled.value, nextValue => {
|
|
30
|
+
runOnJS(setGestureEnabled)(nextValue);
|
|
31
|
+
}, []);
|
|
32
|
+
const _scrollTo = (index, value = 0) => {
|
|
33
|
+
const {
|
|
34
|
+
scrollTo
|
|
35
|
+
} = Object.values(screenRefs.refs.current)[index]?.current ?? {
|
|
36
|
+
scrollTo: () => null
|
|
37
|
+
};
|
|
38
|
+
scrollTo({
|
|
39
|
+
y: value,
|
|
40
|
+
animated: false
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
const gesture = useMemo(() => Gesture.Pan().activeOffsetY([-10, 10]).onTouchesMove(({
|
|
44
|
+
state
|
|
45
|
+
}, stateManager) => {
|
|
46
|
+
const current = Object.values(screenProperties).map(({
|
|
47
|
+
scrollY
|
|
48
|
+
}) => scrollY)[currentScreenIndex.value];
|
|
49
|
+
if ((current?.value ?? 0) > 0 && state !== 4 && state !== 3) {
|
|
50
|
+
stateManager.fail();
|
|
51
|
+
}
|
|
52
|
+
}).onUpdate(({
|
|
53
|
+
translationY
|
|
54
|
+
}) => {
|
|
55
|
+
if (translationY <= -headerHeight.value) {
|
|
56
|
+
runOnJS(_scrollTo)(currentScreenIndex.value, Math.abs(translationY + headerHeight.value));
|
|
57
|
+
}
|
|
58
|
+
transformationY.value = currentYPosition.value + translationY - movedY.value;
|
|
59
|
+
}).onEnd(({
|
|
60
|
+
translationY,
|
|
61
|
+
velocityY
|
|
62
|
+
}) => {
|
|
63
|
+
const gestureValue = translationY + velocityY * 0.2;
|
|
64
|
+
const changeOffset = 0.2 * headerHeight.value;
|
|
65
|
+
if (gestureValue < -changeOffset && transformationY.value < 0) {
|
|
66
|
+
transformationY.value = withTiming(-headerHeight.value, withTimingConfig);
|
|
67
|
+
currentYPosition.value = -headerHeight.value;
|
|
68
|
+
} else if (gestureValue > changeOffset) {
|
|
69
|
+
const destination = 0;
|
|
70
|
+
transformationY.value = withTiming(destination, withTimingConfig);
|
|
71
|
+
currentYPosition.value = destination;
|
|
72
|
+
} else {
|
|
73
|
+
transformationY.value = withTiming(currentYPosition.value, withTimingConfig);
|
|
74
|
+
}
|
|
75
|
+
}).onFinalize(() => {
|
|
76
|
+
movedY.value = 0;
|
|
77
|
+
}).simultaneousWithExternalGesture(...Object.values(screenProperties).map(({
|
|
78
|
+
nativeGesture
|
|
79
|
+
}) => nativeGesture)).withRef(gestureRef).enabled(_gestureEnabled), [_gestureEnabled]);
|
|
80
|
+
const style = useAnimatedStyle(() => ({
|
|
81
|
+
flex: 1,
|
|
82
|
+
transform: [{
|
|
83
|
+
translateY: interpolate(transformationY.value, [0, -headerHeight.value], [0, -headerHeight.value], 'clamp')
|
|
84
|
+
}]
|
|
85
|
+
}), []);
|
|
86
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
87
|
+
gesture: gesture,
|
|
88
|
+
children: /*#__PURE__*/_jsx(Reanimated.View, {
|
|
89
|
+
style: style,
|
|
90
|
+
children: children
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=GestureWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useRef","useState","Gesture","GestureDetector","Reanimated","Easing","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withTiming","useTabContext","jsx","_jsx","GestureWrapper","children","currentScreenIndex","currentYPosition","gestureEnabled","headerHeight","screenProperties","transformationY","screenRefs","movedY","gestureRef","Pan","withTimingConfig","duration","easing","bezier","_gestureEnabled","setGestureEnabled","value","nextValue","_scrollTo","index","scrollTo","Object","values","refs","current","y","animated","gesture","activeOffsetY","onTouchesMove","state","stateManager","map","scrollY","fail","onUpdate","translationY","Math","abs","onEnd","velocityY","gestureValue","changeOffset","destination","onFinalize","simultaneousWithExternalGesture","nativeGesture","withRef","enabled","style","flex","transform","translateY","View"],"sourceRoot":"../../../../src","sources":["components/wrappers/GestureWrapper.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useRoute } from '@react-navigation/native';
|
|
4
|
+
import Reanimated from 'react-native-reanimated';
|
|
5
|
+
import { useTabContext } from "../../hooks/TopTab.hooks.js";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export const ScreenWrapper = ({
|
|
8
|
+
children,
|
|
9
|
+
...viewProps
|
|
10
|
+
}) => {
|
|
11
|
+
const {
|
|
12
|
+
key
|
|
13
|
+
} = useRoute();
|
|
14
|
+
const {
|
|
15
|
+
screenProperties
|
|
16
|
+
} = useTabContext();
|
|
17
|
+
const onLayout = event => {
|
|
18
|
+
const screen = screenProperties[key];
|
|
19
|
+
if (!screen) throw 'No screen property registered for this route';
|
|
20
|
+
screen.outerLayout.value = event.nativeEvent.layout;
|
|
21
|
+
};
|
|
22
|
+
return /*#__PURE__*/_jsx(Reanimated.View, {
|
|
23
|
+
...viewProps,
|
|
24
|
+
onLayout: onLayout,
|
|
25
|
+
children: children
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=ScreenWrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useRoute","Reanimated","useTabContext","jsx","_jsx","ScreenWrapper","children","viewProps","key","screenProperties","onLayout","event","screen","outerLayout","value","nativeEvent","layout","View"],"sourceRoot":"../../../../src","sources":["components/wrappers/ScreenWrapper.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,0BAA0B;AAEnD,OAAOC,UAAU,MAA8B,yBAAyB;AACxE,SAASC,aAAa,QAAQ,6BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAKzD,OAAO,MAAMC,aAAa,GAAGA,CAAC;EAC5BC,QAAQ;EACR,GAAGC;AACe,CAAC,KAAK;EACxB,MAAM;IAAEC;EAAI,CAAC,GAAGR,QAAQ,CAAC,CAAC;EAC1B,MAAM;IAAES;EAAiB,CAAC,GAAGP,aAAa,CAAC,CAAC;EAE5C,MAAMQ,QAAQ,GAAIC,KAAwB,IAAK;IAC7C,MAAMC,MAAM,GAAGH,gBAAgB,CAACD,GAAG,CAAC;IACpC,IAAI,CAACI,MAAM,EAAE,MAAM,8CAA8C;IACjEA,MAAM,CAACC,WAAW,CAACC,KAAK,GAAGH,KAAK,CAACI,WAAW,CAACC,MAAM;EACrD,CAAC;EAED,oBACEZ,IAAA,CAACH,UAAU,CAACgB,IAAI;IAAA,GAAKV,SAAS;IAAEG,QAAQ,EAAEA,QAAS;IAAAJ,QAAA,EAChDA;EAAQ,CACM,CAAC;AAEtB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { StyleSheet } from 'react-native';
|
|
4
|
+
import { GestureDetector } from 'react-native-gesture-handler';
|
|
5
|
+
import Reanimated from 'react-native-reanimated';
|
|
6
|
+
import { useScreenGesture, useScreenProperties, useScreenScrollable, useTabContext } from "../../hooks/TopTab.hooks.js";
|
|
7
|
+
import { useRef } from 'react';
|
|
8
|
+
import { useRoute } from '@react-navigation/native';
|
|
9
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
+
export const ScrollView = ({
|
|
11
|
+
children,
|
|
12
|
+
style,
|
|
13
|
+
...props
|
|
14
|
+
}) => {
|
|
15
|
+
const gesture = useScreenGesture();
|
|
16
|
+
const {
|
|
17
|
+
style: animatedStyle,
|
|
18
|
+
...scrollProps
|
|
19
|
+
} = useScreenScrollable();
|
|
20
|
+
const {
|
|
21
|
+
innerLayout
|
|
22
|
+
} = useScreenProperties();
|
|
23
|
+
const {
|
|
24
|
+
screenRefs
|
|
25
|
+
} = useTabContext();
|
|
26
|
+
const {
|
|
27
|
+
key
|
|
28
|
+
} = useRoute();
|
|
29
|
+
const _ref = useRef(null);
|
|
30
|
+
const onLayout = event => {
|
|
31
|
+
innerLayout.value = event.nativeEvent.layout;
|
|
32
|
+
screenRefs.setRef(key, _ref);
|
|
33
|
+
};
|
|
34
|
+
return /*#__PURE__*/_jsx(GestureDetector, {
|
|
35
|
+
gesture: gesture,
|
|
36
|
+
children: /*#__PURE__*/_jsx(Reanimated.ScrollView, {
|
|
37
|
+
...scrollProps,
|
|
38
|
+
...props,
|
|
39
|
+
ref: _ref,
|
|
40
|
+
contentContainerStyle: _style.contentContainerStyle,
|
|
41
|
+
onLayout: onLayout,
|
|
42
|
+
style: [style, animatedStyle],
|
|
43
|
+
children: children
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
const _style = StyleSheet.create({
|
|
48
|
+
contentContainerStyle: {
|
|
49
|
+
flexGrow: 1
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=ScrollView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","GestureDetector","Reanimated","useScreenGesture","useScreenProperties","useScreenScrollable","useTabContext","useRef","useRoute","jsx","_jsx","ScrollView","children","style","props","gesture","animatedStyle","scrollProps","innerLayout","screenRefs","key","_ref","onLayout","event","value","nativeEvent","layout","setRef","ref","contentContainerStyle","_style","create","flexGrow"],"sourceRoot":"../../../../src","sources":["components/wrappers/ScrollView.tsx"],"mappings":";;AAAA,SAGEA,UAAU,QACL,cAAc;AACrB,SAASC,eAAe,QAAQ,8BAA8B;AAC9D,OAAOC,UAAU,MAA8B,yBAAyB;AACxE,SACEC,gBAAgB,EAChBC,mBAAmB,EACnBC,mBAAmB,EACnBC,aAAa,QACR,6BAA0B;AACjC,SAASC,MAAM,QAAQ,OAAO;AAC9B,SAASC,QAAQ,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAKpD,OAAO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,QAAQ;EACRC,KAAK;EACL,GAAGC;AACe,CAAC,KAAK;EACxB,MAAMC,OAAO,GAAGZ,gBAAgB,CAAC,CAAC;EAClC,MAAM;IAAEU,KAAK,EAAEG,aAAa;IAAE,GAAGC;EAAY,CAAC,GAAGZ,mBAAmB,CAAC,CAAC;EACtE,MAAM;IAAEa;EAAY,CAAC,GAAGd,mBAAmB,CAAC,CAAC;EAC7C,MAAM;IAAEe;EAAW,CAAC,GAAGb,aAAa,CAAC,CAAC;EAEtC,MAAM;IAAEc;EAAI,CAAC,GAAGZ,QAAQ,CAAC,CAAC;EAE1B,MAAMa,IAAI,GAAGd,MAAM,CAAwB,IAAI,CAAC;EAEhD,MAAMe,QAAQ,GAAIC,KAAwB,IAAK;IAC7CL,WAAW,CAACM,KAAK,GAAGD,KAAK,CAACE,WAAW,CAACC,MAAM;IAC5CP,UAAU,CAACQ,MAAM,CAACP,GAAG,EAAEC,IAAI,CAAC;EAC9B,CAAC;EAED,oBACEX,IAAA,CAACT,eAAe;IAACc,OAAO,EAAEA,OAAQ;IAAAH,QAAA,eAChCF,IAAA,CAACR,UAAU,CAACS,UAAU;MAAA,GAChBM,WAAW;MAAA,GACXH,KAAK;MACTc,GAAG,EAAEP,IAAK;MACVQ,qBAAqB,EAAEC,MAAM,CAACD,qBAAsB;MACpDP,QAAQ,EAAEA,QAAS;MACnBT,KAAK,EAAE,CAACA,KAAK,EAAEG,aAAa,CAAE;MAAAJ,QAAA,EAE7BA;IAAQ,CACY;EAAC,CACT,CAAC;AAEtB,CAAC;AAED,MAAMkB,MAAM,GAAG9B,UAAU,CAAC+B,MAAM,CAAC;EAC/BF,qBAAqB,EAAE;IACrBG,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { runOnJS, useAnimatedReaction } from 'react-native-reanimated';
|
|
4
|
+
const useResetApproachingScreenScrollOffset = ({
|
|
5
|
+
screenRefs,
|
|
6
|
+
transformationX,
|
|
7
|
+
screenProperties,
|
|
8
|
+
currentYPosition
|
|
9
|
+
}) => {
|
|
10
|
+
const resetApproachingScreenOffset = (index, shouldReset) => {
|
|
11
|
+
if (shouldReset) {
|
|
12
|
+
//NOTE: use reanimated scrollTo does not work
|
|
13
|
+
const {
|
|
14
|
+
scrollTo
|
|
15
|
+
} = Object.values(screenRefs.refs.current)[index]?.current ?? {
|
|
16
|
+
scrollTo: () => null
|
|
17
|
+
};
|
|
18
|
+
scrollTo({
|
|
19
|
+
y: 0,
|
|
20
|
+
animated: false
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
useAnimatedReaction(() => transformationX.value, (current, previous) => {
|
|
25
|
+
const approachingIndex = getTargetIndex(current, previous);
|
|
26
|
+
const approachingScreenOffset = Object.values(screenProperties).map(({
|
|
27
|
+
scrollY
|
|
28
|
+
}) => scrollY.value)[approachingIndex] ?? -1;
|
|
29
|
+
runOnJS(resetApproachingScreenOffset)(approachingIndex, approachingScreenOffset > 0 && currentYPosition.value === 0);
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
function getTargetIndex(currentValue, previousValue) {
|
|
33
|
+
'worklet';
|
|
34
|
+
|
|
35
|
+
if (currentValue > (previousValue ?? 0)) {
|
|
36
|
+
return Math.ceil(currentValue);
|
|
37
|
+
} else {
|
|
38
|
+
return Math.floor(currentValue);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export const TopTabContextHooks = {
|
|
42
|
+
useResetApproachingScreenScrollOffset
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=TopTabContext.hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["runOnJS","useAnimatedReaction","useResetApproachingScreenScrollOffset","screenRefs","transformationX","screenProperties","currentYPosition","resetApproachingScreenOffset","index","shouldReset","scrollTo","Object","values","refs","current","y","animated","value","previous","approachingIndex","getTargetIndex","approachingScreenOffset","map","scrollY","currentValue","previousValue","Math","ceil","floor","TopTabContextHooks"],"sourceRoot":"../../../src","sources":["context/TopTabContext.hooks.ts"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,mBAAmB,QAAQ,yBAAyB;AAGtE,MAAMC,qCAAqC,GAAGA,CAAC;EAC7CC,UAAU;EACVC,eAAe;EACfC,gBAAgB;EAChBC;AAIF,CAAC,KAAK;EACJ,MAAMC,4BAA4B,GAAGA,CACnCC,KAAa,EACbC,WAAoB,KACjB;IACH,IAAIA,WAAW,EAAE;MACf;MACA,MAAM;QAAEC;MAAS,CAAC,GAAGC,MAAM,CAACC,MAAM,CAACT,UAAU,CAACU,IAAI,CAACC,OAAO,CAAC,CAACN,KAAK,CAAC,EAC9DM,OAAO,IAAI;QAAEJ,QAAQ,EAAEA,CAAA,KAAM;MAAK,CAAC;MAEvCA,QAAQ,CAAC;QAAEK,CAAC,EAAE,CAAC;QAAEC,QAAQ,EAAE;MAAM,CAAC,CAAC;IACrC;EACF,CAAC;EAEDf,mBAAmB,CACjB,MAAMG,eAAe,CAACa,KAAK,EAC3B,CAACH,OAAO,EAAEI,QAAQ,KAAK;IACrB,MAAMC,gBAAgB,GAAGC,cAAc,CAACN,OAAO,EAAEI,QAAQ,CAAC;IAE1D,MAAMG,uBAAuB,GAC3BV,MAAM,CAACC,MAAM,CAACP,gBAAgB,CAAC,CAACiB,GAAG,CAAC,CAAC;MAAEC;IAAQ,CAAC,KAAKA,OAAO,CAACN,KAAK,CAAC,CACjEE,gBAAgB,CACjB,IAAI,CAAC,CAAC;IAETnB,OAAO,CAACO,4BAA4B,CAAC,CACnCY,gBAAgB,EAChBE,uBAAuB,GAAG,CAAC,IAAIf,gBAAgB,CAACW,KAAK,KAAK,CAC5D,CAAC;EACH,CACF,CAAC;AACH,CAAC;AAED,SAASG,cAAcA,CAACI,YAAoB,EAAEC,aAA4B,EAAE;EAC1E,SAAS;;EACT,IAAID,YAAY,IAAIC,aAAa,IAAI,CAAC,CAAC,EAAE;IACvC,OAAOC,IAAI,CAACC,IAAI,CAACH,YAAY,CAAC;EAChC,CAAC,MAAM;IACL,OAAOE,IAAI,CAACE,KAAK,CAACJ,YAAY,CAAC;EACjC;AACF;AAEA,OAAO,MAAMK,kBAAkB,GAAG;EAChC3B;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createContext, memo, useRef } from 'react';
|
|
4
|
+
import { Gesture } from 'react-native-gesture-handler';
|
|
5
|
+
import { interpolate, useAnimatedReaction, useDerivedValue, useSharedValue } from 'react-native-reanimated';
|
|
6
|
+
import { useScreenRefs } from "../hooks/TopTab.hooks.js";
|
|
7
|
+
import { TopTabContextHooks } from "./TopTabContext.hooks.js";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
export const Context = /*#__PURE__*/createContext({});
|
|
10
|
+
export const Provider = /*#__PURE__*/memo(({
|
|
11
|
+
children,
|
|
12
|
+
config,
|
|
13
|
+
screenProperties
|
|
14
|
+
}) => {
|
|
15
|
+
const transformationY = useSharedValue(0);
|
|
16
|
+
const transformationX = useSharedValue(0);
|
|
17
|
+
const currentYPosition = useSharedValue(0);
|
|
18
|
+
const gestureEnabled = useSharedValue(true);
|
|
19
|
+
const currentScreenIndex = useSharedValue(0);
|
|
20
|
+
const navHeight = useSharedValue(0);
|
|
21
|
+
const headerHeight = useSharedValue(0);
|
|
22
|
+
const closeOffset = useSharedValue(0);
|
|
23
|
+
const topTabHeight = useSharedValue(0);
|
|
24
|
+
const topTapNativeRef = useRef(Gesture.Native()).current;
|
|
25
|
+
const screenRefs = useScreenRefs(Object.keys(screenProperties));
|
|
26
|
+
|
|
27
|
+
//Hide header base on config
|
|
28
|
+
const inputRange = useDerivedValue(() => config.map((_, idx) => idx), [config]);
|
|
29
|
+
const outputRange = useDerivedValue(() => config.map(type => {
|
|
30
|
+
switch (type) {
|
|
31
|
+
case 'normal':
|
|
32
|
+
return 0;
|
|
33
|
+
case 'minimalized':
|
|
34
|
+
return -headerHeight.value;
|
|
35
|
+
default:
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
}), [config]);
|
|
39
|
+
useAnimatedReaction(() => transformationX.value, value => {
|
|
40
|
+
if (currentYPosition.value === -headerHeight.value) return;
|
|
41
|
+
transformationY.value = interpolate(value, inputRange.value, outputRange.value, 'clamp');
|
|
42
|
+
});
|
|
43
|
+
TopTabContextHooks.useResetApproachingScreenScrollOffset({
|
|
44
|
+
screenRefs,
|
|
45
|
+
currentYPosition,
|
|
46
|
+
screenProperties,
|
|
47
|
+
transformationX
|
|
48
|
+
});
|
|
49
|
+
return /*#__PURE__*/_jsx(Context.Provider, {
|
|
50
|
+
value: {
|
|
51
|
+
closeOffset,
|
|
52
|
+
config,
|
|
53
|
+
currentScreenIndex,
|
|
54
|
+
currentYPosition,
|
|
55
|
+
gestureEnabled,
|
|
56
|
+
headerHeight,
|
|
57
|
+
navHeight,
|
|
58
|
+
screenProperties,
|
|
59
|
+
topTabHeight,
|
|
60
|
+
topTapNativeRef,
|
|
61
|
+
transformationX,
|
|
62
|
+
transformationY,
|
|
63
|
+
screenRefs
|
|
64
|
+
},
|
|
65
|
+
children: children({
|
|
66
|
+
screenRefs,
|
|
67
|
+
closeOffset,
|
|
68
|
+
config,
|
|
69
|
+
currentScreenIndex,
|
|
70
|
+
currentYPosition,
|
|
71
|
+
gestureEnabled,
|
|
72
|
+
headerHeight,
|
|
73
|
+
navHeight,
|
|
74
|
+
screenProperties,
|
|
75
|
+
topTabHeight,
|
|
76
|
+
topTapNativeRef,
|
|
77
|
+
transformationX,
|
|
78
|
+
transformationY
|
|
79
|
+
})
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=TopTabContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","memo","useRef","Gesture","interpolate","useAnimatedReaction","useDerivedValue","useSharedValue","useScreenRefs","TopTabContextHooks","jsx","_jsx","Context","Provider","children","config","screenProperties","transformationY","transformationX","currentYPosition","gestureEnabled","currentScreenIndex","navHeight","headerHeight","closeOffset","topTabHeight","topTapNativeRef","Native","current","screenRefs","Object","keys","inputRange","map","_","idx","outputRange","type","value","useResetApproachingScreenScrollOffset"],"sourceRoot":"../../../src","sources":["context/TopTabContext.tsx"],"mappings":"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","ignoreList":[]}
|