@react-native-ohos/react-native-keyboard-controller 1.17.0-beta.2 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/LICENSE +21 -21
  2. package/README.OpenSource +11 -11
  3. package/README.md +686 -19
  4. package/harmony/keyboard_controller/BuildProfile.ets +16 -16
  5. package/harmony/keyboard_controller/Index.ets +29 -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 -18
  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/ClippingScrollViewComponentDescriptor.h +86 -0
  13. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewComponentInstance.cpp +104 -0
  14. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewComponentInstance.h +64 -0
  15. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewJSIBinder.h +60 -0
  16. package/harmony/keyboard_controller/src/main/cpp/EventEmitters.cpp +119 -96
  17. package/harmony/keyboard_controller/src/main/cpp/EventEmitters.h +111 -111
  18. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentDescriptor.h +94 -94
  19. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentInstance.cpp +840 -288
  20. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentInstance.h +169 -103
  21. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewJSIBinder.h +65 -65
  22. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentDescriptor.h +79 -79
  23. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentInstance.cpp +108 -108
  24. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentInstance.h +83 -83
  25. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaJSIBinder.h +60 -60
  26. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentDescriptor.h +46 -0
  27. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentInstance.cpp +37 -0
  28. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentInstance.h +32 -0
  29. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewJSIBinder.h +23 -0
  30. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardController.cpp +103 -46
  31. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardController.h +48 -48
  32. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardControllerPackage.h +20 -0
  33. package/harmony/keyboard_controller/src/main/cpp/RNStatusBarManagerCompat.cpp +45 -45
  34. package/harmony/keyboard_controller/src/main/cpp/RNStatusBarManagerCompat.h +49 -49
  35. package/harmony/keyboard_controller/src/main/cpp/ViewHierarchyNavigator.cpp +207 -186
  36. package/harmony/keyboard_controller/src/main/cpp/ViewHierarchyNavigator.h +131 -112
  37. package/harmony/keyboard_controller/src/main/cpp/keyboardControllerPackage.cpp +77 -64
  38. package/harmony/keyboard_controller/src/main/cpp/keyboardControllerPackage.h +85 -77
  39. package/harmony/keyboard_controller/src/main/ets/Logger.ts +66 -66
  40. package/harmony/keyboard_controller/src/main/ets/{RNKeyboardControllerPackage.ts → RNKeyboardControllerPackage.ets} +70 -66
  41. package/harmony/keyboard_controller/src/main/ets/RNKeyboardControllerTurboModule.ts +465 -273
  42. package/harmony/keyboard_controller/src/main/ets/RNStatusBarManagerCompatTurboModule.ts +128 -119
  43. package/harmony/keyboard_controller/src/main/ets/Type.ts +63 -62
  44. package/harmony/keyboard_controller/src/main/module.json5 +11 -11
  45. package/harmony/keyboard_controller/src/main/resources/base/element/string.json +8 -8
  46. package/harmony/keyboard_controller/src/main/resources/en_US/element/string.json +8 -8
  47. package/harmony/keyboard_controller/src/main/resources/zh_CN/element/string.json +8 -8
  48. package/harmony/keyboard_controller/{ts.ts → ts.ets} +29 -29
  49. package/harmony/keyboard_controller.har +0 -0
  50. package/lib/commonjs/animated.js +22 -11
  51. package/lib/commonjs/animated.js.map +1 -1
  52. package/lib/commonjs/architecture.js +8 -0
  53. package/lib/commonjs/architecture.js.map +1 -0
  54. package/lib/commonjs/bindings.js +40 -5
  55. package/lib/commonjs/bindings.js.map +1 -1
  56. package/lib/commonjs/bindings.native.js +28 -5
  57. package/lib/commonjs/bindings.native.js.map +1 -1
  58. package/lib/commonjs/compat.js +50 -0
  59. package/lib/commonjs/compat.js.map +1 -0
  60. package/lib/commonjs/components/KeyboardAvoidingView/hooks.js +21 -15
  61. package/lib/commonjs/components/KeyboardAvoidingView/hooks.js.map +1 -1
  62. package/lib/commonjs/components/KeyboardAvoidingView/index.js +39 -14
  63. package/lib/commonjs/components/KeyboardAvoidingView/index.js.map +1 -1
  64. package/lib/commonjs/components/KeyboardAwareScrollView/index.js +94 -57
  65. package/lib/commonjs/components/KeyboardAwareScrollView/index.js.map +1 -1
  66. package/lib/commonjs/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js +5 -5
  67. package/lib/commonjs/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js.map +1 -1
  68. package/lib/commonjs/components/KeyboardAwareScrollView/utils.js.map +1 -1
  69. package/lib/commonjs/components/KeyboardChatScrollView/hooks.js +13 -0
  70. package/lib/commonjs/components/KeyboardChatScrollView/hooks.js.map +1 -0
  71. package/lib/commonjs/components/KeyboardChatScrollView/index.js +122 -0
  72. package/lib/commonjs/components/KeyboardChatScrollView/index.js.map +1 -0
  73. package/lib/commonjs/components/KeyboardChatScrollView/types.js +6 -0
  74. package/lib/commonjs/components/KeyboardChatScrollView/types.js.map +1 -0
  75. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/helpers.js +221 -0
  76. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/helpers.js.map +1 -0
  77. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js +149 -0
  78. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js.map +1 -0
  79. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.js +240 -0
  80. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.js.map +1 -0
  81. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/types.js +6 -0
  82. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/types.js.map +1 -0
  83. package/lib/commonjs/components/KeyboardChatScrollView/useEndVisible.js +40 -0
  84. package/lib/commonjs/components/KeyboardChatScrollView/useEndVisible.js.map +1 -0
  85. package/lib/commonjs/components/KeyboardChatScrollView/useExtraContentPadding/index.js +92 -0
  86. package/lib/commonjs/components/KeyboardChatScrollView/useExtraContentPadding/index.js.map +1 -0
  87. package/lib/commonjs/components/KeyboardStickyView/index.js.map +1 -1
  88. package/lib/commonjs/components/KeyboardToolbar/Arrow.js +2 -3
  89. package/lib/commonjs/components/KeyboardToolbar/Arrow.js.map +1 -1
  90. package/lib/commonjs/components/KeyboardToolbar/Button.js +2 -3
  91. package/lib/commonjs/components/KeyboardToolbar/Button.js.map +1 -1
  92. package/lib/commonjs/components/KeyboardToolbar/colors.js.map +1 -1
  93. package/lib/commonjs/components/KeyboardToolbar/colors.native.js.map +1 -1
  94. package/lib/commonjs/components/KeyboardToolbar/compound/components/Background.js +13 -0
  95. package/lib/commonjs/components/KeyboardToolbar/compound/components/Background.js.map +1 -0
  96. package/lib/commonjs/components/KeyboardToolbar/compound/components/Content.js +25 -0
  97. package/lib/commonjs/components/KeyboardToolbar/compound/components/Content.js.map +1 -0
  98. package/lib/commonjs/components/KeyboardToolbar/compound/components/Done.js +58 -0
  99. package/lib/commonjs/components/KeyboardToolbar/compound/components/Done.js.map +1 -0
  100. package/lib/commonjs/components/KeyboardToolbar/compound/components/Next.js +49 -0
  101. package/lib/commonjs/components/KeyboardToolbar/compound/components/Next.js.map +1 -0
  102. package/lib/commonjs/components/KeyboardToolbar/compound/components/Prev.js +49 -0
  103. package/lib/commonjs/components/KeyboardToolbar/compound/components/Prev.js.map +1 -0
  104. package/lib/commonjs/components/KeyboardToolbar/compound/components/index.js +42 -0
  105. package/lib/commonjs/components/KeyboardToolbar/compound/components/index.js.map +1 -0
  106. package/lib/commonjs/components/KeyboardToolbar/compound/components/types.js +6 -0
  107. package/lib/commonjs/components/KeyboardToolbar/compound/components/types.js.map +1 -0
  108. package/lib/commonjs/components/KeyboardToolbar/compound/context.js +17 -0
  109. package/lib/commonjs/components/KeyboardToolbar/compound/context.js.map +1 -0
  110. package/lib/commonjs/components/KeyboardToolbar/constants.js +17 -0
  111. package/lib/commonjs/components/KeyboardToolbar/constants.js.map +1 -0
  112. package/lib/commonjs/components/KeyboardToolbar/index.js +98 -87
  113. package/lib/commonjs/components/KeyboardToolbar/index.js.map +1 -1
  114. package/lib/commonjs/components/KeyboardToolbar/types.js.map +1 -1
  115. package/lib/commonjs/components/ScrollViewWithBottomPadding/index.js +120 -0
  116. package/lib/commonjs/components/ScrollViewWithBottomPadding/index.js.map +1 -0
  117. package/lib/commonjs/components/ScrollViewWithBottomPadding/styles.js +15 -0
  118. package/lib/commonjs/components/ScrollViewWithBottomPadding/styles.js.map +1 -0
  119. package/lib/commonjs/components/hooks/useColorScheme.js.map +1 -1
  120. package/lib/commonjs/components/hooks/useCombinedRef.js +24 -0
  121. package/lib/commonjs/components/hooks/useCombinedRef.js.map +1 -0
  122. package/lib/commonjs/components/hooks/useScrollState.js +62 -0
  123. package/lib/commonjs/components/hooks/useScrollState.js.map +1 -0
  124. package/lib/commonjs/components/index.js +7 -0
  125. package/lib/commonjs/components/index.js.map +1 -1
  126. package/lib/commonjs/constants.js +3 -1
  127. package/lib/commonjs/constants.js.map +1 -1
  128. package/lib/commonjs/context.js +1 -0
  129. package/lib/commonjs/context.js.map +1 -1
  130. package/lib/commonjs/hooks/index.js +14 -1
  131. package/lib/commonjs/hooks/index.js.map +1 -1
  132. package/lib/commonjs/hooks/useKeyboardState/index.js +39 -0
  133. package/lib/commonjs/hooks/useKeyboardState/index.js.map +1 -0
  134. package/lib/commonjs/hooks/useWindowDimensions/index.android.js.map +1 -1
  135. package/lib/commonjs/hooks/useWindowDimensions/index.js.map +1 -1
  136. package/lib/commonjs/index.js +27 -1
  137. package/lib/commonjs/index.js.map +1 -1
  138. package/lib/commonjs/internal.js +54 -18
  139. package/lib/commonjs/internal.js.map +1 -1
  140. package/lib/commonjs/module.js +21 -12
  141. package/lib/commonjs/module.js.map +1 -1
  142. package/lib/commonjs/reanimated.js.map +1 -1
  143. package/lib/commonjs/reanimated.native.js.map +1 -1
  144. package/lib/commonjs/specs/ClippingScrollViewDecoratorViewNativeComponent.js +12 -0
  145. package/lib/commonjs/specs/ClippingScrollViewDecoratorViewNativeComponent.js.map +1 -0
  146. package/lib/commonjs/specs/KeyboardControllerViewNativeComponent.js +8 -2
  147. package/lib/commonjs/specs/KeyboardControllerViewNativeComponent.js.map +1 -1
  148. package/lib/commonjs/specs/KeyboardGestureAreaNativeComponent.js +2 -1
  149. package/lib/commonjs/specs/KeyboardGestureAreaNativeComponent.js.map +1 -1
  150. package/lib/commonjs/specs/KeyboardToolbarGroupViewNativeComponent.js +12 -0
  151. package/lib/commonjs/specs/KeyboardToolbarGroupViewNativeComponent.js.map +1 -0
  152. package/lib/commonjs/specs/NativeKeyboardController.js.map +1 -1
  153. package/lib/commonjs/specs/NativeStatusBarManagerCompat.js.map +1 -1
  154. package/lib/commonjs/specs/OverKeyboardViewNativeComponent.js.map +1 -1
  155. package/lib/commonjs/types.js.map +1 -1
  156. package/lib/commonjs/utils/findNodeHandle/index.js +9 -0
  157. package/lib/commonjs/utils/findNodeHandle/index.js.map +1 -0
  158. package/lib/commonjs/utils/findNodeHandle/index.native.js +13 -0
  159. package/lib/commonjs/utils/findNodeHandle/index.native.js.map +1 -0
  160. package/lib/commonjs/utils.js.map +1 -1
  161. package/lib/commonjs/views/KeyboardExtender/index.js +30 -0
  162. package/lib/commonjs/views/KeyboardExtender/index.js.map +1 -0
  163. package/lib/commonjs/views/OverKeyboardView/index.js.map +1 -1
  164. package/lib/commonjs/views/index.js +7 -0
  165. package/lib/commonjs/views/index.js.map +1 -1
  166. package/lib/module/animated.js +24 -13
  167. package/lib/module/animated.js.map +1 -1
  168. package/lib/module/architecture.js +2 -0
  169. package/lib/module/architecture.js.map +1 -0
  170. package/lib/module/bindings.js +39 -5
  171. package/lib/module/bindings.js.map +1 -1
  172. package/lib/module/bindings.native.js +27 -5
  173. package/lib/module/bindings.native.js.map +1 -1
  174. package/lib/module/compat.js +43 -0
  175. package/lib/module/compat.js.map +1 -0
  176. package/lib/module/components/KeyboardAvoidingView/hooks.js +22 -16
  177. package/lib/module/components/KeyboardAvoidingView/hooks.js.map +1 -1
  178. package/lib/module/components/KeyboardAvoidingView/index.js +38 -14
  179. package/lib/module/components/KeyboardAvoidingView/index.js.map +1 -1
  180. package/lib/module/components/KeyboardAwareScrollView/index.js +97 -60
  181. package/lib/module/components/KeyboardAwareScrollView/index.js.map +1 -1
  182. package/lib/module/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js +5 -5
  183. package/lib/module/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js.map +1 -1
  184. package/lib/module/components/KeyboardAwareScrollView/utils.js.map +1 -1
  185. package/lib/module/components/KeyboardChatScrollView/hooks.js +2 -0
  186. package/lib/module/components/KeyboardChatScrollView/hooks.js.map +1 -0
  187. package/lib/module/components/KeyboardChatScrollView/index.js +115 -0
  188. package/lib/module/components/KeyboardChatScrollView/index.js.map +1 -0
  189. package/lib/module/components/KeyboardChatScrollView/types.js +2 -0
  190. package/lib/module/components/KeyboardChatScrollView/types.js.map +1 -0
  191. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/helpers.js +207 -0
  192. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/helpers.js.map +1 -0
  193. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js +143 -0
  194. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js.map +1 -0
  195. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.js +234 -0
  196. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.js.map +1 -0
  197. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/types.js +2 -0
  198. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/types.js.map +1 -0
  199. package/lib/module/components/KeyboardChatScrollView/useEndVisible.js +33 -0
  200. package/lib/module/components/KeyboardChatScrollView/useEndVisible.js.map +1 -0
  201. package/lib/module/components/KeyboardChatScrollView/useExtraContentPadding/index.js +87 -0
  202. package/lib/module/components/KeyboardChatScrollView/useExtraContentPadding/index.js.map +1 -0
  203. package/lib/module/components/KeyboardStickyView/index.js.map +1 -1
  204. package/lib/module/components/KeyboardToolbar/Arrow.js +2 -2
  205. package/lib/module/components/KeyboardToolbar/Arrow.js.map +1 -1
  206. package/lib/module/components/KeyboardToolbar/Button.js +2 -2
  207. package/lib/module/components/KeyboardToolbar/Button.js.map +1 -1
  208. package/lib/module/components/KeyboardToolbar/colors.js.map +1 -1
  209. package/lib/module/components/KeyboardToolbar/colors.native.js.map +1 -1
  210. package/lib/module/components/KeyboardToolbar/compound/components/Background.js +6 -0
  211. package/lib/module/components/KeyboardToolbar/compound/components/Background.js.map +1 -0
  212. package/lib/module/components/KeyboardToolbar/compound/components/Content.js +18 -0
  213. package/lib/module/components/KeyboardToolbar/compound/components/Content.js.map +1 -0
  214. package/lib/module/components/KeyboardToolbar/compound/components/Done.js +50 -0
  215. package/lib/module/components/KeyboardToolbar/compound/components/Done.js.map +1 -0
  216. package/lib/module/components/KeyboardToolbar/compound/components/Next.js +41 -0
  217. package/lib/module/components/KeyboardToolbar/compound/components/Next.js.map +1 -0
  218. package/lib/module/components/KeyboardToolbar/compound/components/Prev.js +41 -0
  219. package/lib/module/components/KeyboardToolbar/compound/components/Prev.js.map +1 -0
  220. package/lib/module/components/KeyboardToolbar/compound/components/index.js +6 -0
  221. package/lib/module/components/KeyboardToolbar/compound/components/index.js.map +1 -0
  222. package/lib/module/components/KeyboardToolbar/compound/components/types.js +2 -0
  223. package/lib/module/components/KeyboardToolbar/compound/components/types.js.map +1 -0
  224. package/lib/module/components/KeyboardToolbar/compound/context.js +10 -0
  225. package/lib/module/components/KeyboardToolbar/compound/context.js.map +1 -0
  226. package/lib/module/components/KeyboardToolbar/constants.js +11 -0
  227. package/lib/module/components/KeyboardToolbar/constants.js.map +1 -0
  228. package/lib/module/components/KeyboardToolbar/index.js +98 -88
  229. package/lib/module/components/KeyboardToolbar/index.js.map +1 -1
  230. package/lib/module/components/KeyboardToolbar/types.js.map +1 -1
  231. package/lib/module/components/ScrollViewWithBottomPadding/index.js +112 -0
  232. package/lib/module/components/ScrollViewWithBottomPadding/index.js.map +1 -0
  233. package/lib/module/components/ScrollViewWithBottomPadding/styles.js +9 -0
  234. package/lib/module/components/ScrollViewWithBottomPadding/styles.js.map +1 -0
  235. package/lib/module/components/hooks/useColorScheme.js.map +1 -1
  236. package/lib/module/components/hooks/useCombinedRef.js +18 -0
  237. package/lib/module/components/hooks/useCombinedRef.js.map +1 -0
  238. package/lib/module/components/hooks/useScrollState.js +56 -0
  239. package/lib/module/components/hooks/useScrollState.js.map +1 -0
  240. package/lib/module/components/index.js +1 -0
  241. package/lib/module/components/index.js.map +1 -1
  242. package/lib/module/constants.js +3 -0
  243. package/lib/module/constants.js.map +1 -1
  244. package/lib/module/context.js +1 -0
  245. package/lib/module/context.js.map +1 -1
  246. package/lib/module/hooks/index.js +3 -1
  247. package/lib/module/hooks/index.js.map +1 -1
  248. package/lib/module/hooks/useKeyboardState/index.js +33 -0
  249. package/lib/module/hooks/useKeyboardState/index.js.map +1 -0
  250. package/lib/module/hooks/useWindowDimensions/index.android.js.map +1 -1
  251. package/lib/module/hooks/useWindowDimensions/index.js.map +1 -1
  252. package/lib/module/index.js +3 -2
  253. package/lib/module/index.js.map +1 -1
  254. package/lib/module/internal.js +53 -18
  255. package/lib/module/internal.js.map +1 -1
  256. package/lib/module/module.js +21 -12
  257. package/lib/module/module.js.map +1 -1
  258. package/lib/module/reanimated.js.map +1 -1
  259. package/lib/module/reanimated.native.js.map +1 -1
  260. package/lib/module/specs/ClippingScrollViewDecoratorViewNativeComponent.js +6 -0
  261. package/lib/module/specs/ClippingScrollViewDecoratorViewNativeComponent.js.map +1 -0
  262. package/lib/module/specs/KeyboardControllerViewNativeComponent.js +7 -1
  263. package/lib/module/specs/KeyboardControllerViewNativeComponent.js.map +1 -1
  264. package/lib/module/specs/KeyboardGestureAreaNativeComponent.js +2 -1
  265. package/lib/module/specs/KeyboardGestureAreaNativeComponent.js.map +1 -1
  266. package/lib/module/specs/KeyboardToolbarGroupViewNativeComponent.js +5 -0
  267. package/lib/module/specs/KeyboardToolbarGroupViewNativeComponent.js.map +1 -0
  268. package/lib/module/specs/NativeKeyboardController.js.map +1 -1
  269. package/lib/module/specs/NativeStatusBarManagerCompat.js.map +1 -1
  270. package/lib/module/specs/OverKeyboardViewNativeComponent.js.map +1 -1
  271. package/lib/module/types.js.map +1 -1
  272. package/lib/module/utils/findNodeHandle/index.js +2 -0
  273. package/lib/module/utils/findNodeHandle/index.js.map +1 -0
  274. package/lib/module/utils/findNodeHandle/index.native.js +3 -0
  275. package/lib/module/utils/findNodeHandle/index.native.js.map +1 -0
  276. package/lib/module/utils.js.map +1 -1
  277. package/lib/module/views/KeyboardExtender/index.js +23 -0
  278. package/lib/module/views/KeyboardExtender/index.js.map +1 -0
  279. package/lib/module/views/OverKeyboardView/index.js.map +1 -1
  280. package/lib/module/views/index.js +1 -0
  281. package/lib/module/views/index.js.map +1 -1
  282. package/lib/typescript/animated.d.ts +2 -38
  283. package/lib/typescript/architecture.d.ts +1 -0
  284. package/lib/typescript/bindings.d.ts +15 -1
  285. package/lib/typescript/bindings.native.d.ts +10 -1
  286. package/lib/typescript/compat.d.ts +12 -0
  287. package/lib/typescript/components/KeyboardAvoidingView/index.d.ts +5 -0
  288. package/lib/typescript/components/KeyboardAwareScrollView/index.d.ts +4 -1
  289. package/lib/typescript/components/KeyboardChatScrollView/hooks.d.ts +2 -0
  290. package/lib/typescript/components/KeyboardChatScrollView/index.d.ts +17 -0
  291. package/lib/typescript/components/KeyboardChatScrollView/types.d.ts +113 -0
  292. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/helpers.d.ts +132 -0
  293. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/index.d.ts +18 -0
  294. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/index.ios.d.ts +21 -0
  295. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/types.d.ts +37 -0
  296. package/lib/typescript/components/KeyboardChatScrollView/useEndVisible.d.ts +17 -0
  297. package/lib/typescript/components/KeyboardChatScrollView/useExtraContentPadding/index.d.ts +45 -0
  298. package/lib/typescript/components/KeyboardToolbar/Button.d.ts +2 -2
  299. package/lib/typescript/components/KeyboardToolbar/compound/components/Background.d.ts +6 -0
  300. package/lib/typescript/components/KeyboardToolbar/compound/components/Content.d.ts +7 -0
  301. package/lib/typescript/components/KeyboardToolbar/compound/components/Done.d.ts +7 -0
  302. package/lib/typescript/components/KeyboardToolbar/compound/components/Next.d.ts +4 -0
  303. package/lib/typescript/components/KeyboardToolbar/compound/components/Prev.d.ts +4 -0
  304. package/lib/typescript/components/KeyboardToolbar/compound/components/index.d.ts +5 -0
  305. package/lib/typescript/components/KeyboardToolbar/compound/components/types.d.ts +14 -0
  306. package/lib/typescript/components/KeyboardToolbar/compound/context.d.ts +9 -0
  307. package/lib/typescript/components/KeyboardToolbar/constants.d.ts +10 -0
  308. package/lib/typescript/components/KeyboardToolbar/index.d.ts +12 -45
  309. package/lib/typescript/components/KeyboardToolbar/types.d.ts +24 -1
  310. package/lib/typescript/components/ScrollViewWithBottomPadding/index.d.ts +30 -0
  311. package/lib/typescript/components/ScrollViewWithBottomPadding/styles.d.ts +7 -0
  312. package/lib/typescript/components/hooks/useCombinedRef.d.ts +3 -0
  313. package/lib/typescript/components/hooks/useScrollState.d.ts +17 -0
  314. package/lib/typescript/components/index.d.ts +3 -0
  315. package/lib/typescript/constants.d.ts +1 -0
  316. package/lib/typescript/context.d.ts +1 -0
  317. package/lib/typescript/hooks/index.d.ts +2 -0
  318. package/lib/typescript/hooks/useKeyboardState/index.d.ts +4 -0
  319. package/lib/typescript/index.d.ts +4 -3
  320. package/lib/typescript/internal.d.ts +4 -0
  321. package/lib/typescript/specs/ClippingScrollViewDecoratorViewNativeComponent.d.ts +10 -0
  322. package/lib/typescript/specs/KeyboardControllerViewNativeComponent.d.ts +4 -0
  323. package/lib/typescript/specs/KeyboardToolbarGroupViewNativeComponent.d.ts +6 -0
  324. package/lib/typescript/specs/NativeKeyboardController.d.ts +6 -2
  325. package/lib/typescript/types.d.ts +81 -5
  326. package/lib/typescript/utils/findNodeHandle/index.d.ts +4 -0
  327. package/lib/typescript/utils/findNodeHandle/index.native.d.ts +2 -0
  328. package/lib/typescript/views/KeyboardExtender/index.d.ts +5 -0
  329. package/lib/typescript/views/index.d.ts +1 -0
  330. package/package.json +183 -174
  331. package/src/animated.tsx +248 -255
  332. package/src/architecture.ts +1 -0
  333. package/src/bindings.native.ts +97 -62
  334. package/src/bindings.ts +81 -42
  335. package/src/compat.ts +44 -0
  336. package/src/components/KeyboardAvoidingView/hooks.ts +130 -123
  337. package/src/components/KeyboardAvoidingView/index.tsx +232 -188
  338. package/src/components/KeyboardAwareScrollView/index.tsx +452 -389
  339. package/src/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.ts +133 -133
  340. package/src/components/KeyboardAwareScrollView/utils.ts +41 -41
  341. package/src/components/KeyboardChatScrollView/hooks.ts +2 -0
  342. package/src/components/KeyboardChatScrollView/index.tsx +164 -0
  343. package/src/components/KeyboardChatScrollView/types.ts +117 -0
  344. package/src/components/KeyboardChatScrollView/useChatKeyboard/helpers.ts +268 -0
  345. package/src/components/KeyboardChatScrollView/useChatKeyboard/index.ios.ts +260 -0
  346. package/src/components/KeyboardChatScrollView/useChatKeyboard/index.ts +374 -0
  347. package/src/components/KeyboardChatScrollView/useChatKeyboard/types.ts +39 -0
  348. package/src/components/KeyboardChatScrollView/useEndVisible.ts +66 -0
  349. package/src/components/KeyboardChatScrollView/useExtraContentPadding/index.ts +149 -0
  350. package/src/components/KeyboardStickyView/index.tsx +66 -66
  351. package/src/components/KeyboardToolbar/Arrow.tsx +80 -80
  352. package/src/components/KeyboardToolbar/Button.tsx +98 -98
  353. package/src/components/KeyboardToolbar/colors.native.ts +37 -37
  354. package/src/components/KeyboardToolbar/colors.ts +16 -16
  355. package/src/components/KeyboardToolbar/compound/components/Background.tsx +9 -0
  356. package/src/components/KeyboardToolbar/compound/components/Content.tsx +25 -0
  357. package/src/components/KeyboardToolbar/compound/components/Done.tsx +57 -0
  358. package/src/components/KeyboardToolbar/compound/components/Next.tsx +49 -0
  359. package/src/components/KeyboardToolbar/compound/components/Prev.tsx +49 -0
  360. package/src/components/KeyboardToolbar/compound/components/index.ts +5 -0
  361. package/src/components/KeyboardToolbar/compound/components/types.ts +15 -0
  362. package/src/components/KeyboardToolbar/compound/context.ts +25 -0
  363. package/src/components/KeyboardToolbar/constants.ts +14 -0
  364. package/src/components/KeyboardToolbar/index.tsx +220 -223
  365. package/src/components/KeyboardToolbar/types.ts +72 -40
  366. package/src/components/ScrollViewWithBottomPadding/index.tsx +216 -0
  367. package/src/components/ScrollViewWithBottomPadding/styles.ts +10 -0
  368. package/src/components/hooks/useColorScheme.ts +6 -6
  369. package/src/components/hooks/useCombinedRef.ts +22 -0
  370. package/src/components/hooks/useScrollState.ts +81 -0
  371. package/src/components/index.ts +14 -11
  372. package/src/constants.ts +23 -19
  373. package/src/context.ts +70 -68
  374. package/src/hooks/index.ts +91 -90
  375. package/src/hooks/useKeyboardState/index.ts +52 -0
  376. package/src/hooks/useWindowDimensions/index.android.ts +38 -38
  377. package/src/hooks/useWindowDimensions/index.ts +1 -1
  378. package/src/index.ts +27 -23
  379. package/src/internal.ts +146 -84
  380. package/src/module.ts +64 -52
  381. package/src/reanimated.native.ts +132 -132
  382. package/src/reanimated.ts +29 -29
  383. package/src/specs/ClippingScrollViewDecoratorViewNativeComponent.ts +19 -0
  384. package/src/specs/KeyboardControllerViewNativeComponent.ts +82 -71
  385. package/src/specs/KeyboardGestureAreaNativeComponent.ts +21 -20
  386. package/src/specs/KeyboardToolbarGroupViewNativeComponent.ts +10 -0
  387. package/src/specs/NativeKeyboardController.ts +23 -19
  388. package/src/specs/NativeStatusBarManagerCompat.ts +14 -14
  389. package/src/specs/OverKeyboardViewNativeComponent.ts +12 -12
  390. package/src/types.ts +330 -243
  391. package/src/utils/findNodeHandle/index.native.ts +3 -0
  392. package/src/utils/findNodeHandle/index.ts +6 -0
  393. package/src/utils.ts +1 -1
  394. package/src/views/KeyboardExtender/index.tsx +30 -0
  395. package/src/views/OverKeyboardView/index.tsx +43 -43
  396. package/src/views/index.ts +2 -1
  397. package/lib/commonjs/monkey-patch.android.js +0 -57
  398. package/lib/commonjs/monkey-patch.android.js.map +0 -1
  399. package/lib/commonjs/monkey-patch.js +0 -11
  400. package/lib/commonjs/monkey-patch.js.map +0 -1
  401. package/lib/module/monkey-patch.android.js +0 -47
  402. package/lib/module/monkey-patch.android.js.map +0 -1
  403. package/lib/module/monkey-patch.js +0 -5
  404. package/lib/module/monkey-patch.js.map +0 -1
  405. package/lib/typescript/monkey-patch.android.d.ts +0 -2
  406. package/lib/typescript/monkey-patch.d.ts +0 -2
  407. package/src/monkey-patch.android.ts +0 -44
  408. package/src/monkey-patch.ts +0 -4
