@fountain-ui/lab 2.0.0-beta.1 → 2.0.0-beta.10

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 (160) 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 +2 -2
  30. package/build/commonjs/DateTimePicker/DateTimePicker.js.map +1 -1
  31. package/build/commonjs/DateTimePicker/DateTimePickerProps.js.map +1 -1
  32. package/build/commonjs/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  33. package/build/commonjs/DateTimePicker/YearPicker.js +21 -17
  34. package/build/commonjs/DateTimePicker/YearPicker.js.map +1 -1
  35. package/build/commonjs/DateTimePicker/index.js +4 -4
  36. package/build/commonjs/DateTimePicker/index.js.map +1 -1
  37. package/build/commonjs/DateTimePicker/utils.js +2 -1
  38. package/build/commonjs/DateTimePicker/utils.js.map +1 -1
  39. package/build/commonjs/FlipCard/FlipCard.js +7 -13
  40. package/build/commonjs/FlipCard/FlipCard.js.map +1 -1
  41. package/build/commonjs/FlipCard/FlipCardProps.js.map +1 -1
  42. package/build/commonjs/FlipCard/index.js.map +1 -1
  43. package/build/commonjs/StatusBarProvider/Provider.js +1 -1
  44. package/build/commonjs/StatusBarProvider/Provider.js.map +1 -1
  45. package/build/commonjs/StatusBarProvider/StatusBarProvider.js.map +1 -1
  46. package/build/commonjs/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  47. package/build/commonjs/StatusBarProvider/index.js.map +1 -1
  48. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +1 -1
  49. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +1 -1
  50. package/build/commonjs/ViewPager/ViewPagerNative.js +19 -16
  51. package/build/commonjs/ViewPager/ViewPagerNative.js.map +1 -1
  52. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  53. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +1 -1
  54. package/build/commonjs/ViewPager/index.js.map +1 -1
  55. package/build/commonjs/ViewPager/index.native.js.map +1 -1
  56. package/build/commonjs/ViewPager/utils.js +13 -11
  57. package/build/commonjs/ViewPager/utils.js.map +1 -1
  58. package/build/commonjs/hooks/index.js.map +1 -1
  59. package/build/commonjs/hooks/useAppbarStyles.js.map +1 -1
  60. package/build/commonjs/hooks/useElevationStyle.js.map +1 -1
  61. package/build/commonjs/hooks/useHeight.js +5 -4
  62. package/build/commonjs/hooks/useHeight.js.map +1 -1
  63. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +56 -57
  64. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  65. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js +9 -11
  66. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  67. package/build/commonjs/index.js +10 -10
  68. package/build/commonjs/index.js.map +1 -1
  69. package/build/module/AnimatedY/AnimatedY.js +11 -10
  70. package/build/module/AnimatedY/AnimatedY.js.map +1 -1
  71. package/build/module/AnimatedY/AnimatedYProps.js.map +1 -1
  72. package/build/module/AnimatedY/index.js.map +1 -1
  73. package/build/module/BottomSheet/BottomSheetNative.js +1 -1
  74. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  75. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  76. package/build/module/BottomSheet/BottomSheetWeb.js +2 -6
  77. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  78. package/build/module/BottomSheet/TransparentBackdrop.js +1 -1
  79. package/build/module/BottomSheet/TransparentBackdrop.js.map +1 -1
  80. package/build/module/BottomSheet/index.js.map +1 -1
  81. package/build/module/BottomSheet/index.native.js.map +1 -1
  82. package/build/module/Carousel/CarouselNative.js.map +1 -1
  83. package/build/module/Carousel/CarouselProps.js.map +1 -1
  84. package/build/module/Carousel/CarouselWeb.js +1 -1
  85. package/build/module/Carousel/CarouselWeb.js.map +1 -1
  86. package/build/module/Carousel/index.js.map +1 -1
  87. package/build/module/Carousel/index.native.js.map +1 -1
  88. package/build/module/Carousel/utils.js.map +1 -1
  89. package/build/module/ComicViewer/ComicViewer.js +16 -11
  90. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  91. package/build/module/ComicViewer/ComicViewerItemProps.js.map +1 -1
  92. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  93. package/build/module/ComicViewer/ViewerItem.js +4 -3
  94. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  95. package/build/module/ComicViewer/index.js.map +1 -1
  96. package/build/module/DateTimePicker/DateTimePicker.js +2 -2
  97. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  98. package/build/module/DateTimePicker/DateTimePickerProps.js.map +1 -1
  99. package/build/module/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  100. package/build/module/DateTimePicker/YearPicker.js +21 -17
  101. package/build/module/DateTimePicker/YearPicker.js.map +1 -1
  102. package/build/module/DateTimePicker/index.js.map +1 -1
  103. package/build/module/DateTimePicker/utils.js +2 -1
  104. package/build/module/DateTimePicker/utils.js.map +1 -1
  105. package/build/module/FlipCard/FlipCard.js +7 -7
  106. package/build/module/FlipCard/FlipCard.js.map +1 -1
  107. package/build/module/FlipCard/FlipCardProps.js.map +1 -1
  108. package/build/module/FlipCard/index.js.map +1 -1
  109. package/build/module/StatusBarProvider/Provider.js.map +1 -1
  110. package/build/module/StatusBarProvider/StatusBarProvider.js.map +1 -1
  111. package/build/module/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  112. package/build/module/StatusBarProvider/index.js.map +1 -1
  113. package/build/module/ViewPager/ChildrenMemoizedPage.js +1 -1
  114. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +1 -1
  115. package/build/module/ViewPager/ViewPagerNative.js +14 -9
  116. package/build/module/ViewPager/ViewPagerNative.js.map +1 -1
  117. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  118. package/build/module/ViewPager/ViewPagerWeb.js.map +1 -1
  119. package/build/module/ViewPager/index.js.map +1 -1
  120. package/build/module/ViewPager/index.native.js.map +1 -1
  121. package/build/module/ViewPager/utils.js +11 -10
  122. package/build/module/ViewPager/utils.js.map +1 -1
  123. package/build/module/hooks/index.js.map +1 -1
  124. package/build/module/hooks/useAppbarStyles.js.map +1 -1
  125. package/build/module/hooks/useElevationStyle.js.map +1 -1
  126. package/build/module/hooks/useHeight.js +4 -3
  127. package/build/module/hooks/useHeight.js.map +1 -1
  128. package/build/module/hooks/useUnstableCollapsibleAppBar.js +58 -43
  129. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  130. package/build/module/hooks/useUnstableToggleDisplayStyle.js +9 -7
  131. package/build/module/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  132. package/build/module/index.js.map +1 -1
  133. package/build/typescript/AnimatedY/AnimatedY.d.ts +0 -1
  134. package/build/typescript/BottomSheet/BottomSheetNative.d.ts +0 -1
  135. package/build/typescript/BottomSheet/BottomSheetWeb.d.ts +0 -1
  136. package/build/typescript/BottomSheet/TransparentBackdrop.d.ts +0 -1
  137. package/build/typescript/Carousel/CarouselNative.d.ts +0 -1
  138. package/build/typescript/ComicViewer/ComicViewer.d.ts +0 -1
  139. package/build/typescript/DateTimePicker/DateTimePicker.d.ts +0 -1
  140. package/build/typescript/DateTimePicker/YearPicker.d.ts +0 -1
  141. package/build/typescript/FlipCard/FlipCard.d.ts +0 -1
  142. package/build/typescript/StatusBarProvider/StatusBarProvider.d.ts +0 -1
  143. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -1
  144. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -1
  145. package/build/typescript/hooks/useUnstableCollapsibleAppBar.d.ts +2 -3
  146. package/build/typescript/hooks/useUnstableToggleDisplayStyle.d.ts +2 -2
  147. package/package.json +13 -13
  148. package/src/AnimatedY/AnimatedY.tsx +13 -10
  149. package/src/DateTimePicker/DateTimePicker.tsx +2 -2
  150. package/src/FlipCard/FlipCard.tsx +8 -8
  151. package/src/ViewPager/ViewPagerNative.tsx +16 -9
  152. package/src/hooks/useHeight.ts +2 -2
  153. package/src/hooks/useUnstableCollapsibleAppBar.ts +59 -42
  154. package/src/hooks/useUnstableToggleDisplayStyle.ts +8 -6
  155. package/build/commonjs/hooks/useWidth.js +0 -29
  156. package/build/commonjs/hooks/useWidth.js.map +0 -1
  157. package/build/module/hooks/useWidth.js +0 -15
  158. package/build/module/hooks/useWidth.js.map +0 -1
  159. package/build/typescript/hooks/useWidth.d.ts +0 -2
  160. 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.1",
