@fountain-ui/lab 2.0.0-beta.6 → 2.0.0-beta.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.
Files changed (157) hide show
  1. package/build/commonjs/AnimatedY/AnimatedY.js +10 -14
  2. package/build/commonjs/AnimatedY/AnimatedY.js.map +1 -1
  3. package/build/commonjs/AnimatedY/AnimatedYProps.js.map +1 -1
  4. package/build/commonjs/AnimatedY/index.js.map +1 -1
  5. package/build/commonjs/BottomSheet/BottomSheetNative.js +1 -1
  6. package/build/commonjs/BottomSheet/BottomSheetNative.js.map +1 -1
  7. package/build/commonjs/BottomSheet/BottomSheetProps.js.map +1 -1
  8. package/build/commonjs/BottomSheet/BottomSheetWeb.js +2 -6
  9. package/build/commonjs/BottomSheet/BottomSheetWeb.js.map +1 -1
  10. package/build/commonjs/BottomSheet/TransparentBackdrop.js +1 -1
  11. package/build/commonjs/BottomSheet/TransparentBackdrop.js.map +1 -1
  12. package/build/commonjs/BottomSheet/index.js.map +1 -1
  13. package/build/commonjs/BottomSheet/index.native.js.map +1 -1
  14. package/build/commonjs/Carousel/CarouselNative.js.map +1 -1
  15. package/build/commonjs/Carousel/CarouselProps.js.map +1 -1
  16. package/build/commonjs/Carousel/CarouselWeb.js +1 -1
  17. package/build/commonjs/Carousel/CarouselWeb.js.map +1 -1
  18. package/build/commonjs/Carousel/index.js.map +1 -1
  19. package/build/commonjs/Carousel/index.native.js.map +1 -1
  20. package/build/commonjs/Carousel/utils.js +1 -1
  21. package/build/commonjs/Carousel/utils.js.map +1 -1
  22. package/build/commonjs/ComicViewer/ComicViewer.js +16 -11
  23. package/build/commonjs/ComicViewer/ComicViewer.js.map +1 -1
  24. package/build/commonjs/ComicViewer/ComicViewerItemProps.js.map +1 -1
  25. package/build/commonjs/ComicViewer/ComicViewerProps.js.map +1 -1
  26. package/build/commonjs/ComicViewer/ViewerItem.js +4 -3
  27. package/build/commonjs/ComicViewer/ViewerItem.js.map +1 -1
  28. package/build/commonjs/ComicViewer/index.js.map +1 -1
  29. package/build/commonjs/DateTimePicker/DateTimePicker.js.map +1 -1
  30. package/build/commonjs/DateTimePicker/DateTimePickerProps.js.map +1 -1
  31. package/build/commonjs/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  32. package/build/commonjs/DateTimePicker/YearPicker.js +21 -17
  33. package/build/commonjs/DateTimePicker/YearPicker.js.map +1 -1
  34. package/build/commonjs/DateTimePicker/index.js +4 -4
  35. package/build/commonjs/DateTimePicker/index.js.map +1 -1
  36. package/build/commonjs/DateTimePicker/utils.js +2 -1
  37. package/build/commonjs/DateTimePicker/utils.js.map +1 -1
  38. package/build/commonjs/FlipCard/FlipCard.js +7 -13
  39. package/build/commonjs/FlipCard/FlipCard.js.map +1 -1
  40. package/build/commonjs/FlipCard/FlipCardProps.js.map +1 -1
  41. package/build/commonjs/FlipCard/index.js.map +1 -1
  42. package/build/commonjs/StatusBarProvider/Provider.js +1 -1
  43. package/build/commonjs/StatusBarProvider/Provider.js.map +1 -1
  44. package/build/commonjs/StatusBarProvider/StatusBarProvider.js.map +1 -1
  45. package/build/commonjs/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  46. package/build/commonjs/StatusBarProvider/index.js.map +1 -1
  47. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +1 -1
  48. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +1 -1
  49. package/build/commonjs/ViewPager/ViewPagerNative.js +19 -16
  50. package/build/commonjs/ViewPager/ViewPagerNative.js.map +1 -1
  51. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  52. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +1 -1
  53. package/build/commonjs/ViewPager/index.js.map +1 -1
  54. package/build/commonjs/ViewPager/index.native.js.map +1 -1
  55. package/build/commonjs/ViewPager/utils.js +13 -11
  56. package/build/commonjs/ViewPager/utils.js.map +1 -1
  57. package/build/commonjs/hooks/index.js.map +1 -1
  58. package/build/commonjs/hooks/useAppbarStyles.js.map +1 -1
  59. package/build/commonjs/hooks/useElevationStyle.js.map +1 -1
  60. package/build/commonjs/hooks/useHeight.js +5 -4
  61. package/build/commonjs/hooks/useHeight.js.map +1 -1
  62. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +54 -53
  63. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  64. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js +9 -11
  65. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  66. package/build/commonjs/index.js +10 -10
  67. package/build/commonjs/index.js.map +1 -1
  68. package/build/module/AnimatedY/AnimatedY.js +11 -10
  69. package/build/module/AnimatedY/AnimatedY.js.map +1 -1
  70. package/build/module/AnimatedY/AnimatedYProps.js.map +1 -1
  71. package/build/module/AnimatedY/index.js.map +1 -1
  72. package/build/module/BottomSheet/BottomSheetNative.js +1 -1
  73. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  74. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  75. package/build/module/BottomSheet/BottomSheetWeb.js +2 -6
  76. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  77. package/build/module/BottomSheet/TransparentBackdrop.js +1 -1
  78. package/build/module/BottomSheet/TransparentBackdrop.js.map +1 -1
  79. package/build/module/BottomSheet/index.js.map +1 -1
  80. package/build/module/BottomSheet/index.native.js.map +1 -1
  81. package/build/module/Carousel/CarouselNative.js.map +1 -1
  82. package/build/module/Carousel/CarouselProps.js.map +1 -1
  83. package/build/module/Carousel/CarouselWeb.js +1 -1
  84. package/build/module/Carousel/CarouselWeb.js.map +1 -1
  85. package/build/module/Carousel/index.js.map +1 -1
  86. package/build/module/Carousel/index.native.js.map +1 -1
  87. package/build/module/Carousel/utils.js.map +1 -1
  88. package/build/module/ComicViewer/ComicViewer.js +16 -11
  89. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  90. package/build/module/ComicViewer/ComicViewerItemProps.js.map +1 -1
  91. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  92. package/build/module/ComicViewer/ViewerItem.js +4 -3
  93. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  94. package/build/module/ComicViewer/index.js.map +1 -1
  95. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  96. package/build/module/DateTimePicker/DateTimePickerProps.js.map +1 -1
  97. package/build/module/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  98. package/build/module/DateTimePicker/YearPicker.js +21 -17
  99. package/build/module/DateTimePicker/YearPicker.js.map +1 -1
  100. package/build/module/DateTimePicker/index.js.map +1 -1
  101. package/build/module/DateTimePicker/utils.js +2 -1
  102. package/build/module/DateTimePicker/utils.js.map +1 -1
  103. package/build/module/FlipCard/FlipCard.js +7 -7
  104. package/build/module/FlipCard/FlipCard.js.map +1 -1
  105. package/build/module/FlipCard/FlipCardProps.js.map +1 -1
  106. package/build/module/FlipCard/index.js.map +1 -1
  107. package/build/module/StatusBarProvider/Provider.js.map +1 -1
  108. package/build/module/StatusBarProvider/StatusBarProvider.js.map +1 -1
  109. package/build/module/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  110. package/build/module/StatusBarProvider/index.js.map +1 -1
  111. package/build/module/ViewPager/ChildrenMemoizedPage.js +1 -1
  112. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +1 -1
  113. package/build/module/ViewPager/ViewPagerNative.js +15 -10
  114. package/build/module/ViewPager/ViewPagerNative.js.map +1 -1
  115. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  116. package/build/module/ViewPager/ViewPagerWeb.js.map +1 -1
  117. package/build/module/ViewPager/index.js.map +1 -1
  118. package/build/module/ViewPager/index.native.js.map +1 -1
  119. package/build/module/ViewPager/utils.js +11 -10
  120. package/build/module/ViewPager/utils.js.map +1 -1
  121. package/build/module/hooks/index.js.map +1 -1
  122. package/build/module/hooks/useAppbarStyles.js.map +1 -1
  123. package/build/module/hooks/useElevationStyle.js.map +1 -1
  124. package/build/module/hooks/useHeight.js +4 -3
  125. package/build/module/hooks/useHeight.js.map +1 -1
  126. package/build/module/hooks/useUnstableCollapsibleAppBar.js +56 -39
  127. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  128. package/build/module/hooks/useUnstableToggleDisplayStyle.js +9 -7
  129. package/build/module/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  130. package/build/module/index.js.map +1 -1
  131. package/build/typescript/AnimatedY/AnimatedY.d.ts +0 -1
  132. package/build/typescript/BottomSheet/BottomSheetNative.d.ts +0 -1
  133. package/build/typescript/BottomSheet/BottomSheetWeb.d.ts +0 -1
  134. package/build/typescript/BottomSheet/TransparentBackdrop.d.ts +0 -1
  135. package/build/typescript/Carousel/CarouselNative.d.ts +0 -1
  136. package/build/typescript/ComicViewer/ComicViewer.d.ts +0 -1
  137. package/build/typescript/DateTimePicker/DateTimePicker.d.ts +0 -1
  138. package/build/typescript/DateTimePicker/YearPicker.d.ts +0 -1
  139. package/build/typescript/FlipCard/FlipCard.d.ts +0 -1
  140. package/build/typescript/StatusBarProvider/StatusBarProvider.d.ts +0 -1
  141. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -1
  142. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -1
  143. package/build/typescript/hooks/useUnstableCollapsibleAppBar.d.ts +2 -2
  144. package/build/typescript/hooks/useUnstableToggleDisplayStyle.d.ts +2 -2
  145. package/package.json +10 -9
  146. package/src/AnimatedY/AnimatedY.tsx +13 -10
  147. package/src/FlipCard/FlipCard.tsx +8 -8
  148. package/src/ViewPager/ViewPagerNative.tsx +18 -11
  149. package/src/hooks/useHeight.ts +2 -2
  150. package/src/hooks/useUnstableCollapsibleAppBar.ts +57 -35
  151. package/src/hooks/useUnstableToggleDisplayStyle.ts +8 -6
  152. package/build/commonjs/hooks/useWidth.js +0 -29
  153. package/build/commonjs/hooks/useWidth.js.map +0 -1
  154. package/build/module/hooks/useWidth.js +0 -15
  155. package/build/module/hooks/useWidth.js.map +0 -1
  156. package/build/typescript/hooks/useWidth.d.ts +0 -2
  157. package/src/hooks/useWidth.ts +0 -17
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fountain-ui/lab",
3
- "version": "2.0.0-beta.6",
3
+ "version": "2.0.0-beta.9",
4
4
  "private": false,