@@ -0,0 +1,234 @@
1
+ import { scrollTo, useSharedValue } from "react-native-reanimated";
2
+ import { useKeyboardHandler } from "../../../hooks";
3
+ import useScrollState from "../../hooks/useScrollState";
4
+ import { clampedScrollTarget, getEffectiveHeight, getMinimumPaddingAbsorbed, getScrollEffective, getVisibleMinimumPaddingFraction, isScrollAtEnd, shouldShiftContent } from "./helpers";
5
+ /**
6
+ * Hook that manages keyboard-driven scrolling for chat-style scroll views.
7
+ * Calculates padding (extra scrollable space) and content shift values,
8
+ * using per-frame scrollTo updates (Android and other platforms).
9
+ *
10
+ * @param scrollViewRef - Animated ref to the scroll view.
11
+ * @param options - Configuration for inverted and keyboardLiftBehavior.
12
+ * @returns Shared values for padding and contentOffsetY (always `undefined`).
13
+ * @example
14
+ * ```tsx
15
+ * const { padding } = useChatKeyboard(ref, { inverted: false, keyboardLiftBehavior: "always" });
16
+ * ```
17
+ */
18
+ function useChatKeyboard(scrollViewRef, options) {
19
+ const {
20
+ inverted,
21
+ keyboardLiftBehavior,
22
+ freeze,
23
+ offset,
24
+ blankSpace,
25
+ extraContentPadding
26
+ } = options;
27
+ const padding = useSharedValue(0);
28
+ const currentHeight = useSharedValue(0);
29
+ const offsetBeforeScroll = useSharedValue(0);
30
+ const targetKeyboardHeight = useSharedValue(0);
31
+ const closing = useSharedValue(false);
32
+ const minimumPaddingFractionOnOpen = useSharedValue(0);
33
+ const actualOpenShift = useSharedValue(0);
34
+ const {
35
+ layout,
36
+ size,
37
+ offset: scroll,
38
+ onLayout,
39
+ onContentSizeChange
40
+ } = useScrollState(scrollViewRef);
41
+ const clampScrollIfNeeded = (effective, totalPaddingForMaxScroll) => {
42
+ "worklet";
43
+
44
+ const paddingForMax = totalPaddingForMaxScroll !== undefined ? totalPaddingForMaxScroll : effective;
45
+ const maxScroll = Math.max(size.value.height - layout.value.height + paddingForMax, 0);
46
+ if (scroll.value > maxScroll) {
47
+ scrollTo(scrollViewRef, 0, maxScroll, false);
48
+ }
49
+ };
50
+ useKeyboardHandler({
51
+ onStart: e => {
52
+ "worklet";
53
+
54
+ if (freeze.value) {
55
+ return;
56
+ }
57
+ if (e.height > 0) {
58
+ // eslint-disable-next-line react-compiler/react-compiler
59
+ targetKeyboardHeight.value = e.height;
60
+ closing.value = false;
61
+ } else {
62
+ closing.value = true;
63
+ }
64
+ const effective = getEffectiveHeight(e.height, targetKeyboardHeight.value, offset);
65
+ const atEnd = isScrollAtEnd(scroll.value, layout.value.height, size.value.height, inverted);
66
+
67
+ // Scale minimum padding absorption by how much of it is visible.
68
+ // Fully visible → full absorption; fully off-screen → no absorption.
69
+ const visibleFraction = getVisibleMinimumPaddingFraction(scroll.value, layout.value.height, size.value.height, blankSpace.value, inverted);
70
+ const minimumPaddingAbsorbed = visibleFraction >= 1 ? getMinimumPaddingAbsorbed(blankSpace.value, extraContentPadding.value) : 0;
71
+ const scrollEffective = getScrollEffective(effective, minimumPaddingAbsorbed);
72
+ if (inverted && e.duration === -1) {
73
+ // Android inverted: skip post-interactive snap-back events
74
+ // (duration === -1 means the keyboard is re-establishing its
75
+ // position after an interactive gesture, not a real animation)
76
+ return;
77
+ } else if (e.height > 0) {
78
+ // Android: keyboard opening — set padding + capture scroll position
79
+ minimumPaddingFractionOnOpen.value = visibleFraction >= 1 ? 1 : 0;
80
+ padding.value = effective;
81
+ offsetBeforeScroll.value = scroll.value;
82
+ if (!inverted && keyboardLiftBehavior === "whenAtEnd" && !atEnd) {
83
+ // Sentinel: don't scroll in onMove (non-inverted only)
84
+ offsetBeforeScroll.value = -1;
85
+ } else if (!inverted && scrollEffective === 0) {
86
+ // blankSpace fully absorbs the keyboard — prevent scroll
87
+ offsetBeforeScroll.value = -1;
88
+ } else if (inverted && scrollEffective === 0) {
89
+ // blankSpace fully absorbs the keyboard — guard for inverted
90
+ offsetBeforeScroll.value = scroll.value;
91
+ }
92
+ } else {
93
+ // Android: keyboard closing — re-capture scroll position
94
+ if (inverted) {
95
+ offsetBeforeScroll.value = scroll.value;
96
+ } else {
97
+ // Preserve "whenAtEnd" sentinel: if open didn't shift, close shouldn't either
98
+ if (offsetBeforeScroll.value !== -1) {
99
+ // Use the actual displacement recorded at end of open animation
100
+ // (not the theoretical value) so close is symmetric with open
101
+ offsetBeforeScroll.value = scroll.value - actualOpenShift.value;
102
+ }
103
+ }
104
+ }
105
+ },
106
+ onMove: e => {
107
+ "worklet";
108
+
109
+ if (freeze.value) {
110
+ return;
111
+ }
112
+ currentHeight.value = e.height;
113
+ if (inverted) {
114
+ // Skip post-interactive snap-back (duration === -1)
115
+ if (e.duration === -1) {
116
+ return;
117
+ }
118
+ const effective = getEffectiveHeight(e.height, targetKeyboardHeight.value, offset);
119
+ const minimumPaddingAbsorbed = getMinimumPaddingAbsorbed(blankSpace.value, extraContentPadding.value) * minimumPaddingFractionOnOpen.value;
120
+ const scrollEffective = getScrollEffective(effective, minimumPaddingAbsorbed);
121
+ const actualTotalPadding = Math.max(blankSpace.value, effective + extraContentPadding.value);
122
+
123
+ // Check if we should shift content based on position when keyboard started
124
+ const wasAtEnd = isScrollAtEnd(offsetBeforeScroll.value, layout.value.height, size.value.height, inverted);
125
+
126
+ // "never" at end: scroll along when keyboard closes to avoid jump
127
+ if (keyboardLiftBehavior === "never" && wasAtEnd && effective < padding.value) {
128
+ padding.value = effective;
129
+ if (scrollEffective === 0 && minimumPaddingAbsorbed > 0) {
130
+ return;
131
+ }
132
+ scrollTo(scrollViewRef, 0, 0, false);
133
+ return;
134
+ }
135
+ if (!shouldShiftContent(keyboardLiftBehavior, wasAtEnd)) {
136
+ // Closing, not shifting: reduce padding to avoid gap
137
+ if (closing.value && effective < padding.value) {
138
+ padding.value = effective;
139
+ clampScrollIfNeeded(effective, actualTotalPadding);
140
+ }
141
+ return;
142
+ }
143
+
144
+ // When blankSpace fully absorbs the keyboard, skip scroll
145
+ if (scrollEffective === 0 && minimumPaddingAbsorbed > 0) {
146
+ return;
147
+ }
148
+
149
+ // Persistent: don't let shift decrease
150
+ if (keyboardLiftBehavior === "persistent") {
151
+ const currentShift = offsetBeforeScroll.value + padding.value - scroll.value;
152
+ if (effective < currentShift) {
153
+ // When at end, allow scrolling back (snap to end + reduce padding)
154
+ if (wasAtEnd) {
155
+ padding.value = effective;
156
+ scrollTo(scrollViewRef, 0, 0, false);
157
+ } else if (closing.value) {
158
+ // Not at end: reduce padding to avoid gap
159
+ padding.value = effective;
160
+ clampScrollIfNeeded(effective, actualTotalPadding);
161
+ }
162
+ return;
163
+ }
164
+ }
165
+ const target = offsetBeforeScroll.value + padding.value - scrollEffective;
166
+ scrollTo(scrollViewRef, 0, target, false);
167
+ } else {
168
+ const effective = getEffectiveHeight(e.height, targetKeyboardHeight.value, offset);
169
+ const minimumPaddingAbsorbed = getMinimumPaddingAbsorbed(blankSpace.value, extraContentPadding.value) * minimumPaddingFractionOnOpen.value;
170
+ const scrollEffective = getScrollEffective(effective, minimumPaddingAbsorbed);
171
+ const actualTotalPadding = Math.max(blankSpace.value, effective + extraContentPadding.value);
172
+
173
+ // "never" closing: clamp scroll to valid range as inset shrinks
174
+ if (keyboardLiftBehavior === "never" && closing.value && effective < padding.value) {
175
+ clampScrollIfNeeded(effective, actualTotalPadding);
176
+ return;
177
+ }
178
+ if (!shouldShiftContent(keyboardLiftBehavior, true)) {
179
+ return;
180
+ }
181
+
182
+ // "whenAtEnd" sentinel check (also used for blankSpace full absorption)
183
+ if (offsetBeforeScroll.value === -1) {
184
+ if (closing.value) {
185
+ // Keyboard didn't shift on open; ensure valid position on close
186
+ clampScrollIfNeeded(effective, actualTotalPadding);
187
+ }
188
+ return;
189
+ }
190
+
191
+ // "persistent" closing: maintain position, clamped to valid range
192
+ if (keyboardLiftBehavior === "persistent" && closing.value) {
193
+ const keepAt = offsetBeforeScroll.value + padding.value;
194
+ const maxScroll = Math.max(size.value.height - layout.value.height + actualTotalPadding, 0);
195
+ scrollTo(scrollViewRef, 0, Math.min(keepAt, maxScroll), false);
196
+ return;
197
+ }
198
+ const target = clampedScrollTarget(offsetBeforeScroll.value, scrollEffective, size.value.height, layout.value.height, actualTotalPadding);
199
+ scrollTo(scrollViewRef, 0, target, false);
200
+
201
+ // Track actual (clamped) displacement during open for symmetric close
202
+ if (!closing.value) {
203
+ actualOpenShift.value = target - offsetBeforeScroll.value;
204
+ }
205
+ }
206
+ },
207
+ onEnd: e => {
208
+ "worklet";
209
+
210
+ if (freeze.value) {
211
+ return;
212
+ }
213
+ const effective = getEffectiveHeight(e.height, targetKeyboardHeight.value, offset);
214
+ padding.value = effective;
215
+
216
+ // Record actual scroll displacement so close can be symmetric
217
+ if (effective > 0 && offsetBeforeScroll.value !== -1) {
218
+ actualOpenShift.value = scroll.value - offsetBeforeScroll.value;
219
+ }
220
+ }
221
+ }, [inverted, keyboardLiftBehavior, offset]);
222
+ return {
223
+ padding,
224
+ currentHeight,
225
+ contentOffsetY: undefined,
226
+ scroll,
227
+ layout,
228
+ size,
229
+ onLayout,
230
+ onContentSizeChange
231
+ };
232
+ }
233
+ export { useChatKeyboard };
234
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["scrollTo","useSharedValue","useKeyboardHandler","useScrollState","clampedScrollTarget","getEffectiveHeight","getMinimumPaddingAbsorbed","getScrollEffective","getVisibleMinimumPaddingFraction","isScrollAtEnd","shouldShiftContent","useChatKeyboard","scrollViewRef","options","inverted","keyboardLiftBehavior","freeze","offset","blankSpace","extraContentPadding","padding","currentHeight","offsetBeforeScroll","targetKeyboardHeight","closing","minimumPaddingFractionOnOpen","actualOpenShift","layout","size","scroll","onLayout","onContentSizeChange","clampScrollIfNeeded","effective","totalPaddingForMaxScroll","paddingForMax","undefined","maxScroll","Math","max","value","height","onStart","e","atEnd","visibleFraction","minimumPaddingAbsorbed","scrollEffective","duration","onMove","actualTotalPadding","wasAtEnd","currentShift","target","keepAt","min","onEnd","contentOffsetY"],"sources":["index.ts"],"sourcesContent":["import { scrollTo, useSharedValue } from \"react-native-reanimated\";\n\nimport { useKeyboardHandler } from \"../../../hooks\";\nimport useScrollState from \"../../hooks/useScrollState\";\n\nimport {\n clampedScrollTarget,\n getEffectiveHeight,\n getMinimumPaddingAbsorbed,\n getScrollEffective,\n getVisibleMinimumPaddingFraction,\n isScrollAtEnd,\n shouldShiftContent,\n} from \"./helpers\";\n\nimport type { UseChatKeyboardOptions, UseChatKeyboardReturn } from \"./types\";\nimport type { AnimatedRef } from \"react-native-reanimated\";\nimport type Reanimated from \"react-native-reanimated\";\n\n/**\n * Hook that manages keyboard-driven scrolling for chat-style scroll views.\n * Calculates padding (extra scrollable space) and content shift values,\n * using per-frame scrollTo updates (Android and other platforms).\n *\n * @param scrollViewRef - Animated ref to the scroll view.\n * @param options - Configuration for inverted and keyboardLiftBehavior.\n * @returns Shared values for padding and contentOffsetY (always `undefined`).\n * @example\n * ```tsx\n * const { padding } = useChatKeyboard(ref, { inverted: false, keyboardLiftBehavior: \"always\" });\n * ```\n */\nfunction useChatKeyboard(\n scrollViewRef: AnimatedRef<Reanimated.ScrollView>,\n options: UseChatKeyboardOptions,\n): UseChatKeyboardReturn {\n const {\n inverted,\n keyboardLiftBehavior,\n freeze,\n offset,\n blankSpace,\n extraContentPadding,\n } = options;\n\n const padding = useSharedValue(0);\n const currentHeight = useSharedValue(0);\n const offsetBeforeScroll = useSharedValue(0);\n const targetKeyboardHeight = useSharedValue(0);\n const closing = useSharedValue(false);\n const minimumPaddingFractionOnOpen = useSharedValue(0);\n const actualOpenShift = useSharedValue(0);\n const {\n layout,\n size,\n offset: scroll,\n onLayout,\n onContentSizeChange,\n } = useScrollState(scrollViewRef);\n const clampScrollIfNeeded = (\n effective: number,\n totalPaddingForMaxScroll?: number,\n ) => {\n \"worklet\";\n\n const paddingForMax =\n totalPaddingForMaxScroll !== undefined\n ? totalPaddingForMaxScroll\n : effective;\n const maxScroll = Math.max(\n size.value.height - layout.value.height + paddingForMax,\n 0,\n );\n\n if (scroll.value > maxScroll) {\n scrollTo(scrollViewRef, 0, maxScroll, false);\n }\n };\n\n useKeyboardHandler(\n {\n onStart: (e) => {\n \"worklet\";\n\n if (freeze.value) {\n return;\n }\n\n if (e.height > 0) {\n // eslint-disable-next-line react-compiler/react-compiler\n targetKeyboardHeight.value = e.height;\n closing.value = false;\n } else {\n closing.value = true;\n }\n\n const effective = getEffectiveHeight(\n e.height,\n targetKeyboardHeight.value,\n offset,\n );\n\n const atEnd = isScrollAtEnd(\n scroll.value,\n layout.value.height,\n size.value.height,\n inverted,\n );\n\n // Scale minimum padding absorption by how much of it is visible.\n // Fully visible → full absorption; fully off-screen → no absorption.\n const visibleFraction = getVisibleMinimumPaddingFraction(\n scroll.value,\n layout.value.height,\n size.value.height,\n blankSpace.value,\n inverted,\n );\n const minimumPaddingAbsorbed =\n visibleFraction >= 1\n ? getMinimumPaddingAbsorbed(\n blankSpace.value,\n extraContentPadding.value,\n )\n : 0;\n const scrollEffective = getScrollEffective(\n effective,\n minimumPaddingAbsorbed,\n );\n\n if (inverted && e.duration === -1) {\n // Android inverted: skip post-interactive snap-back events\n // (duration === -1 means the keyboard is re-establishing its\n // position after an interactive gesture, not a real animation)\n return;\n } else if (e.height > 0) {\n // Android: keyboard opening — set padding + capture scroll position\n minimumPaddingFractionOnOpen.value = visibleFraction >= 1 ? 1 : 0;\n padding.value = effective;\n offsetBeforeScroll.value = scroll.value;\n\n if (!inverted && keyboardLiftBehavior === \"whenAtEnd\" && !atEnd) {\n // Sentinel: don't scroll in onMove (non-inverted only)\n offsetBeforeScroll.value = -1;\n } else if (!inverted && scrollEffective === 0) {\n // blankSpace fully absorbs the keyboard — prevent scroll\n offsetBeforeScroll.value = -1;\n } else if (inverted && scrollEffective === 0) {\n // blankSpace fully absorbs the keyboard — guard for inverted\n offsetBeforeScroll.value = scroll.value;\n }\n } else {\n // Android: keyboard closing — re-capture scroll position\n if (inverted) {\n offsetBeforeScroll.value = scroll.value;\n } else {\n // Preserve \"whenAtEnd\" sentinel: if open didn't shift, close shouldn't either\n if (offsetBeforeScroll.value !== -1) {\n // Use the actual displacement recorded at end of open animation\n // (not the theoretical value) so close is symmetric with open\n offsetBeforeScroll.value = scroll.value - actualOpenShift.value;\n }\n }\n }\n },\n onMove: (e) => {\n \"worklet\";\n\n if (freeze.value) {\n return;\n }\n\n currentHeight.value = e.height;\n\n if (inverted) {\n // Skip post-interactive snap-back (duration === -1)\n if (e.duration === -1) {\n return;\n }\n\n const effective = getEffectiveHeight(\n e.height,\n targetKeyboardHeight.value,\n offset,\n );\n\n const minimumPaddingAbsorbed =\n getMinimumPaddingAbsorbed(\n blankSpace.value,\n extraContentPadding.value,\n ) * minimumPaddingFractionOnOpen.value;\n const scrollEffective = getScrollEffective(\n effective,\n minimumPaddingAbsorbed,\n );\n const actualTotalPadding = Math.max(\n blankSpace.value,\n effective + extraContentPadding.value,\n );\n\n // Check if we should shift content based on position when keyboard started\n const wasAtEnd = isScrollAtEnd(\n offsetBeforeScroll.value,\n layout.value.height,\n size.value.height,\n inverted,\n );\n\n // \"never\" at end: scroll along when keyboard closes to avoid jump\n if (\n keyboardLiftBehavior === \"never\" &&\n wasAtEnd &&\n effective < padding.value\n ) {\n padding.value = effective;\n\n if (scrollEffective === 0 && minimumPaddingAbsorbed > 0) {\n return;\n }\n\n scrollTo(scrollViewRef, 0, 0, false);\n\n return;\n }\n\n if (!shouldShiftContent(keyboardLiftBehavior, wasAtEnd)) {\n // Closing, not shifting: reduce padding to avoid gap\n if (closing.value && effective < padding.value) {\n padding.value = effective;\n clampScrollIfNeeded(effective, actualTotalPadding);\n }\n\n return;\n }\n\n // When blankSpace fully absorbs the keyboard, skip scroll\n if (scrollEffective === 0 && minimumPaddingAbsorbed > 0) {\n return;\n }\n\n // Persistent: don't let shift decrease\n if (keyboardLiftBehavior === \"persistent\") {\n const currentShift =\n offsetBeforeScroll.value + padding.value - scroll.value;\n\n if (effective < currentShift) {\n // When at end, allow scrolling back (snap to end + reduce padding)\n if (wasAtEnd) {\n padding.value = effective;\n scrollTo(scrollViewRef, 0, 0, false);\n } else if (closing.value) {\n // Not at end: reduce padding to avoid gap\n padding.value = effective;\n clampScrollIfNeeded(effective, actualTotalPadding);\n }\n\n return;\n }\n }\n\n const target =\n offsetBeforeScroll.value + padding.value - scrollEffective;\n\n scrollTo(scrollViewRef, 0, target, false);\n } else {\n const effective = getEffectiveHeight(\n e.height,\n targetKeyboardHeight.value,\n offset,\n );\n\n const minimumPaddingAbsorbed =\n getMinimumPaddingAbsorbed(\n blankSpace.value,\n extraContentPadding.value,\n ) * minimumPaddingFractionOnOpen.value;\n const scrollEffective = getScrollEffective(\n effective,\n minimumPaddingAbsorbed,\n );\n const actualTotalPadding = Math.max(\n blankSpace.value,\n effective + extraContentPadding.value,\n );\n\n // \"never\" closing: clamp scroll to valid range as inset shrinks\n if (\n keyboardLiftBehavior === \"never\" &&\n closing.value &&\n effective < padding.value\n ) {\n clampScrollIfNeeded(effective, actualTotalPadding);\n\n return;\n }\n\n if (!shouldShiftContent(keyboardLiftBehavior, true)) {\n return;\n }\n\n // \"whenAtEnd\" sentinel check (also used for blankSpace full absorption)\n if (offsetBeforeScroll.value === -1) {\n if (closing.value) {\n // Keyboard didn't shift on open; ensure valid position on close\n clampScrollIfNeeded(effective, actualTotalPadding);\n }\n return;\n }\n\n // \"persistent\" closing: maintain position, clamped to valid range\n if (keyboardLiftBehavior === \"persistent\" && closing.value) {\n const keepAt = offsetBeforeScroll.value + padding.value;\n const maxScroll = Math.max(\n size.value.height - layout.value.height + actualTotalPadding,\n 0,\n );\n\n scrollTo(scrollViewRef, 0, Math.min(keepAt, maxScroll), false);\n return;\n }\n\n const target = clampedScrollTarget(\n offsetBeforeScroll.value,\n scrollEffective,\n size.value.height,\n layout.value.height,\n actualTotalPadding,\n );\n\n scrollTo(scrollViewRef, 0, target, false);\n\n // Track actual (clamped) displacement during open for symmetric close\n if (!closing.value) {\n actualOpenShift.value = target - offsetBeforeScroll.value;\n }\n }\n },\n onEnd: (e) => {\n \"worklet\";\n\n if (freeze.value) {\n return;\n }\n\n const effective = getEffectiveHeight(\n e.height,\n targetKeyboardHeight.value,\n offset,\n );\n\n padding.value = effective;\n\n // Record actual scroll displacement so close can be symmetric\n if (effective > 0 && offsetBeforeScroll.value !== -1) {\n actualOpenShift.value = scroll.value - offsetBeforeScroll.value;\n }\n },\n },\n [inverted, keyboardLiftBehavior, offset],\n );\n\n return {\n padding,\n currentHeight,\n contentOffsetY: undefined,\n scroll,\n layout,\n size,\n onLayout,\n onContentSizeChange,\n };\n}\n\nexport { useChatKeyboard };\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,cAAc,QAAQ,yBAAyB;AAElE,SAASC,kBAAkB,QAAQ,gBAAgB;AACnD,OAAOC,cAAc,MAAM,4BAA4B;AAEvD,SACEC,mBAAmB,EACnBC,kBAAkB,EAClBC,yBAAyB,EACzBC,kBAAkB,EAClBC,gCAAgC,EAChCC,aAAa,EACbC,kBAAkB,QACb,WAAW;AAMlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CACtBC,aAAiD,EACjDC,OAA+B,EACR;EACvB,MAAM;IACJC,QAAQ;IACRC,oBAAoB;IACpBC,MAAM;IACNC,MAAM;IACNC,UAAU;IACVC;EACF,CAAC,GAAGN,OAAO;EAEX,MAAMO,OAAO,GAAGnB,cAAc,CAAC,CAAC,CAAC;EACjC,MAAMoB,aAAa,GAAGpB,cAAc,CAAC,CAAC,CAAC;EACvC,MAAMqB,kBAAkB,GAAGrB,cAAc,CAAC,CAAC,CAAC;EAC5C,MAAMsB,oBAAoB,GAAGtB,cAAc,CAAC,CAAC,CAAC;EAC9C,MAAMuB,OAAO,GAAGvB,cAAc,CAAC,KAAK,CAAC;EACrC,MAAMwB,4BAA4B,GAAGxB,cAAc,CAAC,CAAC,CAAC;EACtD,MAAMyB,eAAe,GAAGzB,cAAc,CAAC,CAAC,CAAC;EACzC,MAAM;IACJ0B,MAAM;IACNC,IAAI;IACJX,MAAM,EAAEY,MAAM;IACdC,QAAQ;IACRC;EACF,CAAC,GAAG5B,cAAc,CAACS,aAAa,CAAC;EACjC,MAAMoB,mBAAmB,GAAGA,CAC1BC,SAAiB,EACjBC,wBAAiC,KAC9B;IACH,SAAS;;IAET,MAAMC,aAAa,GACjBD,wBAAwB,KAAKE,SAAS,GAClCF,wBAAwB,GACxBD,SAAS;IACf,MAAMI,SAAS,GAAGC,IAAI,CAACC,GAAG,CACxBX,IAAI,CAACY,KAAK,CAACC,MAAM,GAAGd,MAAM,CAACa,KAAK,CAACC,MAAM,GAAGN,aAAa,EACvD,CACF,CAAC;IAED,IAAIN,MAAM,CAACW,KAAK,GAAGH,SAAS,EAAE;MAC5BrC,QAAQ,CAACY,aAAa,EAAE,CAAC,EAAEyB,SAAS,EAAE,KAAK,CAAC;IAC9C;EACF,CAAC;EAEDnC,kBAAkB,CAChB;IACEwC,OAAO,EAAGC,CAAC,IAAK;MACd,SAAS;;MAET,IAAI3B,MAAM,CAACwB,KAAK,EAAE;QAChB;MACF;MAEA,IAAIG,CAAC,CAACF,MAAM,GAAG,CAAC,EAAE;QAChB;QACAlB,oBAAoB,CAACiB,KAAK,GAAGG,CAAC,CAACF,MAAM;QACrCjB,OAAO,CAACgB,KAAK,GAAG,KAAK;MACvB,CAAC,MAAM;QACLhB,OAAO,CAACgB,KAAK,GAAG,IAAI;MACtB;MAEA,MAAMP,SAAS,GAAG5B,kBAAkB,CAClCsC,CAAC,CAACF,MAAM,EACRlB,oBAAoB,CAACiB,KAAK,EAC1BvB,MACF,CAAC;MAED,MAAM2B,KAAK,GAAGnC,aAAa,CACzBoB,MAAM,CAACW,KAAK,EACZb,MAAM,CAACa,KAAK,CAACC,MAAM,EACnBb,IAAI,CAACY,KAAK,CAACC,MAAM,EACjB3B,QACF,CAAC;;MAED;MACA;MACA,MAAM+B,eAAe,GAAGrC,gCAAgC,CACtDqB,MAAM,CAACW,KAAK,EACZb,MAAM,CAACa,KAAK,CAACC,MAAM,EACnBb,IAAI,CAACY,KAAK,CAACC,MAAM,EACjBvB,UAAU,CAACsB,KAAK,EAChB1B,QACF,CAAC;MACD,MAAMgC,sBAAsB,GAC1BD,eAAe,IAAI,CAAC,GAChBvC,yBAAyB,CACvBY,UAAU,CAACsB,KAAK,EAChBrB,mBAAmB,CAACqB,KACtB,CAAC,GACD,CAAC;MACP,MAAMO,eAAe,GAAGxC,kBAAkB,CACxC0B,SAAS,EACTa,sBACF,CAAC;MAED,IAAIhC,QAAQ,IAAI6B,CAAC,CAACK,QAAQ,KAAK,CAAC,CAAC,EAAE;QACjC;QACA;QACA;QACA;MACF,CAAC,MAAM,IAAIL,CAAC,CAACF,MAAM,GAAG,CAAC,EAAE;QACvB;QACAhB,4BAA4B,CAACe,KAAK,GAAGK,eAAe,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACjEzB,OAAO,CAACoB,KAAK,GAAGP,SAAS;QACzBX,kBAAkB,CAACkB,KAAK,GAAGX,MAAM,CAACW,KAAK;QAEvC,IAAI,CAAC1B,QAAQ,IAAIC,oBAAoB,KAAK,WAAW,IAAI,CAAC6B,KAAK,EAAE;UAC/D;UACAtB,kBAAkB,CAACkB,KAAK,GAAG,CAAC,CAAC;QAC/B,CAAC,MAAM,IAAI,CAAC1B,QAAQ,IAAIiC,eAAe,KAAK,CAAC,EAAE;UAC7C;UACAzB,kBAAkB,CAACkB,KAAK,GAAG,CAAC,CAAC;QAC/B,CAAC,MAAM,IAAI1B,QAAQ,IAAIiC,eAAe,KAAK,CAAC,EAAE;UAC5C;UACAzB,kBAAkB,CAACkB,KAAK,GAAGX,MAAM,CAACW,KAAK;QACzC;MACF,CAAC,MAAM;QACL;QACA,IAAI1B,QAAQ,EAAE;UACZQ,kBAAkB,CAACkB,KAAK,GAAGX,MAAM,CAACW,KAAK;QACzC,CAAC,MAAM;UACL;UACA,IAAIlB,kBAAkB,CAACkB,KAAK,KAAK,CAAC,CAAC,EAAE;YACnC;YACA;YACAlB,kBAAkB,CAACkB,KAAK,GAAGX,MAAM,CAACW,KAAK,GAAGd,eAAe,CAACc,KAAK;UACjE;QACF;MACF;IACF,CAAC;IACDS,MAAM,EAAGN,CAAC,IAAK;MACb,SAAS;;MAET,IAAI3B,MAAM,CAACwB,KAAK,EAAE;QAChB;MACF;MAEAnB,aAAa,CAACmB,KAAK,GAAGG,CAAC,CAACF,MAAM;MAE9B,IAAI3B,QAAQ,EAAE;QACZ;QACA,IAAI6B,CAAC,CAACK,QAAQ,KAAK,CAAC,CAAC,EAAE;UACrB;QACF;QAEA,MAAMf,SAAS,GAAG5B,kBAAkB,CAClCsC,CAAC,CAACF,MAAM,EACRlB,oBAAoB,CAACiB,KAAK,EAC1BvB,MACF,CAAC;QAED,MAAM6B,sBAAsB,GAC1BxC,yBAAyB,CACvBY,UAAU,CAACsB,KAAK,EAChBrB,mBAAmB,CAACqB,KACtB,CAAC,GAAGf,4BAA4B,CAACe,KAAK;QACxC,MAAMO,eAAe,GAAGxC,kBAAkB,CACxC0B,SAAS,EACTa,sBACF,CAAC;QACD,MAAMI,kBAAkB,GAAGZ,IAAI,CAACC,GAAG,CACjCrB,UAAU,CAACsB,KAAK,EAChBP,SAAS,GAAGd,mBAAmB,CAACqB,KAClC,CAAC;;QAED;QACA,MAAMW,QAAQ,GAAG1C,aAAa,CAC5Ba,kBAAkB,CAACkB,KAAK,EACxBb,MAAM,CAACa,KAAK,CAACC,MAAM,EACnBb,IAAI,CAACY,KAAK,CAACC,MAAM,EACjB3B,QACF,CAAC;;QAED;QACA,IACEC,oBAAoB,KAAK,OAAO,IAChCoC,QAAQ,IACRlB,SAAS,GAAGb,OAAO,CAACoB,KAAK,EACzB;UACApB,OAAO,CAACoB,KAAK,GAAGP,SAAS;UAEzB,IAAIc,eAAe,KAAK,CAAC,IAAID,sBAAsB,GAAG,CAAC,EAAE;YACvD;UACF;UAEA9C,QAAQ,CAACY,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;UAEpC;QACF;QAEA,IAAI,CAACF,kBAAkB,CAACK,oBAAoB,EAAEoC,QAAQ,CAAC,EAAE;UACvD;UACA,IAAI3B,OAAO,CAACgB,KAAK,IAAIP,SAAS,GAAGb,OAAO,CAACoB,KAAK,EAAE;YAC9CpB,OAAO,CAACoB,KAAK,GAAGP,SAAS;YACzBD,mBAAmB,CAACC,SAAS,EAAEiB,kBAAkB,CAAC;UACpD;UAEA;QACF;;QAEA;QACA,IAAIH,eAAe,KAAK,CAAC,IAAID,sBAAsB,GAAG,CAAC,EAAE;UACvD;QACF;;QAEA;QACA,IAAI/B,oBAAoB,KAAK,YAAY,EAAE;UACzC,MAAMqC,YAAY,GAChB9B,kBAAkB,CAACkB,KAAK,GAAGpB,OAAO,CAACoB,KAAK,GAAGX,MAAM,CAACW,KAAK;UAEzD,IAAIP,SAAS,GAAGmB,YAAY,EAAE;YAC5B;YACA,IAAID,QAAQ,EAAE;cACZ/B,OAAO,CAACoB,KAAK,GAAGP,SAAS;cACzBjC,QAAQ,CAACY,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;YACtC,CAAC,MAAM,IAAIY,OAAO,CAACgB,KAAK,EAAE;cACxB;cACApB,OAAO,CAACoB,KAAK,GAAGP,SAAS;cACzBD,mBAAmB,CAACC,SAAS,EAAEiB,kBAAkB,CAAC;YACpD;YAEA;UACF;QACF;QAEA,MAAMG,MAAM,GACV/B,kBAAkB,CAACkB,KAAK,GAAGpB,OAAO,CAACoB,KAAK,GAAGO,eAAe;QAE5D/C,QAAQ,CAACY,aAAa,EAAE,CAAC,EAAEyC,MAAM,EAAE,KAAK,CAAC;MAC3C,CAAC,MAAM;QACL,MAAMpB,SAAS,GAAG5B,kBAAkB,CAClCsC,CAAC,CAACF,MAAM,EACRlB,oBAAoB,CAACiB,KAAK,EAC1BvB,MACF,CAAC;QAED,MAAM6B,sBAAsB,GAC1BxC,yBAAyB,CACvBY,UAAU,CAACsB,KAAK,EAChBrB,mBAAmB,CAACqB,KACtB,CAAC,GAAGf,4BAA4B,CAACe,KAAK;QACxC,MAAMO,eAAe,GAAGxC,kBAAkB,CACxC0B,SAAS,EACTa,sBACF,CAAC;QACD,MAAMI,kBAAkB,GAAGZ,IAAI,CAACC,GAAG,CACjCrB,UAAU,CAACsB,KAAK,EAChBP,SAAS,GAAGd,mBAAmB,CAACqB,KAClC,CAAC;;QAED;QACA,IACEzB,oBAAoB,KAAK,OAAO,IAChCS,OAAO,CAACgB,KAAK,IACbP,SAAS,GAAGb,OAAO,CAACoB,KAAK,EACzB;UACAR,mBAAmB,CAACC,SAAS,EAAEiB,kBAAkB,CAAC;UAElD;QACF;QAEA,IAAI,CAACxC,kBAAkB,CAACK,oBAAoB,EAAE,IAAI,CAAC,EAAE;UACnD;QACF;;QAEA;QACA,IAAIO,kBAAkB,CAACkB,KAAK,KAAK,CAAC,CAAC,EAAE;UACnC,IAAIhB,OAAO,CAACgB,KAAK,EAAE;YACjB;YACAR,mBAAmB,CAACC,SAAS,EAAEiB,kBAAkB,CAAC;UACpD;UACA;QACF;;QAEA;QACA,IAAInC,oBAAoB,KAAK,YAAY,IAAIS,OAAO,CAACgB,KAAK,EAAE;UAC1D,MAAMc,MAAM,GAAGhC,kBAAkB,CAACkB,KAAK,GAAGpB,OAAO,CAACoB,KAAK;UACvD,MAAMH,SAAS,GAAGC,IAAI,CAACC,GAAG,CACxBX,IAAI,CAACY,KAAK,CAACC,MAAM,GAAGd,MAAM,CAACa,KAAK,CAACC,MAAM,GAAGS,kBAAkB,EAC5D,CACF,CAAC;UAEDlD,QAAQ,CAACY,aAAa,EAAE,CAAC,EAAE0B,IAAI,CAACiB,GAAG,CAACD,MAAM,EAAEjB,SAAS,CAAC,EAAE,KAAK,CAAC;UAC9D;QACF;QAEA,MAAMgB,MAAM,GAAGjD,mBAAmB,CAChCkB,kBAAkB,CAACkB,KAAK,EACxBO,eAAe,EACfnB,IAAI,CAACY,KAAK,CAACC,MAAM,EACjBd,MAAM,CAACa,KAAK,CAACC,MAAM,EACnBS,kBACF,CAAC;QAEDlD,QAAQ,CAACY,aAAa,EAAE,CAAC,EAAEyC,MAAM,EAAE,KAAK,CAAC;;QAEzC;QACA,IAAI,CAAC7B,OAAO,CAACgB,KAAK,EAAE;UAClBd,eAAe,CAACc,KAAK,GAAGa,MAAM,GAAG/B,kBAAkB,CAACkB,KAAK;QAC3D;MACF;IACF,CAAC;IACDgB,KAAK,EAAGb,CAAC,IAAK;MACZ,SAAS;;MAET,IAAI3B,MAAM,CAACwB,KAAK,EAAE;QAChB;MACF;MAEA,MAAMP,SAAS,GAAG5B,kBAAkB,CAClCsC,CAAC,CAACF,MAAM,EACRlB,oBAAoB,CAACiB,KAAK,EAC1BvB,MACF,CAAC;MAEDG,OAAO,CAACoB,KAAK,GAAGP,SAAS;;MAEzB;MACA,IAAIA,SAAS,GAAG,CAAC,IAAIX,kBAAkB,CAACkB,KAAK,KAAK,CAAC,CAAC,EAAE;QACpDd,eAAe,CAACc,KAAK,GAAGX,MAAM,CAACW,KAAK,GAAGlB,kBAAkB,CAACkB,KAAK;MACjE;IACF;EACF,CAAC,EACD,CAAC1B,QAAQ,EAAEC,oBAAoB,EAAEE,MAAM,CACzC,CAAC;EAED,OAAO;IACLG,OAAO;IACPC,aAAa;IACboC,cAAc,EAAErB,SAAS;IACzBP,MAAM;IACNF,MAAM;IACNC,IAAI;IACJE,QAAQ;IACRC;EACF,CAAC;AACH;AAEA,SAASpB,eAAe","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { LayoutChangeEvent } from \"react-native\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\ntype KeyboardLiftBehavior = \"always\" | \"whenAtEnd\" | \"persistent\" | \"never\";\n\ntype UseChatKeyboardOptions = {\n inverted: boolean;\n keyboardLiftBehavior: KeyboardLiftBehavior;\n freeze: SharedValue<boolean>;\n offset: number;\n blankSpace: SharedValue<number>;\n /** Extra content padding shared value — needed on iOS to correctly clamp contentOffset. */\n extraContentPadding: SharedValue<number>;\n};\n\ntype UseChatKeyboardReturn = {\n /** Extra scrollable space (= keyboard height). Used as contentInset on iOS, contentInsetBottom/contentInsetTop on Android. */\n padding: SharedValue<number>;\n /** Raw keyboard height updated every frame in onMove. Used to force Reanimated commits on Fabric. */\n currentHeight: SharedValue<number>;\n /** Absolute Y content offset for iOS (set once in onStart). `undefined` on Android. */\n contentOffsetY: SharedValue<number> | undefined;\n /** Current vertical scroll offset. */\n scroll: SharedValue<number>;\n /** Visible viewport dimensions. */\n layout: SharedValue<{ width: number; height: number }>;\n /** Total content dimensions. */\n size: SharedValue<{ width: number; height: number }>;\n /** Callback to attach to ScrollView's onLayout prop to capture initial viewport dimensions. */\n onLayout: (e: LayoutChangeEvent) => void;\n /** Callback to attach to ScrollView's onContentSizeChange prop to capture initial content dimensions. */\n onContentSizeChange: (w: number, h: number) => void;\n};\n\nexport type {\n KeyboardLiftBehavior,\n UseChatKeyboardOptions,\n UseChatKeyboardReturn,\n};\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ import { useMemo } from "react";
2
+ import { runOnJS, useAnimatedReaction, useDerivedValue } from "react-native-reanimated";
3
+ import { isScrollAtEnd } from "./useChatKeyboard/helpers";
4
+ const hasWorkletHash = value => typeof value === "function" && !!value.__workletHash;
5
+ export const useEndVisible = ({
6
+ scroll,
7
+ layout,
8
+ size,
9
+ inverted,
10
+ onEndVisible
11
+ }) => {
12
+ const isWorklet = useMemo(() => hasWorkletHash(onEndVisible), [onEndVisible]);
13
+ const isAtEnd = useDerivedValue(() => {
14
+ // Wait until the scroll view has been measured to avoid a spurious initial
15
+ // `true` on a (0,0,0) layout (the helper would otherwise treat unmeasured
16
+ // state as "at end" because 0 + 0 >= 0 - threshold).
17
+ if (layout.value.height === 0 || size.value.height === 0) {
18
+ return null;
19
+ }
20
+ return isScrollAtEnd(scroll.value, layout.value.height, size.value.height, inverted);
21
+ });
22
+ useAnimatedReaction(() => isAtEnd.value, (current, previous) => {
23
+ if (current === null || current === previous || !onEndVisible) {
24
+ return;
25
+ }
26
+ if (isWorklet) {
27
+ onEndVisible(current);
28
+ } else {
29
+ runOnJS(onEndVisible)(current);
30
+ }
31
+ }, [onEndVisible, isWorklet, inverted]);
32
+ };
33
+ //# sourceMappingURL=useEndVisible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","runOnJS","useAnimatedReaction","useDerivedValue","isScrollAtEnd","hasWorkletHash","value","__workletHash","useEndVisible","scroll","layout","size","inverted","onEndVisible","isWorklet","isAtEnd","height","current","previous"],"sources":["useEndVisible.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport {\n runOnJS,\n useAnimatedReaction,\n useDerivedValue,\n} from \"react-native-reanimated\";\n\nimport { isScrollAtEnd } from \"./useChatKeyboard/helpers\";\n\nimport type { SharedValue } from \"react-native-reanimated\";\n\ntype EndVisibleCallback = (visible: boolean) => void;\n\ntype Options = {\n scroll: SharedValue<number>;\n layout: SharedValue<{ width: number; height: number }>;\n size: SharedValue<{ width: number; height: number }>;\n inverted: boolean;\n onEndVisible?: EndVisibleCallback;\n};\n\nconst hasWorkletHash = (value: unknown): boolean =>\n typeof value === \"function\" &&\n !!(value as unknown as Record<string, unknown>).__workletHash;\n\nexport const useEndVisible = ({\n scroll,\n layout,\n size,\n inverted,\n onEndVisible,\n}: Options) => {\n const isWorklet = useMemo(() => hasWorkletHash(onEndVisible), [onEndVisible]);\n\n const isAtEnd = useDerivedValue(() => {\n // Wait until the scroll view has been measured to avoid a spurious initial\n // `true` on a (0,0,0) layout (the helper would otherwise treat unmeasured\n // state as \"at end\" because 0 + 0 >= 0 - threshold).\n if (layout.value.height === 0 || size.value.height === 0) {\n return null;\n }\n\n return isScrollAtEnd(\n scroll.value,\n layout.value.height,\n size.value.height,\n inverted,\n );\n });\n\n useAnimatedReaction(\n () => isAtEnd.value,\n (current, previous) => {\n if (current === null || current === previous || !onEndVisible) {\n return;\n }\n\n if (isWorklet) {\n onEndVisible(current);\n } else {\n runOnJS(onEndVisible)(current);\n }\n },\n [onEndVisible, isWorklet, inverted],\n );\n};\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SACEC,OAAO,EACPC,mBAAmB,EACnBC,eAAe,QACV,yBAAyB;AAEhC,SAASC,aAAa,QAAQ,2BAA2B;AAczD,MAAMC,cAAc,GAAIC,KAAc,IACpC,OAAOA,KAAK,KAAK,UAAU,IAC3B,CAAC,CAAEA,KAAK,CAAwCC,aAAa;AAE/D,OAAO,MAAMC,aAAa,GAAGA,CAAC;EAC5BC,MAAM;EACNC,MAAM;EACNC,IAAI;EACJC,QAAQ;EACRC;AACO,CAAC,KAAK;EACb,MAAMC,SAAS,GAAGd,OAAO,CAAC,MAAMK,cAAc,CAACQ,YAAY,CAAC,EAAE,CAACA,YAAY,CAAC,CAAC;EAE7E,MAAME,OAAO,GAAGZ,eAAe,CAAC,MAAM;IACpC;IACA;IACA;IACA,IAAIO,MAAM,CAACJ,KAAK,CAACU,MAAM,KAAK,CAAC,IAAIL,IAAI,CAACL,KAAK,CAACU,MAAM,KAAK,CAAC,EAAE;MACxD,OAAO,IAAI;IACb;IAEA,OAAOZ,aAAa,CAClBK,MAAM,CAACH,KAAK,EACZI,MAAM,CAACJ,KAAK,CAACU,MAAM,EACnBL,IAAI,CAACL,KAAK,CAACU,MAAM,EACjBJ,QACF,CAAC;EACH,CAAC,CAAC;EAEFV,mBAAmB,CACjB,MAAMa,OAAO,CAACT,KAAK,EACnB,CAACW,OAAO,EAAEC,QAAQ,KAAK;IACrB,IAAID,OAAO,KAAK,IAAI,IAAIA,OAAO,KAAKC,QAAQ,IAAI,CAACL,YAAY,EAAE;MAC7D;IACF;IAEA,IAAIC,SAAS,EAAE;MACbD,YAAY,CAACI,OAAO,CAAC;IACvB,CAAC,MAAM;MACLhB,OAAO,CAACY,YAAY,CAAC,CAACI,OAAO,CAAC;IAChC;EACF,CAAC,EACD,CAACJ,YAAY,EAAEC,SAAS,EAAEF,QAAQ,CACpC,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,87 @@
1
+ import { useCallback } from "react";
2
+ import { Platform } from "react-native";
3
+ import { scrollTo, useAnimatedReaction } from "react-native-reanimated";
4
+ import { IS_FABRIC } from "../../../architecture";
5
+ import { isScrollAtEnd, shouldShiftContent } from "../useChatKeyboard/helpers";
6
+ /**
7
+ * Hook that reacts to `extraContentPadding` changes and conditionally
8
+ * adjusts the scroll position using `scrollTo` on both iOS and Android.
9
+ *
10
+ * Padding extension (scrollable range) is handled externally via a
11
+ * `useDerivedValue` that sums keyboard padding + extra content padding.
12
+ * This hook only handles the scroll correction.
13
+ *
14
+ * @param options - Configuration and shared values.
15
+ * @example
16
+ * ```tsx
17
+ * useExtraContentPadding({ scrollViewRef, extraContentPadding, ... });
18
+ * ```
19
+ */
20
+ function useExtraContentPadding(options) {
21
+ const {
22
+ scrollViewRef,
23
+ extraContentPadding,
24
+ keyboardPadding,
25
+ blankSpace,
26
+ scroll,
27
+ layout,
28
+ size,
29
+ contentOffsetY,
30
+ inverted,
31
+ keyboardLiftBehavior,
32
+ freeze
33
+ } = options;
34
+ const scrollToTarget = useCallback(target => {
35
+ "worklet";
36
+
37
+ if (contentOffsetY && IS_FABRIC) {
38
+ // eslint-disable-next-line react-compiler/react-compiler
39
+ contentOffsetY.value = target;
40
+ } else if (Platform.OS === "android" || Platform.OS === "harmony") {
41
+ // Defer scrollTo so the animatedProps inset commit lands first;
42
+ // otherwise the native ScrollView clamps to the old range.
43
+ requestAnimationFrame(() => {
44
+ scrollTo(scrollViewRef, 0, target, false);
45
+ });
46
+ } else {
47
+ scrollTo(scrollViewRef, 0, target, false);
48
+ }
49
+ }, [scrollViewRef, contentOffsetY]);
50
+ useAnimatedReaction(() => extraContentPadding.value, (current, previous) => {
51
+ if (freeze.value || previous === null) {
52
+ return;
53
+ }
54
+ const rawDelta = current - previous;
55
+ if (rawDelta === 0) {
56
+ return;
57
+ }
58
+
59
+ // Compute effective delta considering blankSpace floor
60
+ const previousTotal = Math.max(blankSpace.value, keyboardPadding.value + previous);
61
+ const currentTotal = Math.max(blankSpace.value, keyboardPadding.value + current);
62
+ const effectiveDelta = currentTotal - previousTotal;
63
+ if (effectiveDelta === 0) {
64
+ // blankSpace absorbed the change
65
+ return;
66
+ }
67
+ const atEnd = isScrollAtEnd(scroll.value, layout.value.height, size.value.height, inverted);
68
+
69
+ // "persistent": scroll on grow, hold position on shrink (unless at end)
70
+ if (keyboardLiftBehavior === "persistent" && effectiveDelta < 0 && !atEnd) {
71
+ return;
72
+ }
73
+ if (!shouldShiftContent(keyboardLiftBehavior, atEnd)) {
74
+ return;
75
+ }
76
+ if (inverted) {
77
+ const target = Math.max(scroll.value - effectiveDelta, -currentTotal);
78
+ scrollToTarget(target);
79
+ } else {
80
+ const maxScroll = Math.max(size.value.height - layout.value.height + currentTotal, 0);
81
+ const target = Math.min(scroll.value + effectiveDelta, maxScroll);
82
+ scrollToTarget(target);
83
+ }
84
+ }, [inverted, keyboardLiftBehavior]);
85
+ }
86
+ export { useExtraContentPadding };
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","Platform","scrollTo","useAnimatedReaction","IS_FABRIC","isScrollAtEnd","shouldShiftContent","useExtraContentPadding","options","scrollViewRef","extraContentPadding","keyboardPadding","blankSpace","scroll","layout","size","contentOffsetY","inverted","keyboardLiftBehavior","freeze","scrollToTarget","target","value","OS","requestAnimationFrame","current","previous","rawDelta","previousTotal","Math","max","currentTotal","effectiveDelta","atEnd","height","maxScroll","min"],"sources":["index.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { Platform } from \"react-native\";\nimport { scrollTo, useAnimatedReaction } from \"react-native-reanimated\";\n\nimport { IS_FABRIC } from \"../../../architecture\";\nimport { isScrollAtEnd, shouldShiftContent } from \"../useChatKeyboard/helpers\";\n\nimport type { KeyboardLiftBehavior } from \"../useChatKeyboard/types\";\nimport type { AnimatedRef, SharedValue } from \"react-native-reanimated\";\nimport type Reanimated from \"react-native-reanimated\";\n\ntype UseExtraContentPaddingOptions = {\n scrollViewRef: AnimatedRef<Reanimated.ScrollView>;\n extraContentPadding: SharedValue<number>;\n /** Keyboard-only padding from useChatKeyboard — used to compute total padding for clamping. */\n keyboardPadding: SharedValue<number>;\n /** Minimum inset floor — used to absorb keyboard and extraContentPadding changes. */\n blankSpace: SharedValue<number>;\n /** Current vertical scroll offset. */\n scroll: SharedValue<number>;\n /** Visible viewport dimensions. */\n layout: SharedValue<{ width: number; height: number }>;\n /** Total content dimensions. */\n size: SharedValue<{ width: number; height: number }>;\n /** IOS only — when provided, sets contentOffset atomically with contentInset. */\n contentOffsetY?: SharedValue<number>;\n inverted: boolean;\n keyboardLiftBehavior: KeyboardLiftBehavior;\n freeze: SharedValue<boolean>;\n};\n\n/**\n * Hook that reacts to `extraContentPadding` changes and conditionally\n * adjusts the scroll position using `scrollTo` on both iOS and Android.\n *\n * Padding extension (scrollable range) is handled externally via a\n * `useDerivedValue` that sums keyboard padding + extra content padding.\n * This hook only handles the scroll correction.\n *\n * @param options - Configuration and shared values.\n * @example\n * ```tsx\n * useExtraContentPadding({ scrollViewRef, extraContentPadding, ... });\n * ```\n */\nfunction useExtraContentPadding(options: UseExtraContentPaddingOptions): void {\n const {\n scrollViewRef,\n extraContentPadding,\n keyboardPadding,\n blankSpace,\n scroll,\n layout,\n size,\n contentOffsetY,\n inverted,\n keyboardLiftBehavior,\n freeze,\n } = options;\n\n const scrollToTarget = useCallback(\n (target: number) => {\n \"worklet\";\n\n if (contentOffsetY && IS_FABRIC) {\n // eslint-disable-next-line react-compiler/react-compiler\n contentOffsetY.value = target;\n } else if (Platform.OS === \"android\" || (Platform.OS as string) === \"harmony\") {\n // Defer scrollTo so the animatedProps inset commit lands first;\n // otherwise the native ScrollView clamps to the old range.\n requestAnimationFrame(() => {\n scrollTo(scrollViewRef, 0, target, false);\n });\n } else {\n scrollTo(scrollViewRef, 0, target, false);\n }\n },\n [scrollViewRef, contentOffsetY],\n );\n\n useAnimatedReaction(\n () => extraContentPadding.value,\n (current, previous) => {\n if (freeze.value || previous === null) {\n return;\n }\n\n const rawDelta = current - previous;\n\n if (rawDelta === 0) {\n return;\n }\n\n // Compute effective delta considering blankSpace floor\n const previousTotal = Math.max(\n blankSpace.value,\n keyboardPadding.value + previous,\n );\n const currentTotal = Math.max(\n blankSpace.value,\n keyboardPadding.value + current,\n );\n const effectiveDelta = currentTotal - previousTotal;\n\n if (effectiveDelta === 0) {\n // blankSpace absorbed the change\n return;\n }\n\n const atEnd = isScrollAtEnd(\n scroll.value,\n layout.value.height,\n size.value.height,\n inverted,\n );\n\n // \"persistent\": scroll on grow, hold position on shrink (unless at end)\n if (\n keyboardLiftBehavior === \"persistent\" &&\n effectiveDelta < 0 &&\n !atEnd\n ) {\n return;\n }\n\n if (!shouldShiftContent(keyboardLiftBehavior, atEnd)) {\n return;\n }\n\n if (inverted) {\n const target = Math.max(scroll.value - effectiveDelta, -currentTotal);\n\n scrollToTarget(target);\n } else {\n const maxScroll = Math.max(\n size.value.height - layout.value.height + currentTotal,\n 0,\n );\n const target = Math.min(scroll.value + effectiveDelta, maxScroll);\n\n scrollToTarget(target);\n }\n },\n [inverted, keyboardLiftBehavior],\n );\n}\n\nexport { useExtraContentPadding };\nexport type { UseExtraContentPaddingOptions };\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useMemo","Reanimated","interpolate","useAnimatedStyle","useReanimatedKeyboardAnimation","KeyboardStickyView","children","offset","closed","opened","style","enabled","props","ref","height","progress","stickyViewStyle","value","transform","translateY","styles","createElement","View","_extends"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useMemo } from \"react\";\r\nimport Reanimated, {\r\n interpolate,\r\n useAnimatedStyle,\r\n} from \"react-native-reanimated\";\r\n\r\nimport { useReanimatedKeyboardAnimation } from \"../../hooks\";\r\n\r\nimport type { View, ViewProps } from \"react-native\";\r\n\r\nexport type KeyboardStickyViewProps = {\r\n /**\r\n * Specify additional offset to the view for given keyboard state.\r\n */\r\n offset?: {\r\n /**\r\n * Adds additional `translateY` when keyboard is close. By default `0`.\r\n */\r\n closed?: number;\r\n /**\r\n * Adds additional `translateY` when keyboard is open. By default `0`.\r\n */\r\n opened?: number;\r\n };\r\n\r\n /** Controls whether this `KeyboardStickyView` instance should take effect. Default is `true` */\r\n enabled?: boolean;\r\n} & ViewProps;\r\n\r\nconst KeyboardStickyView = forwardRef<\r\n View,\r\n React.PropsWithChildren<KeyboardStickyViewProps>\r\n>(\r\n (\r\n {\r\n children,\r\n offset: { closed = 0, opened = 0 } = {},\r\n style,\r\n enabled = true,\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const { height, progress } = useReanimatedKeyboardAnimation();\r\n const stickyViewStyle = useAnimatedStyle(() => {\r\n const offset = interpolate(progress.value, [0, 1], [closed, opened]);\r\n\r\n return {\r\n transform: [{ translateY: enabled ? height.value + offset : closed }],\r\n };\r\n }, [closed, opened, enabled]);\r\n\r\n const styles = useMemo(\r\n () => [style, stickyViewStyle],\r\n [style, stickyViewStyle],\r\n );\r\n\r\n return (\r\n <Reanimated.View ref={ref} style={styles} {...props}>\r\n {children}\r\n </Reanimated.View>\r\n );\r\n },\r\n);\r\n\r\nexport default KeyboardStickyView;\r\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAClD,OAAOC,UAAU,IACfC,WAAW,EACXC,gBAAgB,QACX,yBAAyB;AAEhC,SAASC,8BAA8B,QAAQ,aAAa;AAuB5D,MAAMC,kBAAkB,gBAAGN,UAAU,CAInC,CACE;EACEO,QAAQ;EACRC,MAAM,EAAE;IAAEC,MAAM,GAAG,CAAC;IAAEC,MAAM,GAAG;EAAE,CAAC,GAAG,CAAC,CAAC;EACvCC,KAAK;EACLC,OAAO,GAAG,IAAI;EACd,GAAGC;AACL,CAAC,EACDC,GAAG,KACA;EACH,MAAM;IAAEC,MAAM;IAAEC;EAAS,CAAC,GAAGX,8BAA8B,CAAC,CAAC;EAC7D,MAAMY,eAAe,GAAGb,gBAAgB,CAAC,MAAM;IAC7C,MAAMI,MAAM,GAAGL,WAAW,CAACa,QAAQ,CAACE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAACT,MAAM,EAAEC,MAAM,CAAC,CAAC;IAEpE,OAAO;MACLS,SAAS,EAAE,CAAC;QAAEC,UAAU,EAAER,OAAO,GAAGG,MAAM,CAACG,KAAK,GAAGV,MAAM,GAAGC;MAAO,CAAC;IACtE,CAAC;EACH,CAAC,EAAE,CAACA,MAAM,EAAEC,MAAM,EAAEE,OAAO,CAAC,CAAC;EAE7B,MAAMS,MAAM,GAAGpB,OAAO,CACpB,MAAM,CAACU,KAAK,EAAEM,eAAe,CAAC,EAC9B,CAACN,KAAK,EAAEM,eAAe,CACzB,CAAC;EAED,oBACElB,KAAA,CAAAuB,aAAA,CAACpB,UAAU,CAACqB,IAAI,EAAAC,QAAA;IAACV,GAAG,EAAEA,GAAI;IAACH,KAAK,EAAEU;EAAO,GAAKR,KAAK,GAChDN,QACc,CAAC;AAEtB,CACF,CAAC;AAED,eAAeD,kBAAkB","ignoreList":[]}
1
+ {"version":3,"names":["React","forwardRef","useMemo","Reanimated","interpolate","useAnimatedStyle","useReanimatedKeyboardAnimation","KeyboardStickyView","children","offset","closed","opened","style","enabled","props","ref","height","progress","stickyViewStyle","value","transform","translateY","styles","createElement","View","_extends"],"sources":["index.tsx"],"sourcesContent":["import React, { forwardRef, useMemo } from \"react\";\nimport Reanimated, {\n interpolate,\n useAnimatedStyle,\n} from \"react-native-reanimated\";\n\nimport { useReanimatedKeyboardAnimation } from \"../../hooks\";\n\nimport type { View, ViewProps } from \"react-native\";\n\nexport type KeyboardStickyViewProps = {\n /**\n * Specify additional offset to the view for given keyboard state.\n */\n offset?: {\n /**\n * Adds additional `translateY` when keyboard is close. By default `0`.\n */\n closed?: number;\n /**\n * Adds additional `translateY` when keyboard is open. By default `0`.\n */\n opened?: number;\n };\n\n /** Controls whether this `KeyboardStickyView` instance should take effect. Default is `true` */\n enabled?: boolean;\n} & ViewProps;\n\nconst KeyboardStickyView = forwardRef<\n View,\n React.PropsWithChildren<KeyboardStickyViewProps>\n>(\n (\n {\n children,\n offset: { closed = 0, opened = 0 } = {},\n style,\n enabled = true,\n ...props\n },\n ref,\n ) => {\n const { height, progress } = useReanimatedKeyboardAnimation();\n const stickyViewStyle = useAnimatedStyle(() => {\n const offset = interpolate(progress.value, [0, 1], [closed, opened]);\n\n return {\n transform: [{ translateY: enabled ? height.value + offset : closed }],\n };\n }, [closed, opened, enabled]);\n\n const styles = useMemo(\n () => [style, stickyViewStyle],\n [style, stickyViewStyle],\n );\n\n return (\n <Reanimated.View ref={ref} style={styles} {...props}>\n {children}\n </Reanimated.View>\n );\n },\n);\n\nexport default KeyboardStickyView;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAClD,OAAOC,UAAU,IACfC,WAAW,EACXC,gBAAgB,QACX,yBAAyB;AAEhC,SAASC,8BAA8B,QAAQ,aAAa;AAuB5D,MAAMC,kBAAkB,gBAAGN,UAAU,CAInC,CACE;EACEO,QAAQ;EACRC,MAAM,EAAE;IAAEC,MAAM,GAAG,CAAC;IAAEC,MAAM,GAAG;EAAE,CAAC,GAAG,CAAC,CAAC;EACvCC,KAAK;EACLC,OAAO,GAAG,IAAI;EACd,GAAGC;AACL,CAAC,EACDC,GAAG,KACA;EACH,MAAM;IAAEC,MAAM;IAAEC;EAAS,CAAC,GAAGX,8BAA8B,CAAC,CAAC;EAC7D,MAAMY,eAAe,GAAGb,gBAAgB,CAAC,MAAM;IAC7C,MAAMI,MAAM,GAAGL,WAAW,CAACa,QAAQ,CAACE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAACT,MAAM,EAAEC,MAAM,CAAC,CAAC;IAEpE,OAAO;MACLS,SAAS,EAAE,CAAC;QAAEC,UAAU,EAAER,OAAO,GAAGG,MAAM,CAACG,KAAK,GAAGV,MAAM,GAAGC;MAAO,CAAC;IACtE,CAAC;EACH,CAAC,EAAE,CAACA,MAAM,EAAEC,MAAM,EAAEE,OAAO,CAAC,CAAC;EAE7B,MAAMS,MAAM,GAAGpB,OAAO,CACpB,MAAM,CAACU,KAAK,EAAEM,eAAe,CAAC,EAC9B,CAACN,KAAK,EAAEM,eAAe,CACzB,CAAC;EAED,oBACElB,KAAA,CAAAuB,aAAA,CAACpB,UAAU,CAACqB,IAAI,EAAAC,QAAA;IAACV,GAAG,EAAEA,GAAI;IAACH,KAAK,EAAEU;EAAO,GAAKR,KAAK,GAChDN,QACc,CAAC;AAEtB,CACF,CAAC;AAED,eAAeD,kBAAkB","ignoreList":[]}
@@ -1,12 +1,12 @@
1
1
  import React, { useMemo } from "react";
2
2
  import { Animated, StyleSheet, View } from "react-native";
3
- import useColorScheme from "../hooks/useColorScheme";
3
+ import { useKeyboardState } from "../../hooks";
4
4
  const ArrowComponent = ({
5
5
  type,
6
6
  disabled,
7
7
  theme
8
8
  }) => {
9
- const colorScheme = useColorScheme();
9
+ const colorScheme = useKeyboardState(state => state.appearance);
10
10
  const color = useMemo(() => ({
11
11
  backgroundColor: disabled ? theme[colorScheme].disabled : theme[colorScheme].primary
12
12
  }), [disabled, theme, colorScheme]);
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","Animated","StyleSheet","View","useColorScheme","ArrowComponent","type","disabled","theme","colorScheme","color","backgroundColor","primary","left","styles","arrowLeftLine","right","arrowRightLine","createElement","style","arrowDownContainer","arrowUpContainer","arrow","arrowLine","width","height","borderRadius","marginHorizontal","justifyContent","alignItems","create","transform","rotate","flexDirection"],"sources":["Arrow.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\r\nimport { Animated, StyleSheet, View } from \"react-native\";\r\n\r\nimport useColorScheme from \"../hooks/useColorScheme\";\r\n\r\nimport type { KeyboardToolbarTheme } from \"./types\";\r\nimport type { ViewStyle } from \"react-native\";\r\n\r\ntype ArrowProps = {\r\n type: \"prev\" | \"next\";\r\n disabled?: boolean;\r\n theme: KeyboardToolbarTheme;\r\n};\r\n\r\nconst ArrowComponent: React.FC<ArrowProps> = ({ type, disabled, theme }) => {\r\n const colorScheme = useColorScheme();\r\n\r\n const color = useMemo(\r\n () => ({\r\n backgroundColor: disabled\r\n ? theme[colorScheme].disabled\r\n : theme[colorScheme].primary,\r\n }),\r\n [disabled, theme, colorScheme],\r\n );\r\n const left = useMemo(() => [styles.arrowLeftLine, color], [color]);\r\n const right = useMemo(() => [styles.arrowRightLine, color], [color]);\r\n\r\n return (\r\n <View\r\n style={\r\n type === \"next\" ? styles.arrowDownContainer : styles.arrowUpContainer\r\n }\r\n >\r\n <View style={styles.arrow}>\r\n <Animated.View style={left} />\r\n <Animated.View style={right} />\r\n </View>\r\n </View>\r\n );\r\n};\r\n\r\nconst arrowLine: ViewStyle = {\r\n width: 13,\r\n height: 2,\r\n borderRadius: 1,\r\n};\r\nconst arrowUpContainer: ViewStyle = {\r\n marginHorizontal: 5,\r\n width: 30,\r\n height: 30,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n};\r\nconst styles = StyleSheet.create({\r\n arrowUpContainer: arrowUpContainer,\r\n arrowDownContainer: {\r\n ...arrowUpContainer,\r\n transform: [{ rotate: \"180deg\" }],\r\n },\r\n arrow: {\r\n width: 20,\r\n height: 20,\r\n flexDirection: \"row\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n },\r\n arrowLeftLine: {\r\n ...arrowLine,\r\n transform: [{ rotate: \"-45deg\" }],\r\n left: -0.5,\r\n },\r\n arrowRightLine: {\r\n ...arrowLine,\r\n transform: [{ rotate: \"45deg\" }],\r\n left: -5.5,\r\n },\r\n});\r\n\r\nexport default ArrowComponent;\r\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,QAAQ,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAEzD,OAAOC,cAAc,MAAM,yBAAyB;AAWpD,MAAMC,cAAoC,GAAGA,CAAC;EAAEC,IAAI;EAAEC,QAAQ;EAAEC;AAAM,CAAC,KAAK;EAC1E,MAAMC,WAAW,GAAGL,cAAc,CAAC,CAAC;EAEpC,MAAMM,KAAK,GAAGV,OAAO,CACnB,OAAO;IACLW,eAAe,EAAEJ,QAAQ,GACrBC,KAAK,CAACC,WAAW,CAAC,CAACF,QAAQ,GAC3BC,KAAK,CAACC,WAAW,CAAC,CAACG;EACzB,CAAC,CAAC,EACF,CAACL,QAAQ,EAAEC,KAAK,EAAEC,WAAW,CAC/B,CAAC;EACD,MAAMI,IAAI,GAAGb,OAAO,CAAC,MAAM,CAACc,MAAM,CAACC,aAAa,EAAEL,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAClE,MAAMM,KAAK,GAAGhB,OAAO,CAAC,MAAM,CAACc,MAAM,CAACG,cAAc,EAAEP,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEpE,oBACEX,KAAA,CAAAmB,aAAA,CAACf,IAAI;IACHgB,KAAK,EACHb,IAAI,KAAK,MAAM,GAAGQ,MAAM,CAACM,kBAAkB,GAAGN,MAAM,CAACO;EACtD,gBAEDtB,KAAA,CAAAmB,aAAA,CAACf,IAAI;IAACgB,KAAK,EAAEL,MAAM,CAACQ;EAAM,gBACxBvB,KAAA,CAAAmB,aAAA,CAACjB,QAAQ,CAACE,IAAI;IAACgB,KAAK,EAAEN;EAAK,CAAE,CAAC,eAC9Bd,KAAA,CAAAmB,aAAA,CAACjB,QAAQ,CAACE,IAAI;IAACgB,KAAK,EAAEH;EAAM,CAAE,CAC1B,CACF,CAAC;AAEX,CAAC;AAED,MAAMO,SAAoB,GAAG;EAC3BC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,CAAC;EACTC,YAAY,EAAE;AAChB,CAAC;AACD,MAAML,gBAA2B,GAAG;EAClCM,gBAAgB,EAAE,CAAC;EACnBH,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,EAAE;EACVG,cAAc,EAAE,QAAQ;EACxBC,UAAU,EAAE;AACd,CAAC;AACD,MAAMf,MAAM,GAAGZ,UAAU,CAAC4B,MAAM,CAAC;EAC/BT,gBAAgB,EAAEA,gBAAgB;EAClCD,kBAAkB,EAAE;IAClB,GAAGC,gBAAgB;IACnBU,SAAS,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAS,CAAC;EAClC,CAAC;EACDV,KAAK,EAAE;IACLE,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVQ,aAAa,EAAE,KAAK;IACpBJ,UAAU,EAAE,QAAQ;IACpBD,cAAc,EAAE;EAClB,CAAC;EACDb,aAAa,EAAE;IACb,GAAGQ,SAAS;IACZQ,SAAS,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAS,CAAC,CAAC;IACjCnB,IAAI,EAAE,CAAC;EACT,CAAC;EACDI,cAAc,EAAE;IACd,GAAGM,SAAS;IACZQ,SAAS,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAQ,CAAC,CAAC;IAChCnB,IAAI,EAAE,CAAC;EACT;AACF,CAAC,CAAC;AAEF,eAAeR,cAAc","ignoreList":[]}
1
+ {"version":3,"names":["React","useMemo","Animated","StyleSheet","View","useKeyboardState","ArrowComponent","type","disabled","theme","colorScheme","state","appearance","color","backgroundColor","primary","left","styles","arrowLeftLine","right","arrowRightLine","createElement","style","arrowDownContainer","arrowUpContainer","arrow","arrowLine","width","height","borderRadius","marginHorizontal","justifyContent","alignItems","create","transform","rotate","flexDirection"],"sources":["Arrow.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { Animated, StyleSheet, View } from \"react-native\";\n\nimport { useKeyboardState } from \"../../hooks\";\n\nimport type { KeyboardToolbarTheme } from \"./types\";\nimport type { ViewStyle } from \"react-native\";\n\ntype ArrowProps = {\n type: \"prev\" | \"next\";\n disabled?: boolean;\n theme: KeyboardToolbarTheme;\n};\n\nconst ArrowComponent: React.FC<ArrowProps> = ({ type, disabled, theme }) => {\n const colorScheme = useKeyboardState((state) => state.appearance);\n\n const color = useMemo(\n () => ({\n backgroundColor: disabled\n ? theme[colorScheme].disabled\n : theme[colorScheme].primary,\n }),\n [disabled, theme, colorScheme],\n );\n const left = useMemo(() => [styles.arrowLeftLine, color], [color]);\n const right = useMemo(() => [styles.arrowRightLine, color], [color]);\n\n return (\n <View\n style={\n type === \"next\" ? styles.arrowDownContainer : styles.arrowUpContainer\n }\n >\n <View style={styles.arrow}>\n <Animated.View style={left} />\n <Animated.View style={right} />\n </View>\n </View>\n );\n};\n\nconst arrowLine: ViewStyle = {\n width: 13,\n height: 2,\n borderRadius: 1,\n};\nconst arrowUpContainer: ViewStyle = {\n marginHorizontal: 5,\n width: 30,\n height: 30,\n justifyContent: \"center\",\n alignItems: \"center\",\n};\nconst styles = StyleSheet.create({\n arrowUpContainer: arrowUpContainer,\n arrowDownContainer: {\n ...arrowUpContainer,\n transform: [{ rotate: \"180deg\" }],\n },\n arrow: {\n width: 20,\n height: 20,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n },\n arrowLeftLine: {\n ...arrowLine,\n transform: [{ rotate: \"-45deg\" }],\n left: -0.5,\n },\n arrowRightLine: {\n ...arrowLine,\n transform: [{ rotate: \"45deg\" }],\n left: -5.5,\n },\n});\n\nexport default ArrowComponent;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,QAAQ,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAEzD,SAASC,gBAAgB,QAAQ,aAAa;AAW9C,MAAMC,cAAoC,GAAGA,CAAC;EAAEC,IAAI;EAAEC,QAAQ;EAAEC;AAAM,CAAC,KAAK;EAC1E,MAAMC,WAAW,GAAGL,gBAAgB,CAAEM,KAAK,IAAKA,KAAK,CAACC,UAAU,CAAC;EAEjE,MAAMC,KAAK,GAAGZ,OAAO,CACnB,OAAO;IACLa,eAAe,EAAEN,QAAQ,GACrBC,KAAK,CAACC,WAAW,CAAC,CAACF,QAAQ,GAC3BC,KAAK,CAACC,WAAW,CAAC,CAACK;EACzB,CAAC,CAAC,EACF,CAACP,QAAQ,EAAEC,KAAK,EAAEC,WAAW,CAC/B,CAAC;EACD,MAAMM,IAAI,GAAGf,OAAO,CAAC,MAAM,CAACgB,MAAM,CAACC,aAAa,EAAEL,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAClE,MAAMM,KAAK,GAAGlB,OAAO,CAAC,MAAM,CAACgB,MAAM,CAACG,cAAc,EAAEP,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEpE,oBACEb,KAAA,CAAAqB,aAAA,CAACjB,IAAI;IACHkB,KAAK,EACHf,IAAI,KAAK,MAAM,GAAGU,MAAM,CAACM,kBAAkB,GAAGN,MAAM,CAACO;EACtD,gBAEDxB,KAAA,CAAAqB,aAAA,CAACjB,IAAI;IAACkB,KAAK,EAAEL,MAAM,CAACQ;EAAM,gBACxBzB,KAAA,CAAAqB,aAAA,CAACnB,QAAQ,CAACE,IAAI;IAACkB,KAAK,EAAEN;EAAK,CAAE,CAAC,eAC9BhB,KAAA,CAAAqB,aAAA,CAACnB,QAAQ,CAACE,IAAI;IAACkB,KAAK,EAAEH;EAAM,CAAE,CAC1B,CACF,CAAC;AAEX,CAAC;AAED,MAAMO,SAAoB,GAAG;EAC3BC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,CAAC;EACTC,YAAY,EAAE;AAChB,CAAC;AACD,MAAML,gBAA2B,GAAG;EAClCM,gBAAgB,EAAE,CAAC;EACnBH,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,EAAE;EACVG,cAAc,EAAE,QAAQ;EACxBC,UAAU,EAAE;AACd,CAAC;AACD,MAAMf,MAAM,GAAGd,UAAU,CAAC8B,MAAM,CAAC;EAC/BT,gBAAgB,EAAEA,gBAAgB;EAClCD,kBAAkB,EAAE;IAClB,GAAGC,gBAAgB;IACnBU,SAAS,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAS,CAAC;EAClC,CAAC;EACDV,KAAK,EAAE;IACLE,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVQ,aAAa,EAAE,KAAK;IACpBJ,UAAU,EAAE,QAAQ;IACpBD,cAAc,EAAE;EAClB,CAAC;EACDb,aAAa,EAAE;IACb,GAAGQ,SAAS;IACZQ,SAAS,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAS,CAAC,CAAC;IACjCnB,IAAI,EAAE,CAAC;EACT,CAAC;EACDI,cAAc,EAAE;IACd,GAAGM,SAAS;IACZQ,SAAS,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAQ,CAAC,CAAC;IAChCnB,IAAI,EAAE,CAAC;EACT;AACF,CAAC,CAAC;AAEF,eAAeV,cAAc","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import React, { useMemo } from "react";
2
2
  import { Platform, TouchableNativeFeedback, TouchableOpacity, View } from "react-native";
3
- import useColorScheme from "../hooks/useColorScheme";
3
+ import { useKeyboardState } from "../../hooks";
4
4
  const ButtonIOS = ({
5
5
  children,
6
6
  onPress,
@@ -37,7 +37,7 @@ const ButtonAndroid = ({
37
37
  style,
38
38
  theme
39
39
  }) => {
40
- const colorScheme = useColorScheme();
40
+ const colorScheme = useKeyboardState(state => state.appearance);
41
41
  const accessibilityState = useMemo(() => ({
42
42
  disabled
43
43
  }), [disabled]);
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","Platform","TouchableNativeFeedback","TouchableOpacity","View","useColorScheme","ButtonIOS","children","onPress","disabled","accessibilityLabel","accessibilityHint","testID","style","Container","accessibilityState","createElement","accessibilityRole","ButtonAndroid","rippleRadius","theme","colorScheme","ripple","Ripple","background","select","android","default"],"sources":["Button.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\r\nimport {\r\n Platform,\r\n TouchableNativeFeedback,\r\n TouchableOpacity,\r\n View,\r\n} from \"react-native\";\r\n\r\nimport useColorScheme from \"../hooks/useColorScheme\";\r\n\r\nimport type { KeyboardToolbarTheme } from \"./types\";\r\nimport type { PropsWithChildren } from \"react\";\r\nimport type { ViewStyle } from \"react-native\";\r\n\r\ntype ButtonProps = {\r\n disabled?: boolean;\r\n onPress: () => void;\r\n accessibilityLabel: string;\r\n accessibilityHint: string;\r\n testID: string;\r\n rippleRadius?: number;\r\n style?: ViewStyle;\r\n theme: KeyboardToolbarTheme;\r\n};\r\n\r\nconst ButtonIOS = ({\r\n children,\r\n onPress,\r\n disabled,\r\n accessibilityLabel,\r\n accessibilityHint,\r\n testID,\r\n style,\r\n}: PropsWithChildren<ButtonProps>) => {\r\n // immediately switch to plain view to avoid animation flickering\r\n // when fade out animation happens and view becomes disabled\r\n const Container = disabled\r\n ? (View as unknown as typeof TouchableOpacity)\r\n : TouchableOpacity;\r\n const accessibilityState = useMemo(() => ({ disabled }), [disabled]);\r\n\r\n return (\r\n <Container\r\n accessibilityState={accessibilityState}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={accessibilityLabel}\r\n accessibilityHint={accessibilityHint}\r\n onPress={onPress}\r\n style={style}\r\n testID={testID}\r\n >\r\n {children}\r\n </Container>\r\n );\r\n};\r\nconst ButtonAndroid = ({\r\n children,\r\n onPress,\r\n disabled,\r\n accessibilityLabel,\r\n accessibilityHint,\r\n testID,\r\n rippleRadius = 18,\r\n style,\r\n theme,\r\n}: PropsWithChildren<ButtonProps>) => {\r\n const colorScheme = useColorScheme();\r\n const accessibilityState = useMemo(() => ({ disabled }), [disabled]);\r\n const ripple = useMemo(\r\n () =>\r\n TouchableNativeFeedback.Ripple(\r\n theme[colorScheme].ripple,\r\n true,\r\n rippleRadius,\r\n ),\r\n [colorScheme, rippleRadius, theme],\r\n );\r\n\r\n return (\r\n <TouchableNativeFeedback\r\n accessibilityState={accessibilityState}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={accessibilityLabel}\r\n accessibilityHint={accessibilityHint}\r\n onPress={onPress}\r\n background={ripple}\r\n testID={testID}\r\n style={style}\r\n >\r\n <View style={style}>{children}</View>\r\n </TouchableNativeFeedback>\r\n );\r\n};\r\n\r\nexport default Platform.select({\r\n android: ButtonAndroid,\r\n default: ButtonIOS,\r\n});\r\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SACEC,QAAQ,EACRC,uBAAuB,EACvBC,gBAAgB,EAChBC,IAAI,QACC,cAAc;AAErB,OAAOC,cAAc,MAAM,yBAAyB;AAiBpD,MAAMC,SAAS,GAAGA,CAAC;EACjBC,QAAQ;EACRC,OAAO;EACPC,QAAQ;EACRC,kBAAkB;EAClBC,iBAAiB;EACjBC,MAAM;EACNC;AAC8B,CAAC,KAAK;EACpC;EACA;EACA,MAAMC,SAAS,GAAGL,QAAQ,GACrBL,IAAI,GACLD,gBAAgB;EACpB,MAAMY,kBAAkB,GAAGf,OAAO,CAAC,OAAO;IAAES;EAAS,CAAC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEpE,oBACEV,KAAA,CAAAiB,aAAA,CAACF,SAAS;IACRC,kBAAkB,EAAEA,kBAAmB;IACvCE,iBAAiB,EAAC,QAAQ;IAC1BP,kBAAkB,EAAEA,kBAAmB;IACvCC,iBAAiB,EAAEA,iBAAkB;IACrCH,OAAO,EAAEA,OAAQ;IACjBK,KAAK,EAAEA,KAAM;IACbD,MAAM,EAAEA;EAAO,GAEdL,QACQ,CAAC;AAEhB,CAAC;AACD,MAAMW,aAAa,GAAGA,CAAC;EACrBX,QAAQ;EACRC,OAAO;EACPC,QAAQ;EACRC,kBAAkB;EAClBC,iBAAiB;EACjBC,MAAM;EACNO,YAAY,GAAG,EAAE;EACjBN,KAAK;EACLO;AAC8B,CAAC,KAAK;EACpC,MAAMC,WAAW,GAAGhB,cAAc,CAAC,CAAC;EACpC,MAAMU,kBAAkB,GAAGf,OAAO,CAAC,OAAO;IAAES;EAAS,CAAC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EACpE,MAAMa,MAAM,GAAGtB,OAAO,CACpB,MACEE,uBAAuB,CAACqB,MAAM,CAC5BH,KAAK,CAACC,WAAW,CAAC,CAACC,MAAM,EACzB,IAAI,EACJH,YACF,CAAC,EACH,CAACE,WAAW,EAAEF,YAAY,EAAEC,KAAK,CACnC,CAAC;EAED,oBACErB,KAAA,CAAAiB,aAAA,CAACd,uBAAuB;IACtBa,kBAAkB,EAAEA,kBAAmB;IACvCE,iBAAiB,EAAC,QAAQ;IAC1BP,kBAAkB,EAAEA,kBAAmB;IACvCC,iBAAiB,EAAEA,iBAAkB;IACrCH,OAAO,EAAEA,OAAQ;IACjBgB,UAAU,EAAEF,MAAO;IACnBV,MAAM,EAAEA,MAAO;IACfC,KAAK,EAAEA;EAAM,gBAEbd,KAAA,CAAAiB,aAAA,CAACZ,IAAI;IAACS,KAAK,EAAEA;EAAM,GAAEN,QAAe,CACb,CAAC;AAE9B,CAAC;AAED,eAAeN,QAAQ,CAACwB,MAAM,CAAC;EAC7BC,OAAO,EAAER,aAAa;EACtBS,OAAO,EAAErB;AACX,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useMemo","Platform","TouchableNativeFeedback","TouchableOpacity","View","useKeyboardState","ButtonIOS","children","onPress","disabled","accessibilityLabel","accessibilityHint","testID","style","Container","accessibilityState","createElement","accessibilityRole","ButtonAndroid","rippleRadius","theme","colorScheme","state","appearance","ripple","Ripple","background","select","android","default"],"sources":["Button.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport {\n Platform,\n TouchableNativeFeedback,\n TouchableOpacity,\n View,\n} from \"react-native\";\n\nimport { useKeyboardState } from \"../../hooks\";\n\nimport type { KeyboardToolbarTheme } from \"./types\";\nimport type { PropsWithChildren } from \"react\";\nimport type { GestureResponderEvent, ViewStyle } from \"react-native\";\n\ntype ButtonProps = {\n disabled?: boolean;\n onPress: (event: GestureResponderEvent) => void;\n accessibilityLabel: string;\n accessibilityHint: string;\n testID: string;\n rippleRadius?: number;\n style?: ViewStyle;\n theme: KeyboardToolbarTheme;\n};\n\nconst ButtonIOS = ({\n children,\n onPress,\n disabled,\n accessibilityLabel,\n accessibilityHint,\n testID,\n style,\n}: PropsWithChildren<ButtonProps>) => {\n // immediately switch to plain view to avoid animation flickering\n // when fade out animation happens and view becomes disabled\n const Container = disabled\n ? (View as unknown as typeof TouchableOpacity)\n : TouchableOpacity;\n const accessibilityState = useMemo(() => ({ disabled }), [disabled]);\n\n return (\n <Container\n accessibilityState={accessibilityState}\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityHint={accessibilityHint}\n onPress={onPress}\n style={style}\n testID={testID}\n >\n {children}\n </Container>\n );\n};\nconst ButtonAndroid = ({\n children,\n onPress,\n disabled,\n accessibilityLabel,\n accessibilityHint,\n testID,\n rippleRadius = 18,\n style,\n theme,\n}: PropsWithChildren<ButtonProps>) => {\n const colorScheme = useKeyboardState((state) => state.appearance);\n const accessibilityState = useMemo(() => ({ disabled }), [disabled]);\n const ripple = useMemo(\n () =>\n TouchableNativeFeedback.Ripple(\n theme[colorScheme].ripple,\n true,\n rippleRadius,\n ),\n [colorScheme, rippleRadius, theme],\n );\n\n return (\n <TouchableNativeFeedback\n accessibilityState={accessibilityState}\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityHint={accessibilityHint}\n onPress={onPress}\n background={ripple}\n testID={testID}\n style={style}\n >\n <View style={style}>{children}</View>\n </TouchableNativeFeedback>\n );\n};\n\nexport default Platform.select({\n android: ButtonAndroid,\n default: ButtonIOS,\n});\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SACEC,QAAQ,EACRC,uBAAuB,EACvBC,gBAAgB,EAChBC,IAAI,QACC,cAAc;AAErB,SAASC,gBAAgB,QAAQ,aAAa;AAiB9C,MAAMC,SAAS,GAAGA,CAAC;EACjBC,QAAQ;EACRC,OAAO;EACPC,QAAQ;EACRC,kBAAkB;EAClBC,iBAAiB;EACjBC,MAAM;EACNC;AAC8B,CAAC,KAAK;EACpC;EACA;EACA,MAAMC,SAAS,GAAGL,QAAQ,GACrBL,IAAI,GACLD,gBAAgB;EACpB,MAAMY,kBAAkB,GAAGf,OAAO,CAAC,OAAO;IAAES;EAAS,CAAC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEpE,oBACEV,KAAA,CAAAiB,aAAA,CAACF,SAAS;IACRC,kBAAkB,EAAEA,kBAAmB;IACvCE,iBAAiB,EAAC,QAAQ;IAC1BP,kBAAkB,EAAEA,kBAAmB;IACvCC,iBAAiB,EAAEA,iBAAkB;IACrCH,OAAO,EAAEA,OAAQ;IACjBK,KAAK,EAAEA,KAAM;IACbD,MAAM,EAAEA;EAAO,GAEdL,QACQ,CAAC;AAEhB,CAAC;AACD,MAAMW,aAAa,GAAGA,CAAC;EACrBX,QAAQ;EACRC,OAAO;EACPC,QAAQ;EACRC,kBAAkB;EAClBC,iBAAiB;EACjBC,MAAM;EACNO,YAAY,GAAG,EAAE;EACjBN,KAAK;EACLO;AAC8B,CAAC,KAAK;EACpC,MAAMC,WAAW,GAAGhB,gBAAgB,CAAEiB,KAAK,IAAKA,KAAK,CAACC,UAAU,CAAC;EACjE,MAAMR,kBAAkB,GAAGf,OAAO,CAAC,OAAO;IAAES;EAAS,CAAC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EACpE,MAAMe,MAAM,GAAGxB,OAAO,CACpB,MACEE,uBAAuB,CAACuB,MAAM,CAC5BL,KAAK,CAACC,WAAW,CAAC,CAACG,MAAM,EACzB,IAAI,EACJL,YACF,CAAC,EACH,CAACE,WAAW,EAAEF,YAAY,EAAEC,KAAK,CACnC,CAAC;EAED,oBACErB,KAAA,CAAAiB,aAAA,CAACd,uBAAuB;IACtBa,kBAAkB,EAAEA,kBAAmB;IACvCE,iBAAiB,EAAC,QAAQ;IAC1BP,kBAAkB,EAAEA,kBAAmB;IACvCC,iBAAiB,EAAEA,iBAAkB;IACrCH,OAAO,EAAEA,OAAQ;IACjBkB,UAAU,EAAEF,MAAO;IACnBZ,MAAM,EAAEA,MAAO;IACfC,KAAK,EAAEA;EAAM,gBAEbd,KAAA,CAAAiB,aAAA,CAACZ,IAAI;IAACS,KAAK,EAAEA;EAAM,GAAEN,QAAe,CACb,CAAC;AAE9B,CAAC;AAED,eAAeN,QAAQ,CAAC0B,MAAM,CAAC;EAC7BC,OAAO,EAAEV,aAAa;EACtBW,OAAO,EAAEvB;AACX,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["colors","light","primary","disabled","background","ripple","dark"],"sources":["colors.ts"],"sourcesContent":["import type { KeyboardToolbarTheme } from \"./types\";\r\n\r\nexport const colors: KeyboardToolbarTheme = {\r\n light: {\r\n primary: \"#2c2c2c\",\r\n disabled: \"#B0BEC5\",\r\n background: \"#f3f3f4\",\r\n ripple: \"#bcbcbcbc\",\r\n },\r\n dark: {\r\n primary: \"#fafafa\",\r\n disabled: \"#707070\",\r\n background: \"#2C2C2E\",\r\n ripple: \"#F8F8F888\",\r\n },\r\n};\r\n"],"mappings":"AAEA,OAAO,MAAMA,MAA4B,GAAG;EAC1CC,KAAK,EAAE;IACLC,OAAO,EAAE,SAAS;IAClBC,QAAQ,EAAE,SAAS;IACnBC,UAAU,EAAE,SAAS;IACrBC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJJ,OAAO,EAAE,SAAS;IAClBC,QAAQ,EAAE,SAAS;IACnBC,UAAU,EAAE,SAAS;IACrBC,MAAM,EAAE;EACV;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["colors","light","primary","disabled","background","ripple","dark"],"sources":["colors.ts"],"sourcesContent":["import type { KeyboardToolbarTheme } from \"./types\";\n\nexport const colors: KeyboardToolbarTheme = {\n light: {\n primary: \"#2c2c2c\",\n disabled: \"#B0BEC5\",\n background: \"#f3f3f4\",\n ripple: \"#bcbcbcbc\",\n },\n dark: {\n primary: \"#fafafa\",\n disabled: \"#707070\",\n background: \"#2C2C2E\",\n ripple: \"#F8F8F888\",\n },\n};\n"],"mappings":"AAEA,OAAO,MAAMA,MAA4B,GAAG;EAC1CC,KAAK,EAAE;IACLC,OAAO,EAAE,SAAS;IAClBC,QAAQ,EAAE,SAAS;IACnBC,UAAU,EAAE,SAAS;IACrBC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJJ,OAAO,EAAE,SAAS;IAClBC,QAAQ,EAAE,SAAS;IACnBC,UAAU,EAAE,SAAS;IACrBC,MAAM,EAAE;EACV;AACF,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","PlatformColor","colors","light","primary","select","ios","default","disabled","background","ripple","dark"],"sources":["colors.native.ts"],"sourcesContent":["import { Platform, PlatformColor } from \"react-native\";\r\n\r\nimport type { KeyboardToolbarTheme } from \"./types\";\r\nimport type { ColorValue } from \"react-native\";\r\n\r\nexport const colors: KeyboardToolbarTheme = {\r\n light: {\r\n primary: Platform.select<ColorValue>({\r\n ios: PlatformColor(\"link\"),\r\n default: \"#2c2c2c\",\r\n }),\r\n disabled: Platform.select<ColorValue>({\r\n ios: PlatformColor(\"systemGray4\"),\r\n default: \"#B0BEC5\",\r\n }),\r\n background: Platform.select({\r\n ios: \"#F8F8F8\",\r\n default: \"#f3f3f4\",\r\n }),\r\n ripple: \"#bcbcbcbc\",\r\n },\r\n dark: {\r\n primary: Platform.select<ColorValue>({\r\n ios: PlatformColor(\"label\"),\r\n default: \"#fafafa\",\r\n }),\r\n disabled: Platform.select<ColorValue>({\r\n ios: PlatformColor(\"systemGray\"),\r\n default: \"#707070\",\r\n }),\r\n background: Platform.select({\r\n ios: \"#555756\",\r\n default: \"#2C2C2E\",\r\n }),\r\n ripple: \"#F8F8F888\",\r\n },\r\n};\r\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,aAAa,QAAQ,cAAc;AAKtD,OAAO,MAAMC,MAA4B,GAAG;EAC1CC,KAAK,EAAE;IACLC,OAAO,EAAEJ,QAAQ,CAACK,MAAM,CAAa;MACnCC,GAAG,EAAEL,aAAa,CAAC,MAAM,CAAC;MAC1BM,OAAO,EAAE;IACX,CAAC,CAAC;IACFC,QAAQ,EAAER,QAAQ,CAACK,MAAM,CAAa;MACpCC,GAAG,EAAEL,aAAa,CAAC,aAAa,CAAC;MACjCM,OAAO,EAAE;IACX,CAAC,CAAC;IACFE,UAAU,EAAET,QAAQ,CAACK,MAAM,CAAC;MAC1BC,GAAG,EAAE,SAAS;MACdC,OAAO,EAAE;IACX,CAAC,CAAC;IACFG,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJP,OAAO,EAAEJ,QAAQ,CAACK,MAAM,CAAa;MACnCC,GAAG,EAAEL,aAAa,CAAC,OAAO,CAAC;MAC3BM,OAAO,EAAE;IACX,CAAC,CAAC;IACFC,QAAQ,EAAER,QAAQ,CAACK,MAAM,CAAa;MACpCC,GAAG,EAAEL,aAAa,CAAC,YAAY,CAAC;MAChCM,OAAO,EAAE;IACX,CAAC,CAAC;IACFE,UAAU,EAAET,QAAQ,CAACK,MAAM,CAAC;MAC1BC,GAAG,EAAE,SAAS;MACdC,OAAO,EAAE;IACX,CAAC,CAAC;IACFG,MAAM,EAAE;EACV;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Platform","PlatformColor","colors","light","primary","select","ios","default","disabled","background","ripple","dark"],"sources":["colors.native.ts"],"sourcesContent":["import { Platform, PlatformColor } from \"react-native\";\n\nimport type { KeyboardToolbarTheme } from \"./types\";\nimport type { ColorValue } from \"react-native\";\n\nexport const colors: KeyboardToolbarTheme = {\n light: {\n primary: Platform.select<ColorValue>({\n ios: PlatformColor(\"link\"),\n default: \"#2c2c2c\",\n }),\n disabled: Platform.select<ColorValue>({\n ios: PlatformColor(\"systemGray4\"),\n default: \"#B0BEC5\",\n }),\n background: Platform.select({\n ios: \"#F8F8F8\",\n default: \"#f3f3f4\",\n }),\n ripple: \"#bcbcbcbc\",\n },\n dark: {\n primary: Platform.select<ColorValue>({\n ios: PlatformColor(\"label\"),\n default: \"#fafafa\",\n }),\n disabled: Platform.select<ColorValue>({\n ios: PlatformColor(\"systemGray\"),\n default: \"#707070\",\n }),\n background: Platform.select({\n ios: \"#555756\",\n default: \"#2C2C2E\",\n }),\n ripple: \"#F8F8F888\",\n },\n};\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,aAAa,QAAQ,cAAc;AAKtD,OAAO,MAAMC,MAA4B,GAAG;EAC1CC,KAAK,EAAE;IACLC,OAAO,EAAEJ,QAAQ,CAACK,MAAM,CAAa;MACnCC,GAAG,EAAEL,aAAa,CAAC,MAAM,CAAC;MAC1BM,OAAO,EAAE;IACX,CAAC,CAAC;IACFC,QAAQ,EAAER,QAAQ,CAACK,MAAM,CAAa;MACpCC,GAAG,EAAEL,aAAa,CAAC,aAAa,CAAC;MACjCM,OAAO,EAAE;IACX,CAAC,CAAC;IACFE,UAAU,EAAET,QAAQ,CAACK,MAAM,CAAC;MAC1BC,GAAG,EAAE,SAAS;MACdC,OAAO,EAAE;IACX,CAAC,CAAC;IACFG,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE;IACJP,OAAO,EAAEJ,QAAQ,CAACK,MAAM,CAAa;MACnCC,GAAG,EAAEL,aAAa,CAAC,OAAO,CAAC;MAC3BM,OAAO,EAAE;IACX,CAAC,CAAC;IACFC,QAAQ,EAAER,QAAQ,CAACK,MAAM,CAAa;MACpCC,GAAG,EAAEL,aAAa,CAAC,YAAY,CAAC;MAChCM,OAAO,EAAE;IACX,CAAC,CAAC;IACFE,UAAU,EAAET,QAAQ,CAACK,MAAM,CAAC;MAC1BC,GAAG,EAAE,SAAS;MACdC,OAAO,EAAE;IACX,CAAC,CAAC;IACFG,MAAM,EAAE;EACV;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ const Background = ({
3
+ children
4
+ }) => /*#__PURE__*/React.createElement(React.Fragment, null, children);
5
+ export default Background;
6
+ //# sourceMappingURL=Background.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Background","children","createElement","Fragment"],"sources":["Background.tsx"],"sourcesContent":["import React from \"react\";\n\nimport type { ReactNode } from \"react\";\n\nconst Background: React.FC<{ children: ReactNode }> = ({ children }) => (\n <>{children}</>\n);\n\nexport default Background;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAIzB,MAAMC,UAA6C,GAAGA,CAAC;EAAEC;AAAS,CAAC,kBACjEF,KAAA,CAAAG,aAAA,CAAAH,KAAA,CAAAI,QAAA,QAAGF,QAAW,CACf;AAED,eAAeD,UAAU","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { StyleSheet, View } from "react-native";
3
+ import { TEST_ID_KEYBOARD_TOOLBAR_CONTENT } from "../../constants";
4
+ const Content = ({
5
+ children
6
+ }) => {
7
+ return /*#__PURE__*/React.createElement(View, {
8
+ style: styles.flex,
9
+ testID: TEST_ID_KEYBOARD_TOOLBAR_CONTENT
10
+ }, children);
11
+ };
12
+ const styles = StyleSheet.create({
13
+ flex: {
14
+ flex: 1
15
+ }
16
+ });
17
+ export default Content;
18
+ //# sourceMappingURL=Content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","StyleSheet","View","TEST_ID_KEYBOARD_TOOLBAR_CONTENT","Content","children","createElement","style","styles","flex","testID","create"],"sources":["Content.tsx"],"sourcesContent":["import React from \"react\";\nimport { StyleSheet, View } from \"react-native\";\n\nimport { TEST_ID_KEYBOARD_TOOLBAR_CONTENT } from \"../../constants\";\n\nimport type { ReactNode } from \"react\";\nimport type { ViewProps } from \"react-native\";\n\nconst Content: React.FC<ViewProps & { children?: ReactNode }> = ({\n children,\n}) => {\n return (\n <View style={styles.flex} testID={TEST_ID_KEYBOARD_TOOLBAR_CONTENT}>\n {children}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n});\n\nexport default Content;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAE/C,SAASC,gCAAgC,QAAQ,iBAAiB;AAKlE,MAAMC,OAAuD,GAAGA,CAAC;EAC/DC;AACF,CAAC,KAAK;EACJ,oBACEL,KAAA,CAAAM,aAAA,CAACJ,IAAI;IAACK,KAAK,EAAEC,MAAM,CAACC,IAAK;IAACC,MAAM,EAAEP;EAAiC,GAChEE,QACG,CAAC;AAEX,CAAC;AAED,MAAMG,MAAM,GAAGP,UAAU,CAACU,MAAM,CAAC;EAC/BF,IAAI,EAAE;IACJA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAEF,eAAeL,OAAO","ignoreList":[]}