3
+ "version": "2.0.0-beta.10",
4
4
  "private": false,
5
5
  "author": "Fountain-UI Team",
6
6
  "description": "Incubator for Fountain-UI React components.",
@@ -15,20 +15,21 @@
15
15
  "prepare": "bob build"
16
16
  },
17
17
  "dependencies": {
18
- "@emotion/react": "^11.4.1",
19
- "@emotion/styled": "^11.0.0",
20
- "@fountain-ui/icons": "^2.0.0-beta.1",
21
- "@fountain-ui/utils": "^2.0.0-beta.1",
18
+ "@emotion/react": "^11.10.0",
19
+ "@emotion/styled": "^11.10.0",
20
+ "@fountain-ui/icons": "^2.0.0-beta.6",
21
+ "@fountain-ui/utils": "^2.0.0-beta.3",
22
22
  "react-native-calendars": "1.1267.0"
23
23
  },
24
24
  "peerDependencies": {
25
- "@fountain-ui/core": "^2.0.0-beta.1",
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": "^4.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,17 +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
- "@fountain-ui/core": "^2.0.0-beta.1",
57
57
  "@gorhom/bottom-sheet": "4.1.3",
58
- "@react-native-community/viewpager": "^4.2.2",
59
58
  "@types/react-native-snap-carousel": "^3.8.4",
60
59
  "@types/react-slick": "^0.23.5",
61
60
  "date-fns": "^2.23.0",
61
+ "react-native-pager-view": "^4.2.4",
62
62
  "react-native-safe-area-context": "^3.3.2",
63
63
  "react-native-snap-carousel": "^3.9.1",
64
64
  "react-slick": "^0.28.1"
@@ -85,5 +85,5 @@
85
85
  "publishConfig": {
86
86
  "access": "public"
87
87
  },
88
- "gitHead": "5883a0d99faaaf1233350572aaee88054151c102"
88
+ "gitHead": "0ac49f4ca5f910fc8b5edad2593300d796b2d914"
89
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
 
@@ -82,8 +82,8 @@ export default function DateTimePicker(props: DateTimePickerProps) {
82
82
  />
83
83
  )}