5
5
  "author": "Fountain-UI Team",
6
6
  "description": "Incubator for Fountain-UI React components.",
@@ -15,8 +15,8 @@
15
15
  "prepare": "bob build"
16
16
  },
17
17
  "dependencies": {
18
- "@emotion/react": "^11.4.1",
19
- "@emotion/styled": "^11.0.0",
18
+ "@emotion/react": "^11.10.0",
19
+ "@emotion/styled": "^11.10.0",
20
20
  "@fountain-ui/icons": "^2.0.0-beta.6",
21
21
  "@fountain-ui/utils": "^2.0.0-beta.3",
22
22
  "react-native-calendars": "1.1267.0"
@@ -24,11 +24,12 @@
24
24
  "peerDependencies": {
25
25
  "@fountain-ui/core": "^2.0.0-beta.3",
26
26
  "@gorhom/bottom-sheet": "^4.1.3",
27
- "@react-native-community/viewpager": "> 4.2.x",
28
27
  "date-fns": "^2.0.0",
29
28
  "react": "^16.8.0 || ^17.0.0",
30
29
  "react-dom": "^16.8.0 || ^17.0.0",
31
30
  "react-native": "^0.63.0",
31
+ "react-native-gesture-handler": "^2.0.0",
32
+ "react-native-pager-view": "^5.0.0",
32
33
  "react-native-snap-carousel": "^3.9.0",
33
34
  "react-slick": "^0.25.0"
34
35
  },
@@ -36,9 +37,6 @@
36
37
  "@gorhom/bottom-sheet": {
37
38
  "optional": true
38
39
  },
39
- "@react-native-community/viewpager": {
40
- "optional": true
41
- },
42
40
  "react-dom": {
43
41
  "optional": true
44
42
  },
@@ -48,16 +46,19 @@
48
46
  "react-slick": {
49
47
  "optional": true
50
48
  },
49
+ "react-native-pager-view": {
50
+ "optional": true
51
+ },
51
52
  "react-native-snap-carousel": {
52
53
  "optional": true
53
54
  }
54
55
  },
