react-navigation-reanimated-top-tabs 0.2.0 → 0.4.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.
Files changed (199) hide show
  1. package/README.md +5 -17
  2. package/lib/commonjs/components/ReanimatedTopTab/ReanimatedTabView.js +5 -3
  3. package/lib/commonjs/components/ReanimatedTopTab/ReanimatedTabView.js.map +1 -1
  4. package/lib/commonjs/components/elements/TabBarBaseComponent.js +6 -5
  5. package/lib/commonjs/components/elements/TabBarBaseComponent.js.map +1 -1
  6. package/lib/commonjs/components/elements/TabBarLabelBaseComponent.js +2 -4
  7. package/lib/commonjs/components/elements/TabBarLabelBaseComponent.js.map +1 -1
  8. package/lib/commonjs/components/wrappers/GestureWrapper.js +18 -26
  9. package/lib/commonjs/components/wrappers/GestureWrapper.js.map +1 -1
  10. package/lib/commonjs/components/wrappers/ScreenWrapper.js +4 -4
  11. package/lib/commonjs/components/wrappers/ScreenWrapper.js.map +1 -1
  12. package/lib/commonjs/components/wrappers/ScrollView.js +27 -16
  13. package/lib/commonjs/components/wrappers/ScrollView.js.map +1 -1
  14. package/lib/commonjs/context/Context.helpers.js +19 -0
  15. package/lib/commonjs/context/Context.helpers.js.map +1 -0
  16. package/lib/commonjs/context/Context.hooks.js +216 -0
  17. package/lib/commonjs/context/Context.hooks.js.map +1 -0
  18. package/lib/commonjs/context/Context.js +68 -0
  19. package/lib/commonjs/context/Context.js.map +1 -0
  20. package/lib/commonjs/hooks/useHeader.js +30 -0
  21. package/lib/commonjs/hooks/useHeader.js.map +1 -0
  22. package/lib/commonjs/hooks/useScreenGesture.js +21 -0
  23. package/lib/commonjs/hooks/useScreenGesture.js.map +1 -0
  24. package/lib/commonjs/hooks/useScreenProperties.js +21 -0
  25. package/lib/commonjs/hooks/useScreenProperties.js.map +1 -0
  26. package/lib/commonjs/hooks/useScreenScrollable.js +64 -0
  27. package/lib/commonjs/hooks/useScreenScrollable.js.map +1 -0
  28. package/lib/commonjs/hooks/useTabContext.js +11 -0
  29. package/lib/commonjs/hooks/useTabContext.js.map +1 -0
  30. package/lib/commonjs/hooks/useTabOffset.js +18 -0
  31. package/lib/commonjs/hooks/useTabOffset.js.map +1 -0
  32. package/lib/commonjs/index.js +34 -80
  33. package/lib/commonjs/index.js.map +1 -1
  34. package/lib/commonjs/navigator/createReanimatedTopTabNavigator.js +14 -29
  35. package/lib/commonjs/navigator/createReanimatedTopTabNavigator.js.map +1 -1
  36. package/lib/commonjs/services/Warning.service.js +16 -0
  37. package/lib/commonjs/services/Warning.service.js.map +1 -0
  38. package/lib/module/components/ReanimatedTopTab/ReanimatedTabView.js +8 -6
  39. package/lib/module/components/ReanimatedTopTab/ReanimatedTabView.js.map +1 -1
  40. package/lib/module/components/elements/TabBarBaseComponent.js +5 -4
  41. package/lib/module/components/elements/TabBarBaseComponent.js.map +1 -1
  42. package/lib/module/components/elements/TabBarLabelBaseComponent.js +2 -4
  43. package/lib/module/components/elements/TabBarLabelBaseComponent.js.map +1 -1
  44. package/lib/module/components/wrappers/GestureWrapper.js +18 -27
  45. package/lib/module/components/wrappers/GestureWrapper.js.map +1 -1
  46. package/lib/module/components/wrappers/ScreenWrapper.js +3 -3
  47. package/lib/module/components/wrappers/ScreenWrapper.js.map +1 -1
  48. package/lib/module/components/wrappers/ScrollView.js +23 -12
  49. package/lib/module/components/wrappers/ScrollView.js.map +1 -1
  50. package/lib/module/context/Context.helpers.js +15 -0
  51. package/lib/module/context/Context.helpers.js.map +1 -0
  52. package/lib/module/context/Context.hooks.js +213 -0
  53. package/lib/module/context/Context.hooks.js.map +1 -0
  54. package/lib/module/context/Context.js +64 -0
  55. package/lib/module/context/Context.js.map +1 -0
  56. package/lib/module/hooks/useHeader.js +25 -0
  57. package/lib/module/hooks/useHeader.js.map +1 -0
  58. package/lib/module/hooks/useScreenGesture.js +16 -0
  59. package/lib/module/hooks/useScreenGesture.js.map +1 -0
  60. package/lib/module/hooks/useScreenProperties.js +16 -0
  61. package/lib/module/hooks/useScreenProperties.js.map +1 -0
  62. package/lib/module/hooks/useScreenScrollable.js +57 -0
  63. package/lib/module/hooks/useScreenScrollable.js.map +1 -0
  64. package/lib/module/hooks/useTabContext.js +6 -0
  65. package/lib/module/hooks/useTabContext.js.map +1 -0
  66. package/lib/module/hooks/useTabOffset.js +12 -0
  67. package/lib/module/hooks/useTabOffset.js.map +1 -0
  68. package/lib/module/index.js +33 -8
  69. package/lib/module/index.js.map +1 -1
  70. package/lib/module/navigator/createReanimatedTopTabNavigator.js +13 -27
  71. package/lib/module/navigator/createReanimatedTopTabNavigator.js.map +1 -1
  72. package/lib/module/services/Warning.service.js +12 -0
  73. package/lib/module/services/Warning.service.js.map +1 -0
  74. package/lib/typescript/src/components/ReanimatedTopTab/AnimationHelper.d.ts.map +1 -0
  75. package/lib/typescript/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts.map +1 -0
  76. package/lib/typescript/src/components/ReanimatedTopTab/types.d.ts.map +1 -0
  77. package/lib/typescript/{module/src → src}/components/elements/TabBarBaseComponent.d.ts +1 -2
  78. package/lib/typescript/src/components/elements/TabBarBaseComponent.d.ts.map +1 -0
  79. package/lib/typescript/{commonjs/src → src}/components/elements/TabBarLabelBaseComponent.d.ts +1 -2
  80. package/lib/typescript/src/components/elements/TabBarLabelBaseComponent.d.ts.map +1 -0
  81. package/lib/typescript/src/components/wrappers/GestureWrapper.d.ts +7 -0
  82. package/lib/typescript/src/components/wrappers/GestureWrapper.d.ts.map +1 -0
  83. package/lib/typescript/src/components/wrappers/ScreenWrapper.d.ts.map +1 -0
  84. package/lib/typescript/src/components/wrappers/ScrollView.d.ts +5 -0
  85. package/lib/typescript/src/components/wrappers/ScrollView.d.ts.map +1 -0
  86. package/lib/typescript/{commonjs/src/context/TopTabContext.d.ts → src/context/Context.d.ts} +2 -2
  87. package/lib/typescript/src/context/Context.d.ts.map +1 -0
  88. package/lib/typescript/src/context/Context.helpers.d.ts +4 -0
  89. package/lib/typescript/src/context/Context.helpers.d.ts.map +1 -0
  90. package/lib/typescript/src/context/Context.hooks.d.ts +15 -0
  91. package/lib/typescript/src/context/Context.hooks.d.ts.map +1 -0
  92. package/lib/typescript/src/hooks/useHeader.d.ts +10 -0
  93. package/lib/typescript/src/hooks/useHeader.d.ts.map +1 -0
  94. package/lib/typescript/src/hooks/useScreenGesture.d.ts +2 -0
  95. package/lib/typescript/src/hooks/useScreenGesture.d.ts.map +1 -0
  96. package/lib/typescript/src/hooks/useScreenProperties.d.ts +10 -0
  97. package/lib/typescript/src/hooks/useScreenProperties.d.ts.map +1 -0
  98. package/lib/typescript/src/hooks/useScreenScrollable.d.ts +14 -0
  99. package/lib/typescript/src/hooks/useScreenScrollable.d.ts.map +1 -0
  100. package/lib/typescript/src/hooks/useTabContext.d.ts +2 -0
  101. package/lib/typescript/src/hooks/useTabContext.d.ts.map +1 -0
  102. package/lib/typescript/src/hooks/useTabOffset.d.ts +2 -0
  103. package/lib/typescript/src/hooks/useTabOffset.d.ts.map +1 -0
  104. package/lib/typescript/src/index.d.ts +45 -0
  105. package/lib/typescript/src/index.d.ts.map +1 -0
  106. package/lib/typescript/src/navigator/createReanimatedTopTabNavigator.d.ts.map +1 -0
  107. package/lib/typescript/src/services/Warning.service.d.ts +5 -0
  108. package/lib/typescript/src/services/Warning.service.d.ts.map +1 -0
  109. package/lib/typescript/{module/src → src}/types.d.ts +24 -17
  110. package/lib/typescript/src/types.d.ts.map +1 -0
  111. package/package.json +24 -38
  112. package/src/components/ReanimatedTopTab/ReanimatedTabView.tsx +7 -6
  113. package/src/components/elements/TabBarBaseComponent.tsx +7 -3
  114. package/src/components/elements/TabBarLabelBaseComponent.tsx +4 -3
  115. package/src/components/wrappers/GestureWrapper.tsx +27 -29
  116. package/src/components/wrappers/ScreenWrapper.tsx +4 -3
  117. package/src/components/wrappers/ScrollView.tsx +33 -19
  118. package/src/context/Context.helpers.tsx +10 -0
  119. package/src/context/Context.hooks.ts +253 -0
  120. package/src/context/Context.tsx +69 -0
  121. package/src/hooks/useHeader.ts +30 -0
  122. package/src/hooks/useScreenGesture.ts +13 -0
  123. package/src/hooks/useScreenProperties.ts +11 -0
  124. package/src/hooks/useScreenScrollable.ts +69 -0
  125. package/src/hooks/useTabContext.ts +4 -0
  126. package/src/hooks/useTabOffset.ts +8 -0
  127. package/src/index.tsx +34 -10
  128. package/src/navigator/createReanimatedTopTabNavigator.tsx +8 -32
  129. package/src/services/Warning.service.ts +11 -0
  130. package/src/types.ts +23 -19
  131. package/lib/commonjs/context/TopTabContext.hooks.js +0 -48
  132. package/lib/commonjs/context/TopTabContext.hooks.js.map +0 -1
  133. package/lib/commonjs/context/TopTabContext.js +0 -86
  134. package/lib/commonjs/context/TopTabContext.js.map +0 -1
  135. package/lib/commonjs/hooks/TopTab.hooks.js +0 -120
  136. package/lib/commonjs/hooks/TopTab.hooks.js.map +0 -1
  137. package/lib/module/context/TopTabContext.hooks.js +0 -44
  138. package/lib/module/context/TopTabContext.hooks.js.map +0 -1
  139. package/lib/module/context/TopTabContext.js +0 -82
  140. package/lib/module/context/TopTabContext.js.map +0 -1
  141. package/lib/module/hooks/TopTab.hooks.js +0 -110
  142. package/lib/module/hooks/TopTab.hooks.js.map +0 -1
  143. package/lib/typescript/commonjs/src/components/ReanimatedTopTab/AnimationHelper.d.ts.map +0 -1
  144. package/lib/typescript/commonjs/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts.map +0 -1
  145. package/lib/typescript/commonjs/src/components/ReanimatedTopTab/types.d.ts.map +0 -1
  146. package/lib/typescript/commonjs/src/components/elements/TabBarBaseComponent.d.ts +0 -24
  147. package/lib/typescript/commonjs/src/components/elements/TabBarBaseComponent.d.ts.map +0 -1
  148. package/lib/typescript/commonjs/src/components/elements/TabBarLabelBaseComponent.d.ts.map +0 -1
  149. package/lib/typescript/commonjs/src/components/wrappers/GestureWrapper.d.ts +0 -2
  150. package/lib/typescript/commonjs/src/components/wrappers/GestureWrapper.d.ts.map +0 -1
  151. package/lib/typescript/commonjs/src/components/wrappers/ScreenWrapper.d.ts.map +0 -1
  152. package/lib/typescript/commonjs/src/components/wrappers/ScrollView.d.ts +0 -6
  153. package/lib/typescript/commonjs/src/components/wrappers/ScrollView.d.ts.map +0 -1
  154. package/lib/typescript/commonjs/src/context/TopTabContext.d.ts.map +0 -1
  155. package/lib/typescript/commonjs/src/context/TopTabContext.hooks.d.ts +0 -5
  156. package/lib/typescript/commonjs/src/context/TopTabContext.hooks.d.ts.map +0 -1
  157. package/lib/typescript/commonjs/src/hooks/TopTab.hooks.d.ts +0 -33
  158. package/lib/typescript/commonjs/src/hooks/TopTab.hooks.d.ts.map +0 -1
  159. package/lib/typescript/commonjs/src/index.d.ts +0 -10
  160. package/lib/typescript/commonjs/src/index.d.ts.map +0 -1
  161. package/lib/typescript/commonjs/src/navigator/createReanimatedTopTabNavigator.d.ts.map +0 -1
  162. package/lib/typescript/commonjs/src/types.d.ts +0 -56
  163. package/lib/typescript/commonjs/src/types.d.ts.map +0 -1
  164. package/lib/typescript/module/src/components/ReanimatedTopTab/AnimationHelper.d.ts +0 -11
  165. package/lib/typescript/module/src/components/ReanimatedTopTab/AnimationHelper.d.ts.map +0 -1
  166. package/lib/typescript/module/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts +0 -14
  167. package/lib/typescript/module/src/components/ReanimatedTopTab/ReanimatedTabView.d.ts.map +0 -1
  168. package/lib/typescript/module/src/components/ReanimatedTopTab/types.d.ts +0 -30
  169. package/lib/typescript/module/src/components/ReanimatedTopTab/types.d.ts.map +0 -1
  170. package/lib/typescript/module/src/components/elements/TabBarBaseComponent.d.ts.map +0 -1
  171. package/lib/typescript/module/src/components/elements/TabBarLabelBaseComponent.d.ts +0 -8
  172. package/lib/typescript/module/src/components/elements/TabBarLabelBaseComponent.d.ts.map +0 -1
  173. package/lib/typescript/module/src/components/wrappers/GestureWrapper.d.ts +0 -2
  174. package/lib/typescript/module/src/components/wrappers/GestureWrapper.d.ts.map +0 -1
  175. package/lib/typescript/module/src/components/wrappers/ScreenWrapper.d.ts +0 -6
  176. package/lib/typescript/module/src/components/wrappers/ScreenWrapper.d.ts.map +0 -1
  177. package/lib/typescript/module/src/components/wrappers/ScrollView.d.ts +0 -6
  178. package/lib/typescript/module/src/components/wrappers/ScrollView.d.ts.map +0 -1
  179. package/lib/typescript/module/src/context/TopTabContext.d.ts +0 -4
  180. package/lib/typescript/module/src/context/TopTabContext.d.ts.map +0 -1
  181. package/lib/typescript/module/src/context/TopTabContext.hooks.d.ts +0 -5
  182. package/lib/typescript/module/src/context/TopTabContext.hooks.d.ts.map +0 -1
  183. package/lib/typescript/module/src/hooks/TopTab.hooks.d.ts +0 -33
  184. package/lib/typescript/module/src/hooks/TopTab.hooks.d.ts.map +0 -1
  185. package/lib/typescript/module/src/index.d.ts +0 -10
  186. package/lib/typescript/module/src/index.d.ts.map +0 -1
  187. package/lib/typescript/module/src/navigator/createReanimatedTopTabNavigator.d.ts +0 -4
  188. package/lib/typescript/module/src/navigator/createReanimatedTopTabNavigator.d.ts.map +0 -1
  189. package/lib/typescript/module/src/types.d.ts.map +0 -1
  190. package/src/context/TopTabContext.hooks.ts +0 -55
  191. package/src/context/TopTabContext.tsx +0 -115
  192. package/src/hooks/TopTab.hooks.ts +0 -112
  193. /package/lib/{typescript/commonjs → commonjs}/package.json +0 -0
  194. /package/lib/{typescript/module → module}/package.json +0 -0
  195. /package/lib/typescript/{commonjs/src → src}/components/ReanimatedTopTab/AnimationHelper.d.ts +0 -0
  196. /package/lib/typescript/{commonjs/src → src}/components/ReanimatedTopTab/ReanimatedTabView.d.ts +0 -0
  197. /package/lib/typescript/{commonjs/src → src}/components/ReanimatedTopTab/types.d.ts +0 -0
  198. /package/lib/typescript/{commonjs/src → src}/components/wrappers/ScreenWrapper.d.ts +0 -0
  199. /package/lib/typescript/{commonjs/src → src}/navigator/createReanimatedTopTabNavigator.d.ts +0 -0
