@react-native-ohos/react-native-keyboard-controller 1.16.7 → 1.16.8

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 (182) hide show
  1. package/LICENSE +21 -21
  2. package/README.OpenSource +10 -10
  3. package/README.md +610 -19
  4. package/harmony/keyboard_controller/BuildProfile.ets +16 -16
  5. package/harmony/keyboard_controller/Index.ets +28 -28
  6. package/harmony/keyboard_controller/build-profile.json5 +31 -31
  7. package/harmony/keyboard_controller/hvigorfile.ts +6 -6
  8. package/harmony/keyboard_controller/obfuscation-rules.txt +17 -17
  9. package/harmony/keyboard_controller/oh-package-lock.json5 +28 -19
  10. package/harmony/keyboard_controller/oh-package.json5 +10 -10
  11. package/harmony/keyboard_controller/src/main/cpp/CMakeLists.txt +7 -7
  12. package/harmony/keyboard_controller/src/main/cpp/EventEmitters.cpp +119 -96
  13. package/harmony/keyboard_controller/src/main/cpp/EventEmitters.h +111 -111
  14. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentDescriptor.h +94 -94
  15. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentInstance.cpp +833 -287
  16. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentInstance.h +169 -103
  17. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewJSIBinder.h +65 -65
  18. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentDescriptor.h +79 -79
  19. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentInstance.cpp +107 -107
  20. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentInstance.h +83 -83
  21. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaJSIBinder.h +60 -60
  22. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardController.cpp +46 -46
  23. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardController.h +48 -48
  24. package/harmony/keyboard_controller/src/main/cpp/RNStatusBarManagerCompat.cpp +45 -45
  25. package/harmony/keyboard_controller/src/main/cpp/RNStatusBarManagerCompat.h +49 -49
  26. package/harmony/keyboard_controller/src/main/cpp/ViewHierarchyNavigator.cpp +186 -186
  27. package/harmony/keyboard_controller/src/main/cpp/ViewHierarchyNavigator.h +112 -112
  28. package/harmony/keyboard_controller/src/main/cpp/keyboardControllerPackage.cpp +64 -64
  29. package/harmony/keyboard_controller/src/main/cpp/keyboardControllerPackage.h +77 -77
  30. package/harmony/keyboard_controller/src/main/ets/Logger.ts +66 -66
  31. package/harmony/keyboard_controller/src/main/ets/RNKeyboardControllerPackage.ts +66 -66
  32. package/harmony/keyboard_controller/src/main/ets/RNKeyboardControllerTurboModule.ts +441 -273
  33. package/harmony/keyboard_controller/src/main/ets/RNStatusBarManagerCompatTurboModule.ts +128 -119
  34. package/harmony/keyboard_controller/src/main/ets/Type.ts +62 -62
  35. package/harmony/keyboard_controller/src/main/module.json5 +11 -11
  36. package/harmony/keyboard_controller/src/main/resources/base/element/string.json +8 -8
  37. package/harmony/keyboard_controller/src/main/resources/en_US/element/string.json +8 -8
  38. package/harmony/keyboard_controller/src/main/resources/zh_CN/element/string.json +8 -8
  39. package/harmony/keyboard_controller/ts.ts +29 -29
  40. package/harmony/keyboard_controller.har +0 -0
  41. package/lib/commonjs/animated.js +2 -2
  42. package/lib/commonjs/animated.js.map +1 -1
  43. package/lib/commonjs/bindings.js +3 -3
  44. package/lib/commonjs/bindings.js.map +1 -1
  45. package/lib/commonjs/bindings.native.js +3 -3
  46. package/lib/commonjs/bindings.native.js.map +1 -1
  47. package/lib/commonjs/components/KeyboardAvoidingView/hooks.js.map +1 -1
  48. package/lib/commonjs/components/KeyboardAvoidingView/index.js +3 -3
  49. package/lib/commonjs/components/KeyboardAvoidingView/index.js.map +1 -1
  50. package/lib/commonjs/components/KeyboardAwareScrollView/index.js +43 -41
  51. package/lib/commonjs/components/KeyboardAwareScrollView/index.js.map +1 -1
  52. package/lib/commonjs/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js +3 -3
  53. package/lib/commonjs/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js.map +1 -1
  54. package/lib/commonjs/components/KeyboardAwareScrollView/utils.js.map +1 -1
  55. package/lib/commonjs/components/KeyboardStickyView/index.js.map +1 -1
  56. package/lib/commonjs/components/KeyboardToolbar/Arrow.js.map +1 -1
  57. package/lib/commonjs/components/KeyboardToolbar/Button.js.map +1 -1
  58. package/lib/commonjs/components/KeyboardToolbar/colors.js.map +1 -1
  59. package/lib/commonjs/components/KeyboardToolbar/colors.native.js.map +1 -1
  60. package/lib/commonjs/components/KeyboardToolbar/index.js +3 -3
  61. package/lib/commonjs/components/KeyboardToolbar/index.js.map +1 -1
  62. package/lib/commonjs/components/KeyboardToolbar/types.js.map +1 -1
  63. package/lib/commonjs/components/hooks/useColorScheme.js.map +1 -1
  64. package/lib/commonjs/components/index.js.map +1 -1
  65. package/lib/commonjs/constants.js.map +1 -1
  66. package/lib/commonjs/context.js +0 -1
  67. package/lib/commonjs/context.js.map +1 -1
  68. package/lib/commonjs/hooks/index.js.map +1 -1
  69. package/lib/commonjs/hooks/useWindowDimensions/index.android.js.map +1 -1
  70. package/lib/commonjs/hooks/useWindowDimensions/index.js.map +1 -1
  71. package/lib/commonjs/index.js.map +1 -1
  72. package/lib/commonjs/internal.js +18 -18
  73. package/lib/commonjs/internal.js.map +1 -1
  74. package/lib/commonjs/module.js.map +1 -1
  75. package/lib/commonjs/monkey-patch.android.js +4 -4
  76. package/lib/commonjs/monkey-patch.android.js.map +1 -1
  77. package/lib/commonjs/monkey-patch.js.map +1 -1
  78. package/lib/commonjs/reanimated.js.map +1 -1
  79. package/lib/commonjs/reanimated.native.js.map +1 -1
  80. package/lib/commonjs/specs/KeyboardControllerViewNativeComponent.js.map +1 -1
  81. package/lib/commonjs/specs/KeyboardGestureAreaNativeComponent.js.map +1 -1
  82. package/lib/commonjs/specs/NativeKeyboardController.js.map +1 -1
  83. package/lib/commonjs/specs/NativeStatusBarManagerCompat.js.map +1 -1
  84. package/lib/commonjs/specs/OverKeyboardViewNativeComponent.js.map +1 -1
  85. package/lib/commonjs/types.js.map +1 -1
  86. package/lib/commonjs/utils.js.map +1 -1
  87. package/lib/commonjs/views/OverKeyboardView/index.js.map +1 -1
  88. package/lib/commonjs/views/index.js.map +1 -1
  89. package/lib/module/animated.js +2 -2
  90. package/lib/module/animated.js.map +1 -1
  91. package/lib/module/bindings.js +3 -3
  92. package/lib/module/bindings.js.map +1 -1
  93. package/lib/module/bindings.native.js +3 -3
  94. package/lib/module/bindings.native.js.map +1 -1
  95. package/lib/module/components/KeyboardAvoidingView/hooks.js.map +1 -1
  96. package/lib/module/components/KeyboardAvoidingView/index.js +3 -3
  97. package/lib/module/components/KeyboardAvoidingView/index.js.map +1 -1
  98. package/lib/module/components/KeyboardAwareScrollView/index.js +44 -42
  99. package/lib/module/components/KeyboardAwareScrollView/index.js.map +1 -1
  100. package/lib/module/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js +3 -3
  101. package/lib/module/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js.map +1 -1
  102. package/lib/module/components/KeyboardAwareScrollView/utils.js.map +1 -1
  103. package/lib/module/components/KeyboardStickyView/index.js.map +1 -1
  104. package/lib/module/components/KeyboardToolbar/Arrow.js.map +1 -1
  105. package/lib/module/components/KeyboardToolbar/Button.js.map +1 -1
  106. package/lib/module/components/KeyboardToolbar/colors.js.map +1 -1
  107. package/lib/module/components/KeyboardToolbar/colors.native.js.map +1 -1
  108. package/lib/module/components/KeyboardToolbar/index.js +3 -3
  109. package/lib/module/components/KeyboardToolbar/index.js.map +1 -1
  110. package/lib/module/components/KeyboardToolbar/types.js.map +1 -1
  111. package/lib/module/components/hooks/useColorScheme.js.map +1 -1
  112. package/lib/module/components/index.js.map +1 -1
  113. package/lib/module/constants.js.map +1 -1
  114. package/lib/module/context.js +0 -1
  115. package/lib/module/context.js.map +1 -1
  116. package/lib/module/hooks/index.js.map +1 -1
  117. package/lib/module/hooks/useWindowDimensions/index.android.js.map +1 -1
  118. package/lib/module/hooks/useWindowDimensions/index.js.map +1 -1
  119. package/lib/module/index.js.map +1 -1
  120. package/lib/module/internal.js +18 -18
  121. package/lib/module/internal.js.map +1 -1
  122. package/lib/module/module.js.map +1 -1
  123. package/lib/module/monkey-patch.android.js +4 -4
  124. package/lib/module/monkey-patch.android.js.map +1 -1
  125. package/lib/module/monkey-patch.js.map +1 -1
  126. package/lib/module/reanimated.js.map +1 -1
  127. package/lib/module/reanimated.native.js.map +1 -1
  128. package/lib/module/specs/KeyboardControllerViewNativeComponent.js.map +1 -1
  129. package/lib/module/specs/KeyboardGestureAreaNativeComponent.js.map +1 -1
  130. package/lib/module/specs/NativeKeyboardController.js.map +1 -1
  131. package/lib/module/specs/NativeStatusBarManagerCompat.js.map +1 -1
  132. package/lib/module/specs/OverKeyboardViewNativeComponent.js.map +1 -1
  133. package/lib/module/types.js.map +1 -1
  134. package/lib/module/utils.js.map +1 -1
  135. package/lib/module/views/OverKeyboardView/index.js.map +1 -1
  136. package/lib/module/views/index.js.map +1 -1
  137. package/lib/typescript/bindings.d.ts +3 -4
  138. package/lib/typescript/bindings.native.d.ts +0 -1
  139. package/lib/typescript/components/KeyboardAwareScrollView/index.d.ts +6 -6
  140. package/lib/typescript/components/KeyboardAwareScrollView/utils.d.ts +1 -1
  141. package/lib/typescript/components/KeyboardStickyView/index.d.ts +5 -5
  142. package/lib/typescript/components/KeyboardToolbar/Button.d.ts +2 -1
  143. package/lib/typescript/types.d.ts +1 -0
  144. package/package.json +177 -174
  145. package/src/animated.tsx +255 -255
  146. package/src/bindings.native.ts +62 -62
  147. package/src/bindings.ts +42 -42
  148. package/src/components/KeyboardAvoidingView/hooks.ts +123 -123
  149. package/src/components/KeyboardAvoidingView/index.tsx +188 -188
  150. package/src/components/KeyboardAwareScrollView/index.tsx +397 -389
  151. package/src/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.ts +133 -133
  152. package/src/components/KeyboardAwareScrollView/utils.ts +41 -41
  153. package/src/components/KeyboardStickyView/index.tsx +66 -66
  154. package/src/components/KeyboardToolbar/Arrow.tsx +80 -80
  155. package/src/components/KeyboardToolbar/Button.tsx +98 -98
  156. package/src/components/KeyboardToolbar/colors.native.ts +37 -37
  157. package/src/components/KeyboardToolbar/colors.ts +16 -16
  158. package/src/components/KeyboardToolbar/index.tsx +223 -223
  159. package/src/components/KeyboardToolbar/types.ts +40 -40
  160. package/src/components/hooks/useColorScheme.ts +5 -5
  161. package/src/components/index.ts +11 -11
  162. package/src/constants.ts +19 -19
  163. package/src/context.ts +68 -69
  164. package/src/hooks/index.ts +90 -90
  165. package/src/hooks/useWindowDimensions/index.android.ts +38 -38
  166. package/src/hooks/useWindowDimensions/index.ts +1 -1
  167. package/src/index.ts +23 -23
  168. package/src/internal.ts +84 -84
  169. package/src/module.ts +52 -52
  170. package/src/monkey-patch.android.ts +44 -44
  171. package/src/monkey-patch.ts +4 -4
  172. package/src/reanimated.native.ts +132 -132
  173. package/src/reanimated.ts +29 -29
  174. package/src/specs/KeyboardControllerViewNativeComponent.ts +71 -71
  175. package/src/specs/KeyboardGestureAreaNativeComponent.ts +20 -20
  176. package/src/specs/NativeKeyboardController.ts +19 -19
  177. package/src/specs/NativeStatusBarManagerCompat.ts +14 -14
  178. package/src/specs/OverKeyboardViewNativeComponent.ts +12 -12
  179. package/src/types.ts +244 -243
  180. package/src/utils.ts +1 -1
  181. package/src/views/OverKeyboardView/index.tsx +43 -43
  182. package/src/views/index.ts +1 -1