55
56
  "devDependencies": {
56
57
  "@gorhom/bottom-sheet": "4.1.3",
57
- "@react-native-community/viewpager": "^4.2.2",
58
58
  "@types/react-native-snap-carousel": "^3.8.4",
59
59
  "@types/react-slick": "^0.23.5",
60
60
  "date-fns": "^2.23.0",
61
+ "react-native-pager-view": "^5.4.25",
61
62
  "react-native-safe-area-context": "^3.3.2",
62
63
  "react-native-snap-carousel": "^3.9.1",
63
64
  "react-slick": "^0.28.1"
@@ -84,5 +85,5 @@
84
85
  "publishConfig": {
85
86
  "access": "public"
86
87
  },
87
- "gitHead": "10ec965daab032df7f6e7e09f793de59b9b5f787"
88
+ "gitHead": "319e9f913cea57c5570e8b09a9ce410b3914d4f7"
88
89
  }
@@ -1,7 +1,13 @@
1
- import React from 'react';
2
- import Animated, { Easing } from 'react-native-reanimated';
1
+ import React, { useEffect } from 'react';
2
+ import type { WithTimingConfig } from 'react-native-reanimated';
3
+ import Animated, { Easing, useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
3
4
  import type AnimatedYProps from './AnimatedYProps';
4
5
 
6
+ const ANIMATION_CONFIG: Readonly<WithTimingConfig> = {
7
+ duration: 150,
8
+ easing: Easing.out(Easing.exp),
9
+ };
10
+
5
11
  export default function AnimatedY(props: AnimatedYProps) {
6
12
  const {
7
13
  children,
@@ -9,17 +15,14 @@ export default function AnimatedY(props: AnimatedYProps) {
9
15
  style,
10
16
  } = props;
11
17
 
12
- const animatedY = Animated.useSharedValue(translateY);
13
- const animatedStyle = Animated.useAnimatedStyle(() => ({
18
+ const animatedY = useSharedValue(translateY);
19
+ const animatedStyle = useAnimatedStyle(() => ({
14
20
  transform: [{ translateY: animatedY.value }],
15
- }));
21
+ }), []);
16
22
 
17
- React.useEffect(() => {
23
+ useEffect(() => {
18
24
  if (translateY >= 0) {
19
- animatedY.value = Animated.withTiming(translateY, {
20
- duration: 150,
21
- easing: Easing.out(Easing.exp),
22
- });
25
+ animatedY.value = withTiming(translateY, ANIMATION_CONFIG);
23
26
  }
24
27
  }, [translateY]);
25
28
 
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect } from 'react';
2
2
  import { StyleSheet, View } from 'react-native';
3
- import Animated from 'react-native-reanimated';
3
+ import Animated, { useAnimatedStyle, useSharedValue, withTiming } from 'react-native-reanimated';
4
4
  import type FlipCardProps from './FlipCardProps';
5
5
 
6
6
  const styles = StyleSheet.create({
@@ -27,9 +27,9 @@ export default function FlipCard(props: FlipCardProps) {
27
27
  style,
28
28
  } = props;
29
29
 
30
- const sharedAngle = Animated.useSharedValue(0);
30
+ const sharedAngle = useSharedValue(0);
31
31
 
32
- const animatedFrontCardStyle = Animated.useAnimatedStyle(() => {
32
+ const animatedFrontCardStyle = useAnimatedStyle(() => {
33
33
  return {
34
34
  zIndex: sharedAngle.value < Z_INDEX_CHANGE_ANGLE ? 2 : 1,
35
35
  transform: [
@@ -37,9 +37,9 @@ export default function FlipCard(props: FlipCardProps) {
37
37
  { rotateX: `${sharedAngle.value}deg` },
38
38
  ],
39
39
  };
40
- });
40
+ }, []);
41
41
 
42
- const animatedBackCardStyle = Animated.useAnimatedStyle(() => {
42
+ const animatedBackCardStyle = useAnimatedStyle(() => {
43
43
  return {
44
44
  zIndex: sharedAngle.value <= Z_INDEX_CHANGE_ANGLE ? 1 : 2,
45
45
  transform: [
@@ -47,11 +47,11 @@ export default function FlipCard(props: FlipCardProps) {
47
47
  { rotateX: `${(sharedAngle.value + 180)}deg` },
48
48
  ],
49
49
  };
50
- });
50
+ }, []);
51
51
 
52
52
  useEffect(() => {
53
53
  sharedAngle.value = 0;
54
- sharedAngle.value = Animated.withTiming(180, { duration: 500 });
54
+ sharedAngle.value = withTiming(180, { duration: 500 });
55
55
  }, [reanimationKey]);
56
56
 
57
57
  return (
@@ -65,4 +65,4 @@ export default function FlipCard(props: FlipCardProps) {
65
65
  </Animated.View>
66
66
  </View>
67
67
  );
68
- };
68
+ };
@@ -1,5 +1,6 @@
1
- import React from 'react';
2
- import RNViewPager, { ViewPagerOnPageSelectedEvent } from '@react-native-community/viewpager';
1
+ import React, { useCallback, useEffect, useRef } from 'react';
2
+ import type { PagerViewOnPageSelectedEvent } from 'react-native-pager-view';
3
+ import RNPagerView from 'react-native-pager-view';
3
4
  import type ViewPagerProps from './ViewPagerProps';
4
5
  import {
5
6
  defaultEnableNeighborPageRerender,
@@ -24,8 +25,8 @@ export default function ViewPager(props: ViewPagerProps) {
24
25
  style,
25
26
  } = props;
26
27
 
27
- const indexRef = React.useRef<number>(index);
28
- const pagerRef = React.useRef<RNViewPager | null>(null);
28
+ const indexRef = useRef<number>(index);
29
+ const pagerRef = useRef<RNPagerView | null>(null);
29
30
 
30
31
  const renderer = usePageRenderer({
31
32
  enableVisibleHint,
@@ -36,7 +37,7 @@ export default function ViewPager(props: ViewPagerProps) {
36
37
  enableNeighborPageRerender,
37
38
  });
38
39
 
39
- const handlePageSelected = React.useCallback((e: ViewPagerOnPageSelectedEvent) => {
40
+ const handlePageSelected = useCallback((e: PagerViewOnPageSelectedEvent) => {
40
41
  indexRef.current = e.nativeEvent.position;
41
42
 
42
43
  if (onChange) {
@@ -44,14 +45,20 @@ export default function ViewPager(props: ViewPagerProps) {
44
45
  }
45
46
  }, [onChange]);
46
47
 
47
- React.useEffect(() => {
48
- if (index !== indexRef.current) {
49
- pagerRef.current?.setPage(index);
50
- }
48
+ useEffect(() => {
49
+ const handleNumber = index !== indexRef.current
50
+ ? requestAnimationFrame(() => pagerRef.current?.setPage(index))
51
+ : undefined;
52
+
53
+ return () => {
54
+ if (handleNumber) {
55
+ cancelAnimationFrame(handleNumber);
56
+ }
57
+ };
51
58
  }, [index]);
52
59
 
53
60
  return (
54
- <RNViewPager
61
+ <RNPagerView
55
62
  initialPage={index}
56
63
  keyboardDismissMode={keyboardDismissMode}
57
64
  onPageSelected={handlePageSelected}
@@ -61,6 +68,6 @@ export default function ViewPager(props: ViewPagerProps) {
61
68
  style={style}
62
69
  >
63
70
  {renderer(children)}
64
- </RNViewPager>
71
+ </RNPagerView>
65
72
  );
66
73
  };
@@ -1,13 +1,13 @@
1
1
  import React from 'react';
2
2
  import { ViewProps } from 'react-native';
3
- import Animated from 'react-native-reanimated';
3
+ import { useWorkletCallback } from 'react-native-reanimated';
4
4
 
5
5
  type OnLayoutCallback = ViewProps['onLayout'];
6
6
 
7
7
  export default function useHeight(initialHeight = 0): [number, OnLayoutCallback] {
8
8
  const [height, setHeight] = React.useState<number>(initialHeight);
9
9
 
10
- const onLayout = Animated.useWorkletCallback((e) => {
10
+ const onLayout = useWorkletCallback((e) => {
11
11
  setHeight(e.nativeEvent.layout.height);
12
12
  }, []);
13
13
 
@@ -1,6 +1,13 @@
1
- import React, { useRef } from 'react';
1
+ import { useRef } from 'react';
2
2
  import { Falsy, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';
3
- import Animated from 'react-native-reanimated';
3
+ import type { SharedValue } from 'react-native-reanimated';
4
+ import {
5
+ useAnimatedScrollHandler,
6
+ useAnimatedStyle,
7
+ useDerivedValue,
8
+ useSharedValue,
9
+ withTiming,
10
+ } from 'react-native-reanimated';
4
11
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
5
12
  import useAppbarStyles from './useAppbarStyles';
6
13
  import useElevationStyle from './useElevationStyle';
@@ -27,7 +34,7 @@ export interface Options {
27
34
 
28
35
  export interface CollapsibleAppBar {
29
36
  appBarStyle: ViewStyleProp;
30
- vectorY: Animated.SharedValue<number>;
37
+ vectorY: SharedValue<number>;
31
38
  onAppBarLayout: OnLayoutCallback;
32
39
  onCollapsibleToolbarLayout: OnLayoutCallback;
33
40
  onScroll: OnScroll;
@@ -43,7 +50,6 @@ const ANIMATION_DURATION_MILLIS = 100;
43
50
 
44
51
  const SUPPORTS_DRAG_DETECTION = Platform.OS !== 'web';
45
52
 
46
-
47
53
  function useLargerValueOfLastTwoValues(value: number) {
48
54
  const refLatestTwoValues = useRef([0, 0]);
49
55
 
@@ -53,7 +59,6 @@ function useLargerValueOfLastTwoValues(value: number) {
53
59
  return Math.max(...refLatestTwoValues.current);
54
60
  }
55
61
 
56
-
57
62
  export default function useUnstableCollapsibleAppBar(userOptions: Options = defaultOptions): CollapsibleAppBar {
58
63
  const { shouldTranslateYReset }: Required<Options> = {
59
64
  ...defaultOptions,
@@ -68,38 +73,55 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
68
73
  const appBarMaxHeight = useLargerValueOfLastTwoValues(appBarHeight);
69
74
  const [collapsibleToolbarHeight, onCollapsibleToolbarLayout] = useHeight();
70
75
 
71
- const maxTranslateY = Animated.useDerivedValue(() => -collapsibleToolbarHeight);
76
+ const maxTranslateY = useDerivedValue(() => -collapsibleToolbarHeight, [collapsibleToolbarHeight]);
72
77
 
73
- const translateY = Animated.useSharedValue<number>(0);
74
- const lastTranslateY = Animated.useSharedValue<number>(0);
75
- const lastOffsetY = Animated.useSharedValue<number>(0);
76
- const prevOffsetY = Animated.useSharedValue<number>(0);
77
- const overlapped = Animated.useSharedValue<boolean>(false);
78
- const vectorY = Animated.useSharedValue<number>(0);
78
+ const translateY = useSharedValue<number>(0);
79
+ const lastTranslateY = useSharedValue<number>(0);
80
+ const lastOffsetY = useSharedValue<number>(0);
81
+ const prevOffsetY = useSharedValue<number>(0);
82
+ const overlapped = useSharedValue<boolean>(false);
83
+ const vectorY = useSharedValue<number>(0);
79
84
 
80
85
  const elevationStyle = useElevationStyle(4);
81
- const animatedStyle = Animated.useAnimatedStyle(() => {
82
- return Platform.OS === 'web' ? ({
83
- transform: [{ translateY: translateY.value }],
84
- boxShadow: overlapped.value ? elevationStyle?.boxShadow : 0,
85
- }) : ({
86
- transform: [{ translateY: translateY.value }],
87
- elevation: overlapped.value ? elevationStyle?.elevation : 0,
88
- shadowColor: elevationStyle?.shadowColor,
89
- shadowOffset: elevationStyle?.shadowOffset,
90
- shadowRadius: elevationStyle?.shadowRadius,
91
- shadowOpacity: overlapped.value ? elevationStyle?.shadowOpacity : 0,
92
- });
93
- });
94
-
95
- const indexRef = React.useRef<number>(0);
96
- const offsetsRef = React.useRef<Array<number>>([]);
86
+ const animatedStyle = useAnimatedStyle(() => {
87
+ const transform = [{ translateY: translateY.value }];
88
+
89
+ if (Platform.OS === 'web') {
90
+ return {
91
+ transform,
92
+ boxShadow: overlapped.value ? elevationStyle?.boxShadow : 0,
93
+ };
94
+ }
95
+ if (Platform.OS === 'android') {
96
+ return {
97
+ transform,
98
+ elevation: overlapped.value ? elevationStyle?.elevation : 0,
99
+ };
100
+ }
101
+ if (Platform.OS === 'ios') {
102
+ return {
103
+ transform,
104
+ shadowColor: elevationStyle?.shadowColor,
105
+ shadowOffset: elevationStyle?.shadowOffset,
106
+ shadowRadius: elevationStyle?.shadowRadius,
107
+ shadowOpacity: overlapped.value ? elevationStyle?.shadowOpacity : 0,
108
+ };
109
+ }
110
+ return {};
111
+ }, [
112
+ /**
113
+ * FIXME: Consider add `elevationStyle` to dependencies.
114
+ */
115
+ ]);
116
+
117
+ const indexRef = useRef<number>(0);
118
+ const offsetsRef = useRef<Array<number>>([]);
97
119
 
98
120
  const onScrollViewChanged = (nextIndex: number) => {
99
121
  const prevIndex = indexRef.current;
100
122
  if (prevIndex === nextIndex) {
101
123
  if (shouldTranslateYReset) {
102
- translateY.value = Animated.withTiming(0, {
124
+ translateY.value = withTiming(0, {
103
125
  duration: ANIMATION_DURATION_MILLIS,
104
126
  });
105
127
 
@@ -123,7 +145,7 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
123
145
 
124
146
  // If next ScrollView's offset is too short, expand app bar.
125
147
  if (translateY.value < 0 && savedOffsetY < appBarHeight) {
126
- translateY.value = Animated.withTiming(0, {
148
+ translateY.value = withTiming(0, {
127
149
  duration: ANIMATION_DURATION_MILLIS,
128
150
  });
129
151
 
@@ -131,7 +153,7 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
131
153
  }
132
154
  };
133
155
 
134
- const scrollHandler = Animated.useAnimatedScrollHandler({
156
+ const scrollHandler = useAnimatedScrollHandler({
135
157
  onBeginDrag: () => {
136
158
  lastTranslateY.value = translateY.value;
137
159
  },
@@ -157,13 +179,13 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
157
179
  } else {
158
180
  if (offsetY > -maxTy) {
159
181
  if (ty === 0) {
160
- translateY.value = Animated.withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {
182
+ translateY.value = withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {
161
183
  duration: ANIMATION_DURATION_MILLIS,
162
184
  });
163
185
  }
164
186
  } else {
165
187
  if (ty === maxTy) {
166
- translateY.value = Animated.withTiming(0, {
188
+ translateY.value = withTiming(0, {
167
189
  duration: ANIMATION_DURATION_MILLIS,
168
190
  });
169
191
  }
@@ -196,11 +218,11 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
196
218
 
197
219
  overlapped.value = offsetY + nextTranslateY > 0;
198
220
 
199
- translateY.value = Animated.withTiming(nextTranslateY, {
221
+ translateY.value = withTiming(nextTranslateY, {
200
222
  duration: ANIMATION_DURATION_MILLIS,
201
223
  });
202
224
  },
203
- });
225
+ }, []);
204
226
 
205
227
  const hasCollapsible = collapsibleToolbarHeight > 0;
206
228
 
@@ -1,13 +1,14 @@
1
- import Animated from 'react-native-reanimated';
1
+ import type { SharedValue } from 'react-native-reanimated';
2
+ import { useAnimatedReaction, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';
2
3
 
3
4
  export default function useAnimatedDisplayStyle(
4
- vectorY: Animated.SharedValue<number>,
5
+ vectorY: SharedValue<number>,
5
6
  threshold: number = 200,
6
7
  defaultDisplay: 'flex' | 'none' = 'flex',
7
8
  ) {
8
- const display = Animated.useSharedValue(defaultDisplay);
9
+ const display = useSharedValue(defaultDisplay);
9
10
 
10
- Animated.useAnimatedReaction(
11
+ useAnimatedReaction(
11
12
  () => vectorY.value,
12
13
  (vy) => {
13
14
  if (vy >= threshold) {
@@ -16,9 +17,10 @@ export default function useAnimatedDisplayStyle(
16
17
  display.value = 'flex';
17
18
  }
18
19
  },
20
+ [threshold],
19
21
  );
20
22
 
21
- return Animated.useAnimatedStyle(() => ({
23
+ return useAnimatedStyle(() => ({
22
24
  display: display.value,
23
- }));
25
+ }), []);
24
26
  };
@@ -1,29 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = useWidth;
7
-
8
- var _react = _interopRequireDefault(require("react"));
9
-
10
- var _reactNative = require("react-native");
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- function useWidth() {
15
- const window = (0, _reactNative.useWindowDimensions)();
16
-
17
- const [width, setWidth] = _react.default.useState(window.width);
18
-
19
- const onLayout = _react.default.useCallback(e => {
20
- const newWidth = e.nativeEvent.layout.width;
21
-
22
- if (newWidth > 0 && Math.round(newWidth) !== Math.round(width)) {
23
- setWidth(newWidth);
24
- }
25
- }, []);
26
-
27
- return [width, onLayout];
28
- }
29
- //# sourceMappingURL=useWidth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["useWidth.ts"],"names":["useWidth","window","width","setWidth","React","useState","onLayout","useCallback","e","newWidth","nativeEvent","layout","Math","round"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEe,SAASA,QAAT,GAAqD;AAChE,QAAMC,MAAM,GAAG,uCAAf;;AACA,QAAM,CAACC,KAAD,EAAQC,QAAR,IAAoBC,eAAMC,QAAN,CAAeJ,MAAM,CAACC,KAAtB,CAA1B;;AAEA,QAAMI,QAAQ,GAAGF,eAAMG,WAAN,CAAmBC,CAAD,IAA0B;AACzD,UAAMC,QAAQ,GAAGD,CAAC,CAACE,WAAF,CAAcC,MAAd,CAAqBT,KAAtC;;AAEA,QAAIO,QAAQ,GAAG,CAAX,IAAgBG,IAAI,CAACC,KAAL,CAAWJ,QAAX,MAAyBG,IAAI,CAACC,KAAL,CAAWX,KAAX,CAA7C,EAAgE;AAC5DC,MAAAA,QAAQ,CAACM,QAAD,CAAR;AACH;AACJ,GANgB,EAMd,EANc,CAAjB;;AAQA,SAAO,CAACP,KAAD,EAAQI,QAAR,CAAP;AACH","sourcesContent":["import React from 'react';\nimport { LayoutChangeEvent, useWindowDimensions, ViewProps } from 'react-native';\n\nexport default function useWidth(): [number, ViewProps['onLayout']] {\n const window = useWindowDimensions();\n const [width, setWidth] = React.useState(window.width);\n\n const onLayout = React.useCallback((e: LayoutChangeEvent) => {\n const newWidth = e.nativeEvent.layout.width;\n\n if (newWidth > 0 && Math.round(newWidth) !== Math.round(width)) {\n setWidth(newWidth);\n }\n }, []);\n\n return [width, onLayout];\n}"]}
@@ -1,15 +0,0 @@
1
- import React from 'react';
2
- import { useWindowDimensions } from 'react-native';
3
- export default function useWidth() {
4
- const window = useWindowDimensions();
5
- const [width, setWidth] = React.useState(window.width);
6
- const onLayout = React.useCallback(e => {
7
- const newWidth = e.nativeEvent.layout.width;
8
-
9
- if (newWidth > 0 && Math.round(newWidth) !== Math.round(width)) {
10
- setWidth(newWidth);
11
- }
12
- }, []);
13
- return [width, onLayout];
14
- }
15
- //# sourceMappingURL=useWidth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["useWidth.ts"],"names":["React","useWindowDimensions","useWidth","window","width","setWidth","useState","onLayout","useCallback","e","newWidth","nativeEvent","layout","Math","round"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAA4BC,mBAA5B,QAAkE,cAAlE;AAEA,eAAe,SAASC,QAAT,GAAqD;AAChE,QAAMC,MAAM,GAAGF,mBAAmB,EAAlC;AACA,QAAM,CAACG,KAAD,EAAQC,QAAR,IAAoBL,KAAK,CAACM,QAAN,CAAeH,MAAM,CAACC,KAAtB,CAA1B;AAEA,QAAMG,QAAQ,GAAGP,KAAK,CAACQ,WAAN,CAAmBC,CAAD,IAA0B;AACzD,UAAMC,QAAQ,GAAGD,CAAC,CAACE,WAAF,CAAcC,MAAd,CAAqBR,KAAtC;;AAEA,QAAIM,QAAQ,GAAG,CAAX,IAAgBG,IAAI,CAACC,KAAL,CAAWJ,QAAX,MAAyBG,IAAI,CAACC,KAAL,CAAWV,KAAX,CAA7C,EAAgE;AAC5DC,MAAAA,QAAQ,CAACK,QAAD,CAAR;AACH;AACJ,GANgB,EAMd,EANc,CAAjB;AAQA,SAAO,CAACN,KAAD,EAAQG,QAAR,CAAP;AACH","sourcesContent":["import React from 'react';\nimport { LayoutChangeEvent, useWindowDimensions, ViewProps } from 'react-native';\n\nexport default function useWidth(): [number, ViewProps['onLayout']] {\n const window = useWindowDimensions();\n const [width, setWidth] = React.useState(window.width);\n\n const onLayout = React.useCallback((e: LayoutChangeEvent) => {\n const newWidth = e.nativeEvent.layout.width;\n\n if (newWidth > 0 && Math.round(newWidth) !== Math.round(width)) {\n setWidth(newWidth);\n }\n }, []);\n\n return [width, onLayout];\n}"]}
@@ -1,2 +0,0 @@
1
- import { ViewProps } from 'react-native';
2
- export default function useWidth(): [number, ViewProps['onLayout']];
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- import { LayoutChangeEvent, useWindowDimensions, ViewProps } from 'react-native';
3
-
4
- export default function useWidth(): [number, ViewProps['onLayout']] {
5
- const window = useWindowDimensions();
6
- const [width, setWidth] = React.useState(window.width);
7
-
8
- const onLayout = React.useCallback((e: LayoutChangeEvent) => {
9
- const newWidth = e.nativeEvent.layout.width;
10
-
11
- if (newWidth > 0 && Math.round(newWidth) !== Math.round(width)) {
12
- setWidth(newWidth);
13
- }
14
- }, []);
15
-
16
- return [width, onLayout];
17
- }