84
84
  theme={{
85
- backgroundColor: theme.palette.background.default,
86
- calendarBackground: theme.palette.background.default,
85
+ backgroundColor: theme.palette.paper.default,
86
+ calendarBackground: theme.palette.paper.default,
87
87
  dayTextColor: theme.palette.text.primary,
88
88
  textDisabledColor: theme.palette.text.hint,
89
89
  }}
@@ -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 { ViewPagerOnPageSelectedEvent } from 'react-native-pager-view';
3
+ import RNViewPager 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<RNViewPager | 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: ViewPagerOnPageSelectedEvent) => {
40
41
  indexRef.current = e.nativeEvent.position;
41
42
 
42
43
  if (onChange) {
@@ -44,10 +45,16 @@ 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 (
@@ -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';
@@ -22,13 +29,12 @@ export interface ContentInsets {
22
29
  }
23
30
 
24
31
  export interface Options {
25
- translucent?: boolean;
26
32
  shouldTranslateYReset?: boolean;
27
33
  }
28
34
 
29
35
  export interface CollapsibleAppBar {
30
36
  appBarStyle: ViewStyleProp;
31
- vectorY: Animated.SharedValue<number>;
37
+ vectorY: SharedValue<number>;
32
38
  onAppBarLayout: OnLayoutCallback;
33
39
  onCollapsibleToolbarLayout: OnLayoutCallback;
34
40
  onScroll: OnScroll;
@@ -37,7 +43,6 @@ export interface CollapsibleAppBar {
37
43
  }
38
44
 
39
45
  const defaultOptions: Required<Options> = {
40
- translucent: false,
41
46
  shouldTranslateYReset: false,
42
47
  };
43
48
 
@@ -45,7 +50,6 @@ const ANIMATION_DURATION_MILLIS = 100;
45
50
 
46
51
  const SUPPORTS_DRAG_DETECTION = Platform.OS !== 'web';
47
52
 
48
-
49
53
  function useLargerValueOfLastTwoValues(value: number) {
50
54
  const refLatestTwoValues = useRef([0, 0]);
51
55
 
@@ -55,12 +59,8 @@ function useLargerValueOfLastTwoValues(value: number) {
55
59
  return Math.max(...refLatestTwoValues.current);
56
60
  }
57
61
 
58
-
59
62
  export default function useUnstableCollapsibleAppBar(userOptions: Options = defaultOptions): CollapsibleAppBar {
60
- const {
61
- translucent,
62
- shouldTranslateYReset,
63
- }: Required<Options> = {
63
+ const { shouldTranslateYReset }: Required<Options> = {
64
64
  ...defaultOptions,
65
65
  ...userOptions,
66
66
  };
@@ -73,38 +73,55 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
73
73
  const appBarMaxHeight = useLargerValueOfLastTwoValues(appBarHeight);
74
74
  const [collapsibleToolbarHeight, onCollapsibleToolbarLayout] = useHeight();
75
75
 
76
- const maxTranslateY = Animated.useDerivedValue(() => -collapsibleToolbarHeight);
76
+ const maxTranslateY = useDerivedValue(() => -collapsibleToolbarHeight, [collapsibleToolbarHeight]);
77
77
 
78
- const translateY = Animated.useSharedValue<number>(0);
79
- const lastTranslateY = Animated.useSharedValue<number>(0);
80
- const lastOffsetY = Animated.useSharedValue<number>(0);
81
- const prevOffsetY = Animated.useSharedValue<number>(0);
82
- const overlapped = Animated.useSharedValue<boolean>(false);
83
- 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);
84
84
 
85
85
  const elevationStyle = useElevationStyle(4);
86
- const animatedStyle = Animated.useAnimatedStyle(() => {
87
- return Platform.OS === 'web' ? ({
88
- transform: [{ translateY: translateY.value }],
89
- boxShadow: overlapped.value ? elevationStyle?.boxShadow : 0,
90
- }) : ({
91
- transform: [{ translateY: translateY.value }],
92
- elevation: overlapped.value ? elevationStyle?.elevation : 0,
93
- shadowColor: elevationStyle?.shadowColor,
94
- shadowOffset: elevationStyle?.shadowOffset,
95
- shadowRadius: elevationStyle?.shadowRadius,
96
- shadowOpacity: overlapped.value ? elevationStyle?.shadowOpacity : 0,
97
- });
98
- });
99
-
100
- const indexRef = React.useRef<number>(0);
101
- 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>>([]);
102
119
 
103
120
  const onScrollViewChanged = (nextIndex: number) => {
104
121
  const prevIndex = indexRef.current;
105
122
  if (prevIndex === nextIndex) {
106
123
  if (shouldTranslateYReset) {
107
- translateY.value = Animated.withTiming(0, {
124
+ translateY.value = withTiming(0, {
108
125
  duration: ANIMATION_DURATION_MILLIS,
109
126
  });
110
127
 
@@ -128,7 +145,7 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
128
145
 
129
146
  // If next ScrollView's offset is too short, expand app bar.
130
147
  if (translateY.value < 0 && savedOffsetY < appBarHeight) {
131
- translateY.value = Animated.withTiming(0, {
148
+ translateY.value = withTiming(0, {
132
149
  duration: ANIMATION_DURATION_MILLIS,
133
150
  });
134
151
 
@@ -136,7 +153,7 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
136
153
  }
137
154
  };
138
155
 
139
- const scrollHandler = Animated.useAnimatedScrollHandler({
156
+ const scrollHandler = useAnimatedScrollHandler({
140
157
  onBeginDrag: () => {
141
158
  lastTranslateY.value = translateY.value;
142
159
  },
@@ -162,13 +179,13 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
162
179
  } else {
163
180
  if (offsetY > -maxTy) {
164
181
  if (ty === 0) {
165
- translateY.value = Animated.withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {
182
+ translateY.value = withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {
166
183
  duration: ANIMATION_DURATION_MILLIS,
167
184
  });
168
185
  }
169
186
  } else {
170
187
  if (ty === maxTy) {
171
- translateY.value = Animated.withTiming(0, {
188
+ translateY.value = withTiming(0, {
172
189
  duration: ANIMATION_DURATION_MILLIS,
173
190
  });
174
191
  }
@@ -201,17 +218,17 @@ export default function useUnstableCollapsibleAppBar(userOptions: Options = defa
201
218
 
202
219
  overlapped.value = offsetY + nextTranslateY > 0;
203
220
 
204
- translateY.value = Animated.withTiming(nextTranslateY, {
221
+ translateY.value = withTiming(nextTranslateY, {
205
222
  duration: ANIMATION_DURATION_MILLIS,
206
223
  });
207
224
  },
208
- });
225
+ }, []);
209
226
 
210
227
  const hasCollapsible = collapsibleToolbarHeight > 0;
211
228
 
212
229
  const appBarStyle = [
213
230
  animatedStyle,
214
- translucent ? { paddingTop: safeAreaInsets.top } : undefined,
231
+ { paddingTop: safeAreaInsets.top },
215
232
  hasCollapsible ? styles.floating : undefined,
216
233
  ];
217
234
 
@@ -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
- }