@@ -1,133 +1,133 @@
1
- import { Platform } from "react-native";
2
- import {
3
- Easing,
4
- useAnimatedReaction,
5
- useSharedValue,
6
- withTiming,
7
- } from "react-native-reanimated";
8
-
9
- import { useKeyboardHandler } from "../../hooks";
10
-
11
- const IS_ANDROID_ELEVEN_OR_HIGHER =
12
- Platform.OS === "android" && Platform.Version >= 30;
13
- // on these platforms keyboard transitions will be smooth
14
- const IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS =
15
- IS_ANDROID_ELEVEN_OR_HIGHER || Platform.OS === "ios" || Platform.OS as string === 'harmony';
16
- // on Android Telegram is not using androidx.core values and uses custom interpolation
17
- // duration is taken from here: https://github.com/DrKLO/Telegram/blob/e9a35cea54c06277c69d41b8e25d94b5d7ede065/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AdjustPanLayoutHelper.java#L39
18
- // and bezier is taken from: https://github.com/DrKLO/Telegram/blob/e9a35cea54c06277c69d41b8e25d94b5d7ede065/TMessagesProj/src/main/java/androidx/recyclerview/widget/ChatListItemAnimator.java#L40
19
- const TELEGRAM_ANDROID_TIMING_CONFIG = {
20
- duration: 250,
21
- easing: Easing.bezier(
22
- 0.19919472913616398,
23
- 0.010644531250000006,
24
- 0.27920937042459737,
25
- 0.91025390625,
26
- ),
27
- };
28
-
29
- /**
30
- * Hook that uses default transitions for iOS and Android > 11, and uses
31
- * custom interpolation on Android < 11 to achieve more smooth animation
32
- */
33
- export const useSmoothKeyboardHandler: typeof useKeyboardHandler = (
34
- handler,
35
- deps,
36
- ) => {
37
- const target = useSharedValue(-1);
38
- const height = useSharedValue(0);
39
- const persistedHeight = useSharedValue(0);
40
- const animatedKeyboardHeight = useSharedValue(0);
41
-
42
- useAnimatedReaction(
43
- () => {
44
- if (IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS) {
45
- return;
46
- }
47
- if (persistedHeight.value === 0) {
48
- return;
49
- }
50
- const event = {
51
- // it'll be always `TELEGRAM_ANDROID_TIMING_CONFIG.duration`, since we're running animation via `withTiming`
52
- duration: TELEGRAM_ANDROID_TIMING_CONFIG.duration,
53
- target: target.value,
54
- height: animatedKeyboardHeight.value,
55
- progress: animatedKeyboardHeight.value / persistedHeight.value,
56
- };
57
- return event;
58
- },
59
- (evt) => {
60
- if (!evt) {
61
- return;
62
- }
63
- handler.onMove?.(evt);
64
-
65
- // dispatch `onEnd`
66
- if (evt.height === height.value) {
67
- handler.onEnd?.(evt);
68
- // eslint-disable-next-line react-compiler/react-compiler
69
- persistedHeight.value = height.value;
70
- }
71
- },
72
- // REA uses own version of `DependencyList` and it's not compatible with the same type from React
73
- deps as unknown[],
74
- );
75
-
76
- useKeyboardHandler(
77
- {
78
- onStart: (e) => {
79
- "worklet";
80
-
81
- // immediately dispatch onStart/onEnd events if onStart dispatched with the same height
82
- // and don't wait for animation 250ms
83
- if (
84
- !IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS &&
85
- e.height === persistedHeight.value
86
- ) {
87
- handler.onStart?.(e);
88
- handler.onEnd?.(e);
89
-
90
- return;
91
- }
92
-
93
- target.value = e.target;
94
- height.value = e.height;
95
-
96
- if (e.height > 0) {
97
- persistedHeight.value = e.height;
98
- }
99
- // if we are running on Android < 9, then we are using custom interpolation
100
- // to achieve smoother animation and use `animatedKeyboardHeight` as animation
101
- // driver
102
- if (!IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS) {
103
- animatedKeyboardHeight.value = withTiming(
104
- e.height,
105
- TELEGRAM_ANDROID_TIMING_CONFIG,
106
- );
107
- }
108
-
109
- handler.onStart?.({
110
- ...e,
111
- duration: IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS
112
- ? e.duration
113
- : TELEGRAM_ANDROID_TIMING_CONFIG.duration,
114
- });
115
- },
116
- onMove: (e) => {
117
- "worklet";
118
-
119
- if (IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS) {
120
- handler.onMove?.(e);
121
- }
122
- },
123
- onEnd: (e) => {
124
- "worklet";
125
-
126
- if (IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS) {
127
- handler.onEnd?.(e);
128
- }
129
- },
130
- },
131
- deps,
132
- );
133
- };
1
+ import { Platform } from "react-native";
2
+ import {
3
+ Easing,
4
+ useAnimatedReaction,
5
+ useSharedValue,
6
+ withTiming,
7
+ } from "react-native-reanimated";
8
+
9
+ import { useKeyboardHandler } from "../../hooks";
10
+
11
+ const IS_ANDROID_ELEVEN_OR_HIGHER =
12
+ Platform.OS === "android" && Platform.Version >= 30;
13
+ // on these platforms keyboard transitions will be smooth
14
+ const IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS =
15
+ IS_ANDROID_ELEVEN_OR_HIGHER || Platform.OS === "ios" || Platform.OS as string === 'harmony';
16
+ // on Android Telegram is not using androidx.core values and uses custom interpolation
17
+ // duration is taken from here: https://github.com/DrKLO/Telegram/blob/e9a35cea54c06277c69d41b8e25d94b5d7ede065/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AdjustPanLayoutHelper.java#L39
18
+ // and bezier is taken from: https://github.com/DrKLO/Telegram/blob/e9a35cea54c06277c69d41b8e25d94b5d7ede065/TMessagesProj/src/main/java/androidx/recyclerview/widget/ChatListItemAnimator.java#L40
19
+ const TELEGRAM_ANDROID_TIMING_CONFIG = {
20
+ duration: 250,
21
+ easing: Easing.bezier(
22
+ 0.19919472913616398,
23
+ 0.010644531250000006,
24
+ 0.27920937042459737,
25
+ 0.91025390625,
26
+ ),
27
+ };
28
+
29
+ /**
30
+ * Hook that uses default transitions for iOS and Android > 11, and uses
31
+ * custom interpolation on Android < 11 to achieve more smooth animation
32
+ */
33
+ export const useSmoothKeyboardHandler: typeof useKeyboardHandler = (
34
+ handler,
35
+ deps,
36
+ ) => {
37
+ const target = useSharedValue(-1);
38
+ const height = useSharedValue(0);
39
+ const persistedHeight = useSharedValue(0);
40
+ const animatedKeyboardHeight = useSharedValue(0);
41
+
42
+ useAnimatedReaction(
43
+ () => {
44
+ if (IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS) {
45
+ return;
46
+ }
47
+ if (persistedHeight.value === 0) {
48
+ return;
49
+ }
50
+ const event = {
51
+ // it'll be always `TELEGRAM_ANDROID_TIMING_CONFIG.duration`, since we're running animation via `withTiming`
52
+ duration: TELEGRAM_ANDROID_TIMING_CONFIG.duration,
53
+ target: target.value,
54
+ height: animatedKeyboardHeight.value,
55
+ progress: animatedKeyboardHeight.value / persistedHeight.value,
56
+ };
57
+ return event;
58
+ },
59
+ (evt) => {
60
+ if (!evt) {
61
+ return;
62
+ }
63
+ handler.onMove?.(evt);
64
+
65
+ // dispatch `onEnd`
66
+ if (evt.height === height.value) {
67
+ handler.onEnd?.(evt);
68
+ // eslint-disable-next-line react-compiler/react-compiler
69
+ persistedHeight.value = height.value;
70
+ }
71
+ },
72
+ // REA uses own version of `DependencyList` and it's not compatible with the same type from React
73
+ deps as unknown[],
74
+ );
75
+
76
+ useKeyboardHandler(
77
+ {
78
+ onStart: (e) => {
79
+ "worklet";
80
+
81
+ // immediately dispatch onStart/onEnd events if onStart dispatched with the same height
82
+ // and don't wait for animation 250ms
83
+ if (
84
+ !IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS &&
85
+ e.height === persistedHeight.value
86
+ ) {
87
+ handler.onStart?.(e);
88
+ handler.onEnd?.(e);
89
+
90
+ return;
91
+ }
92
+
93
+ target.value = e.target;
94
+ height.value = e.height;
95
+
96
+ if (e.height > 0) {
97
+ persistedHeight.value = e.height;
98
+ }
99
+ // if we are running on Android < 9, then we are using custom interpolation
100
+ // to achieve smoother animation and use `animatedKeyboardHeight` as animation
101
+ // driver
102
+ if (!IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS) {
103
+ animatedKeyboardHeight.value = withTiming(
104
+ e.height,
105
+ TELEGRAM_ANDROID_TIMING_CONFIG,
106
+ );
107
+ }
108
+
109
+ handler.onStart?.({
110
+ ...e,
111
+ duration: IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS
112
+ ? e.duration
113
+ : TELEGRAM_ANDROID_TIMING_CONFIG.duration,
114
+ });
115
+ },
116
+ onMove: (e) => {
117
+ "worklet";
118
+
119
+ if (IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS) {
120
+ handler.onMove?.(e);
121
+ }
122
+ },
123
+ onEnd: (e) => {
124
+ "worklet";
125
+
126
+ if (IS_ANDROID_ELEVEN_OR_HIGHER_OR_IOS) {
127
+ handler.onEnd?.(e);
128
+ }
129
+ },
130
+ },
131
+ deps,
132
+ );
133
+ };
@@ -1,41 +1,41 @@
1
- export const debounce = <F extends (...args: Parameters<F>) => ReturnType<F>>(
2
- worklet: F,
3
- wait = 0,
4
- ) => {
5
- "worklet";
6
-
7
- const value = {
8
- time: 0,
9
- };
10
-
11
- return (...args: Parameters<F>): ReturnType<F> | void => {
12
- "worklet";
13
-
14
- const t = Date.now();
15
- const now = t - value.time;
16
-
17
- if (now < wait) {
18
- value.time = t;
19
- return;
20
- }
21
-
22
- value.time = t;
23
-
24
- return worklet(...args);
25
- };
26
- };
27
-
28
- export const scrollDistanceWithRespectToSnapPoints = (
29
- defaultScrollValue: number,
30
- snapPoints?: number[],
31
- ) => {
32
- "worklet";
33
-
34
- let snapPoint: number | undefined;
35
-
36
- if (snapPoints) {
37
- snapPoint = snapPoints.find((offset) => offset >= defaultScrollValue);
38
- }
39
-
40
- return snapPoint ?? defaultScrollValue;
41
- };
1
+ export const debounce = <F extends (...args: Parameters<F>) => ReturnType<F>>(
2
+ worklet: F,
3
+ wait = 0,
4
+ ) => {
5
+ "worklet";
6
+
7
+ const value = {
8
+ time: 0,
9
+ };
10
+
11
+ return (...args: Parameters<F>): ReturnType<F> | void => {
12
+ "worklet";
13
+
14
+ const t = Date.now();
15
+ const now = t - value.time;
16
+
17
+ if (now < wait) {
18
+ value.time = t;
19
+ return;
20
+ }
21
+
22
+ value.time = t;
23
+
24
+ return worklet(...args);
25
+ };
26
+ };
27
+
28
+ export const scrollDistanceWithRespectToSnapPoints = (
29
+ defaultScrollValue: number,
30
+ snapPoints?: number[],
31
+ ) => {
32
+ "worklet";
33
+
34
+ let snapPoint: number | undefined;
35
+
36
+ if (snapPoints) {
37
+ snapPoint = snapPoints.find((offset) => offset >= defaultScrollValue);
38
+ }
39
+
40
+ return snapPoint ?? defaultScrollValue;
41
+ };
@@ -1,66 +1,66 @@
1
- import React, { forwardRef, useMemo } from "react";
2
- import Reanimated, {
3
- interpolate,
4
- useAnimatedStyle,
5
- } from "react-native-reanimated";
6
-
7
- import { useReanimatedKeyboardAnimation } from "../../hooks";
8
-
9
- import type { View, ViewProps } from "react-native";
10
-
11
- export type KeyboardStickyViewProps = {
12
- /**
13
- * Specify additional offset to the view for given keyboard state.
14
- */
15
- offset?: {
16
- /**
17
- * Adds additional `translateY` when keyboard is close. By default `0`.
18
- */
19
- closed?: number;
20
- /**
21
- * Adds additional `translateY` when keyboard is open. By default `0`.
22
- */
23
- opened?: number;
24
- };
25
-
26
- /** Controls whether this `KeyboardStickyView` instance should take effect. Default is `true` */
27
- enabled?: boolean;
28
- } & ViewProps;
29
-
30
- const KeyboardStickyView = forwardRef<
31
- View,
32
- React.PropsWithChildren<KeyboardStickyViewProps>
33
- >(
34
- (
35
- {
36
- children,
37
- offset: { closed = 0, opened = 0 } = {},
38
- style,
39
- enabled = true,
40
- ...props
41
- },
42
- ref,
43
- ) => {
44
- const { height, progress } = useReanimatedKeyboardAnimation();
45
- const stickyViewStyle = useAnimatedStyle(() => {
46
- const offset = interpolate(progress.value, [0, 1], [closed, opened]);
47
-
48
- return {
49
- transform: [{ translateY: enabled ? height.value + offset : closed }],
50
- };
51
- }, [closed, opened, enabled]);
52
-
53
- const styles = useMemo(
54
- () => [style, stickyViewStyle],
55
- [style, stickyViewStyle],
56
- );
57
-
58
- return (
59
- <Reanimated.View ref={ref} style={styles} {...props}>
60
- {children}
61
- </Reanimated.View>
62
- );
63
- },
64
- );
65
-
66
- export default KeyboardStickyView;
1
+ import React, { forwardRef, useMemo } from "react";
2
+ import Reanimated, {
3
+ interpolate,
4
+ useAnimatedStyle,
5
+ } from "react-native-reanimated";
6
+
7
+ import { useReanimatedKeyboardAnimation } from "../../hooks";
8
+
9
+ import type { View, ViewProps } from "react-native";
10
+
11
+ export type KeyboardStickyViewProps = {
12
+ /**
13
+ * Specify additional offset to the view for given keyboard state.
14
+ */
15
+ offset?: {
16
+ /**
17
+ * Adds additional `translateY` when keyboard is close. By default `0`.
18
+ */
19
+ closed?: number;
20
+ /**
21
+ * Adds additional `translateY` when keyboard is open. By default `0`.
22
+ */
23
+ opened?: number;
24
+ };
25
+
26
+ /** Controls whether this `KeyboardStickyView` instance should take effect. Default is `true` */
27
+ enabled?: boolean;
28
+ } & ViewProps;
29
+
30
+ const KeyboardStickyView = forwardRef<
31
+ View,
32
+ React.PropsWithChildren<KeyboardStickyViewProps>
33
+ >(
34
+ (
35
+ {
36
+ children,
37
+ offset: { closed = 0, opened = 0 } = {},
38
+ style,
39
+ enabled = true,
40
+ ...props
41
+ },
42
+ ref,
43
+ ) => {
44
+ const { height, progress } = useReanimatedKeyboardAnimation();
45
+ const stickyViewStyle = useAnimatedStyle(() => {
46
+ const offset = interpolate(progress.value, [0, 1], [closed, opened]);
47
+
48
+ return {
49
+ transform: [{ translateY: enabled ? height.value + offset : closed }],
50
+ };
51
+ }, [closed, opened, enabled]);
52
+
53
+ const styles = useMemo(
54
+ () => [style, stickyViewStyle],
55
+ [style, stickyViewStyle],
56
+ );
57
+
58
+ return (
59
+ <Reanimated.View ref={ref} style={styles} {...props}>
60
+ {children}
61
+ </Reanimated.View>
62
+ );
63
+ },
64
+ );
65
+
66
+ export default KeyboardStickyView;
@@ -1,80 +1,80 @@
1
- import React, { useMemo } from "react";
2
- import { Animated, StyleSheet, View } from "react-native";
3
-
4
- import useColorScheme from "../hooks/useColorScheme";
5
-
6
- import type { KeyboardToolbarTheme } from "./types";
7
- import type { ViewStyle } from "react-native";
8
-
9
- type ArrowProps = {
10
- type: "prev" | "next";
11
- disabled?: boolean;
12
- theme: KeyboardToolbarTheme;
13
- };
14
-
15
- const ArrowComponent: React.FC<ArrowProps> = ({ type, disabled, theme }) => {
16
- const colorScheme = useColorScheme();
17
-
18
- const color = useMemo(
19
- () => ({
20
- backgroundColor: disabled
21
- ? theme[colorScheme].disabled
22
- : theme[colorScheme].primary,
23
- }),
24
- [disabled, theme, colorScheme],
25
- );
26
- const left = useMemo(() => [styles.arrowLeftLine, color], [color]);
27
- const right = useMemo(() => [styles.arrowRightLine, color], [color]);
28
-
29
- return (
30
- <View
31
- style={
32
- type === "next" ? styles.arrowDownContainer : styles.arrowUpContainer
33
- }
34
- >
35
- <View style={styles.arrow}>
36
- <Animated.View style={left} />
37
- <Animated.View style={right} />
38
- </View>
39
- </View>
40
- );
41
- };
42
-
43
- const arrowLine: ViewStyle = {
44
- width: 13,
45
- height: 2,
46
- borderRadius: 1,
47
- };
48
- const arrowUpContainer: ViewStyle = {
49
- marginHorizontal: 5,
50
- width: 30,
51
- height: 30,
52
- justifyContent: "center",
53
- alignItems: "center",
54
- };
55
- const styles = StyleSheet.create({
56
- arrowUpContainer: arrowUpContainer,
57
- arrowDownContainer: {
58
- ...arrowUpContainer,
59
- transform: [{ rotate: "180deg" }],
60
- },
61
- arrow: {
62
- width: 20,
63
- height: 20,
64
- flexDirection: "row",
65
- alignItems: "center",
66
- justifyContent: "space-between",
67
- },
68
- arrowLeftLine: {
69
- ...arrowLine,
70
- transform: [{ rotate: "-45deg" }],
71
- left: -0.5,
72
- },
73
- arrowRightLine: {
74
- ...arrowLine,
75
- transform: [{ rotate: "45deg" }],
76
- left: -5.5,
77
- },
78
- });
79
-
80
- export default ArrowComponent;
1
+ import React, { useMemo } from "react";
2
+ import { Animated, StyleSheet, View } from "react-native";
3
+
4
+ import useColorScheme from "../hooks/useColorScheme";
5
+
6
+ import type { KeyboardToolbarTheme } from "./types";
7
+ import type { ViewStyle } from "react-native";
8
+
9
+ type ArrowProps = {
10
+ type: "prev" | "next";
11
+ disabled?: boolean;
12
+ theme: KeyboardToolbarTheme;
13
+ };
14
+
15
+ const ArrowComponent: React.FC<ArrowProps> = ({ type, disabled, theme }) => {
16
+ const colorScheme = useColorScheme();
17
+
18
+ const color = useMemo(
19
+ () => ({
20
+ backgroundColor: disabled
21
+ ? theme[colorScheme].disabled
22
+ : theme[colorScheme].primary,
23
+ }),
24
+ [disabled, theme, colorScheme],
25
+ );
26
+ const left = useMemo(() => [styles.arrowLeftLine, color], [color]);
27
+ const right = useMemo(() => [styles.arrowRightLine, color], [color]);
28
+
29
+ return (
30
+ <View
31
+ style={
32
+ type === "next" ? styles.arrowDownContainer : styles.arrowUpContainer
33
+ }
34
+ >
35
+ <View style={styles.arrow}>
36
+ <Animated.View style={left} />
37
+ <Animated.View style={right} />
38
+ </View>
39
+ </View>
40
+ );
41
+ };
42
+
43
+ const arrowLine: ViewStyle = {
44
+ width: 13,
45
+ height: 2,
46
+ borderRadius: 1,
47
+ };
48
+ const arrowUpContainer: ViewStyle = {
49
+ marginHorizontal: 5,
50
+ width: 30,
51
+ height: 30,
52
+ justifyContent: "center",
53
+ alignItems: "center",
54
+ };
55
+ const styles = StyleSheet.create({
56
+ arrowUpContainer: arrowUpContainer,
57
+ arrowDownContainer: {
58
+ ...arrowUpContainer,
59
+ transform: [{ rotate: "180deg" }],
60
+ },
61
+ arrow: {
62
+ width: 20,
63
+ height: 20,
64
+ flexDirection: "row",
65
+ alignItems: "center",
66
+ justifyContent: "space-between",
67
+ },
68
+ arrowLeftLine: {
69
+ ...arrowLine,
70
+ transform: [{ rotate: "-45deg" }],
71
+ left: -0.5,
72
+ },
73
+ arrowRightLine: {
74
+ ...arrowLine,
75
+ transform: [{ rotate: "45deg" }],
76
+ left: -5.5,
77
+ },
78
+ });
79
+
80
+ export default ArrowComponent;