@@ -1,115 +0,0 @@
1
- import { type ReanimatedTopTabNavigation } from '../types';
2
- import { createContext, memo, useRef } from 'react';
3
- import { Gesture } from 'react-native-gesture-handler';
4
- import {
5
- interpolate,
6
- useAnimatedReaction,
7
- useDerivedValue,
8
- useSharedValue,
9
- } from 'react-native-reanimated';
10
- import { useScreenRefs } from '../hooks/TopTab.hooks';
11
- import { TopTabContextHooks } from './TopTabContext.hooks';
12
-
13
- export const Context = createContext<ReanimatedTopTabNavigation.ContextType>(
14
- {} as ReanimatedTopTabNavigation.ContextType
15
- );
16
-
17
- export const Provider = memo(
18
- ({
19
- children,
20
- config,
21
- screenProperties,
22
- }: ReanimatedTopTabNavigation.TopTabContextProps) => {
23
- const transformationY = useSharedValue(0);
24
- const transformationX = useSharedValue(0);
25
- const currentYPosition = useSharedValue(0);
26
-
27
- const gestureEnabled = useSharedValue(true);
28
- const currentScreenIndex = useSharedValue(0);
29
-
30
- const navHeight = useSharedValue(0);
31
- const headerHeight = useSharedValue(0);
32
- const closeOffset = useSharedValue(0);
33
- const topTabHeight = useSharedValue(0);
34
-
35
- const topTapNativeRef = useRef(Gesture.Native()).current;
36
- const screenRefs = useScreenRefs(Object.keys(screenProperties));
37
-
38
- //Hide header base on config
39
- const inputRange = useDerivedValue(
40
- () => config.map((_, idx) => idx),
41
- [config]
42
- );
43
-
44
- const outputRange = useDerivedValue(
45
- () =>
46
- config.map((type) => {
47
- switch (type) {
48
- case 'normal':
49
- return 0;
50
- case 'minimalized':
51
- return -headerHeight.value;
52
- default:
53
- return 0;
54
- }
55
- }),
56
- [config]
57
- );
58
-
59
- useAnimatedReaction(
60
- () => transformationX.value,
61
- (value) => {
62
- if (currentYPosition.value === -headerHeight.value) return;
63
- transformationY.value = interpolate(
64
- value,
65
- inputRange.value,
66
- outputRange.value,
67
- 'clamp'
68
- );
69
- }
70
- );
71
-
72
- TopTabContextHooks.useResetApproachingScreenScrollOffset({
73
- screenRefs,
74
- currentYPosition,
75
- screenProperties,
76
- transformationX,
77
- });
78
-
79
- return (
80
- <Context.Provider
81
- value={{
82
- closeOffset,
83
- config,
84
- currentScreenIndex,
85
- currentYPosition,
86
- gestureEnabled,
87
- headerHeight,
88
- navHeight,
89
- screenProperties,
90
- topTabHeight,
91
- topTapNativeRef,
92
- transformationX,
93
- transformationY,
94
- screenRefs,
95
- }}
96
- >
97
- {children({
98
- screenRefs,
99
- closeOffset,
100
- config,
101
- currentScreenIndex,
102
- currentYPosition,
103
- gestureEnabled,
104
- headerHeight,
105
- navHeight,
106
- screenProperties,
107
- topTabHeight,
108
- topTapNativeRef,
109
- transformationX,
110
- transformationY,
111
- })}
112
- </Context.Provider>
113
- );
114
- }
115
- );
@@ -1,112 +0,0 @@
1
- import { useRoute } from '@react-navigation/native';
2
- import { Context } from '../context/TopTabContext';
3
- import { useContext } from 'react';
4
- import {
5
- useAnimatedProps,
6
- useAnimatedScrollHandler,
7
- useAnimatedStyle,
8
- useDerivedValue,
9
- withTiming,
10
- } from 'react-native-reanimated';
11
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
12
- import { useWindowDimensions } from 'react-native';
13
-
14
- export const useTabContext = () => useContext(Context);
15
-
16
- export const useScreenGesture = () => {
17
- const { key } = useRoute();
18
- const { screenProperties } = useTabContext();
19
-
20
- const nativeRef = screenProperties[key]?.nativeGesture;
21
-
22
- if (!nativeRef) throw 'GestureRef does not exist for this route';
23
-
24
- return nativeRef;
25
- };
26
-
27
- export const useScreenScrollable = () => {
28
- const { key } = useRoute();
29
- const { height } = useWindowDimensions();
30
- const { bottom } = useSafeAreaInsets();
31
- const {
32
- currentYPosition,
33
- gestureEnabled,
34
- headerHeight,
35
- screenProperties,
36
- topTabHeight,
37
- transformationY,
38
- } = useTabContext();
39
-
40
- //TODO: Navigation header hook is available if Tabs are rendered inside the Stack (createNavigationStack())
41
- //useHeaderHeight();
42
- const navigationHeader = 50;
43
-
44
- const animatedProps = useAnimatedProps(() => ({
45
- scrollEnabled:
46
- !gestureEnabled.value || currentYPosition.value === -headerHeight.value,
47
- }));
48
-
49
- const onScroll = useAnimatedScrollHandler(({ contentOffset }) => {
50
- const scrollPosition = screenProperties[key]?.scrollY;
51
- if (!scrollPosition)
52
- throw 'ScrollPosition property does not exist for this route';
53
- scrollPosition.value = contentOffset.y;
54
- });
55
-
56
- const oppositeHeaderState = useDerivedValue(() =>
57
- transformationY.value >= 0 ? headerHeight.value : 0
58
- );
59
-
60
- const style = useAnimatedStyle(() => ({
61
- minHeight:
62
- height -
63
- topTabHeight.value -
64
- oppositeHeaderState.value -
65
- navigationHeader,
66
- }));
67
-
68
- return {
69
- animatedProps,
70
- bounces: false,
71
- contentContainerStyle: { paddingBottom: bottom },
72
- onScroll,
73
- style,
74
- };
75
- };
76
-
77
- export const useScreenProperties = () => {
78
- const { key } = useRoute();
79
- const { screenProperties } = useTabContext();
80
- const screen = screenProperties[key];
81
- if (!screen) throw 'No screen properties registered for this route';
82
-
83
- return screen;
84
- };
85
-
86
- export const useHeader = () => {
87
- const { headerHeight, transformationX } = useTabContext();
88
-
89
- const hideHeader = () => {
90
- transformationX.value = withTiming(-headerHeight.value);
91
- };
92
-
93
- return { hideHeader };
94
- };
95
-
96
- export const useScreenRefs = (keys: string[]) => {
97
- const refs = {
98
- current: keys.reduce(
99
- (prev, key) => ({
100
- ...prev,
101
- [key]: { current: null },
102
- }),
103
- {} as Record<string, { current: any }>
104
- ),
105
- };
106
-
107
- const setRef = (key: string, ref: any) => {
108
- refs.current = { ...refs.current, [key]: ref };
109
- };
110
-
111
- return { setRef, refs };
112
- };
File without changes