@react-native-ohos/react-native-keyboard-controller 1.16.8 → 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 (352) hide show
  1. package/README.OpenSource +2 -2
  2. package/README.md +105 -29
  3. package/harmony/keyboard_controller/BuildProfile.ets +1 -1
  4. package/harmony/keyboard_controller/Index.ets +1 -0
  5. package/harmony/keyboard_controller/oh-package-lock.json5 +7 -7
  6. package/harmony/keyboard_controller/oh-package.json5 +1 -1
  7. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewComponentDescriptor.h +86 -0
  8. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewComponentInstance.cpp +104 -0
  9. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewComponentInstance.h +64 -0
  10. package/harmony/keyboard_controller/src/main/cpp/ClippingScrollViewJSIBinder.h +60 -0
  11. package/harmony/keyboard_controller/src/main/cpp/KeyboardControllerViewComponentInstance.cpp +8 -1
  12. package/harmony/keyboard_controller/src/main/cpp/KeyboardGestureAreaComponentInstance.cpp +2 -2
  13. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentDescriptor.h +46 -0
  14. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentInstance.cpp +37 -0
  15. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewComponentInstance.h +32 -0
  16. package/harmony/keyboard_controller/src/main/cpp/KeyboardToolbarGroupViewJSIBinder.h +23 -0
  17. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardController.cpp +58 -1
  18. package/harmony/keyboard_controller/src/main/cpp/RNKeyboardControllerPackage.h +20 -0
  19. package/harmony/keyboard_controller/src/main/cpp/ViewHierarchyNavigator.cpp +65 -44
  20. package/harmony/keyboard_controller/src/main/cpp/ViewHierarchyNavigator.h +22 -3
  21. package/harmony/keyboard_controller/src/main/cpp/keyboardControllerPackage.cpp +17 -4
  22. package/harmony/keyboard_controller/src/main/cpp/keyboardControllerPackage.h +9 -1
  23. package/harmony/keyboard_controller/src/main/ets/{RNKeyboardControllerPackage.ts → RNKeyboardControllerPackage.ets} +9 -5
  24. package/harmony/keyboard_controller/src/main/ets/RNKeyboardControllerTurboModule.ts +29 -5
  25. package/harmony/keyboard_controller/src/main/ets/Type.ts +2 -1
  26. package/harmony/keyboard_controller.har +0 -0
  27. package/lib/commonjs/animated.js +20 -9
  28. package/lib/commonjs/animated.js.map +1 -1
  29. package/lib/commonjs/architecture.js +8 -0
  30. package/lib/commonjs/architecture.js.map +1 -0
  31. package/lib/commonjs/bindings.js +37 -2
  32. package/lib/commonjs/bindings.js.map +1 -1
  33. package/lib/commonjs/bindings.native.js +25 -2
  34. package/lib/commonjs/bindings.native.js.map +1 -1
  35. package/lib/commonjs/compat.js +50 -0
  36. package/lib/commonjs/compat.js.map +1 -0
  37. package/lib/commonjs/components/KeyboardAvoidingView/hooks.js +21 -15
  38. package/lib/commonjs/components/KeyboardAvoidingView/hooks.js.map +1 -1
  39. package/lib/commonjs/components/KeyboardAvoidingView/index.js +36 -11
  40. package/lib/commonjs/components/KeyboardAvoidingView/index.js.map +1 -1
  41. package/lib/commonjs/components/KeyboardAwareScrollView/index.js +51 -16
  42. package/lib/commonjs/components/KeyboardAwareScrollView/index.js.map +1 -1
  43. package/lib/commonjs/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js +2 -2
  44. package/lib/commonjs/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js.map +1 -1
  45. package/lib/commonjs/components/KeyboardChatScrollView/hooks.js +13 -0
  46. package/lib/commonjs/components/KeyboardChatScrollView/hooks.js.map +1 -0
  47. package/lib/commonjs/components/KeyboardChatScrollView/index.js +122 -0
  48. package/lib/commonjs/components/KeyboardChatScrollView/index.js.map +1 -0
  49. package/lib/commonjs/components/KeyboardChatScrollView/types.js +6 -0
  50. package/lib/commonjs/components/KeyboardChatScrollView/types.js.map +1 -0
  51. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/helpers.js +221 -0
  52. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/helpers.js.map +1 -0
  53. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js +149 -0
  54. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js.map +1 -0
  55. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.js +240 -0
  56. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/index.js.map +1 -0
  57. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/types.js +6 -0
  58. package/lib/commonjs/components/KeyboardChatScrollView/useChatKeyboard/types.js.map +1 -0
  59. package/lib/commonjs/components/KeyboardChatScrollView/useEndVisible.js +40 -0
  60. package/lib/commonjs/components/KeyboardChatScrollView/useEndVisible.js.map +1 -0
  61. package/lib/commonjs/components/KeyboardChatScrollView/useExtraContentPadding/index.js +92 -0
  62. package/lib/commonjs/components/KeyboardChatScrollView/useExtraContentPadding/index.js.map +1 -0
  63. package/lib/commonjs/components/KeyboardToolbar/Arrow.js +2 -3
  64. package/lib/commonjs/components/KeyboardToolbar/Arrow.js.map +1 -1
  65. package/lib/commonjs/components/KeyboardToolbar/Button.js +2 -3
  66. package/lib/commonjs/components/KeyboardToolbar/Button.js.map +1 -1
  67. package/lib/commonjs/components/KeyboardToolbar/compound/components/Background.js +13 -0
  68. package/lib/commonjs/components/KeyboardToolbar/compound/components/Background.js.map +1 -0
  69. package/lib/commonjs/components/KeyboardToolbar/compound/components/Content.js +25 -0
  70. package/lib/commonjs/components/KeyboardToolbar/compound/components/Content.js.map +1 -0
  71. package/lib/commonjs/components/KeyboardToolbar/compound/components/Done.js +58 -0
  72. package/lib/commonjs/components/KeyboardToolbar/compound/components/Done.js.map +1 -0
  73. package/lib/commonjs/components/KeyboardToolbar/compound/components/Next.js +49 -0
  74. package/lib/commonjs/components/KeyboardToolbar/compound/components/Next.js.map +1 -0
  75. package/lib/commonjs/components/KeyboardToolbar/compound/components/Prev.js +49 -0
  76. package/lib/commonjs/components/KeyboardToolbar/compound/components/Prev.js.map +1 -0
  77. package/lib/commonjs/components/KeyboardToolbar/compound/components/index.js +42 -0
  78. package/lib/commonjs/components/KeyboardToolbar/compound/components/index.js.map +1 -0
  79. package/lib/commonjs/components/KeyboardToolbar/compound/components/types.js +6 -0
  80. package/lib/commonjs/components/KeyboardToolbar/compound/components/types.js.map +1 -0
  81. package/lib/commonjs/components/KeyboardToolbar/compound/context.js +17 -0
  82. package/lib/commonjs/components/KeyboardToolbar/compound/context.js.map +1 -0
  83. package/lib/commonjs/components/KeyboardToolbar/constants.js +17 -0
  84. package/lib/commonjs/components/KeyboardToolbar/constants.js.map +1 -0
  85. package/lib/commonjs/components/KeyboardToolbar/index.js +95 -84
  86. package/lib/commonjs/components/KeyboardToolbar/index.js.map +1 -1
  87. package/lib/commonjs/components/KeyboardToolbar/types.js.map +1 -1
  88. package/lib/commonjs/components/ScrollViewWithBottomPadding/index.js +120 -0
  89. package/lib/commonjs/components/ScrollViewWithBottomPadding/index.js.map +1 -0
  90. package/lib/commonjs/components/ScrollViewWithBottomPadding/styles.js +15 -0
  91. package/lib/commonjs/components/ScrollViewWithBottomPadding/styles.js.map +1 -0
  92. package/lib/commonjs/components/hooks/useColorScheme.js +1 -1
  93. package/lib/commonjs/components/hooks/useColorScheme.js.map +1 -1
  94. package/lib/commonjs/components/hooks/useCombinedRef.js +24 -0
  95. package/lib/commonjs/components/hooks/useCombinedRef.js.map +1 -0
  96. package/lib/commonjs/components/hooks/useScrollState.js +62 -0
  97. package/lib/commonjs/components/hooks/useScrollState.js.map +1 -0
  98. package/lib/commonjs/components/index.js +7 -0
  99. package/lib/commonjs/components/index.js.map +1 -1
  100. package/lib/commonjs/constants.js +3 -1
  101. package/lib/commonjs/constants.js.map +1 -1
  102. package/lib/commonjs/context.js +1 -0
  103. package/lib/commonjs/context.js.map +1 -1
  104. package/lib/commonjs/hooks/index.js +14 -1
  105. package/lib/commonjs/hooks/index.js.map +1 -1
  106. package/lib/commonjs/hooks/useKeyboardState/index.js +39 -0
  107. package/lib/commonjs/hooks/useKeyboardState/index.js.map +1 -0
  108. package/lib/commonjs/index.js +27 -1
  109. package/lib/commonjs/index.js.map +1 -1
  110. package/lib/commonjs/internal.js +36 -0
  111. package/lib/commonjs/internal.js.map +1 -1
  112. package/lib/commonjs/module.js +21 -12
  113. package/lib/commonjs/module.js.map +1 -1
  114. package/lib/commonjs/specs/ClippingScrollViewDecoratorViewNativeComponent.js +12 -0
  115. package/lib/commonjs/specs/ClippingScrollViewDecoratorViewNativeComponent.js.map +1 -0
  116. package/lib/commonjs/specs/KeyboardControllerViewNativeComponent.js +8 -2
  117. package/lib/commonjs/specs/KeyboardControllerViewNativeComponent.js.map +1 -1
  118. package/lib/commonjs/specs/KeyboardGestureAreaNativeComponent.js +2 -1
  119. package/lib/commonjs/specs/KeyboardGestureAreaNativeComponent.js.map +1 -1
  120. package/lib/commonjs/specs/KeyboardToolbarGroupViewNativeComponent.js +12 -0
  121. package/lib/commonjs/specs/KeyboardToolbarGroupViewNativeComponent.js.map +1 -0
  122. package/lib/commonjs/specs/NativeKeyboardController.js.map +1 -1
  123. package/lib/commonjs/types.js.map +1 -1
  124. package/lib/commonjs/utils/findNodeHandle/index.js +9 -0
  125. package/lib/commonjs/utils/findNodeHandle/index.js.map +1 -0
  126. package/lib/commonjs/utils/findNodeHandle/index.native.js +13 -0
  127. package/lib/commonjs/utils/findNodeHandle/index.native.js.map +1 -0
  128. package/lib/commonjs/views/KeyboardExtender/index.js +30 -0
  129. package/lib/commonjs/views/KeyboardExtender/index.js.map +1 -0
  130. package/lib/commonjs/views/index.js +7 -0
  131. package/lib/commonjs/views/index.js.map +1 -1
  132. package/lib/module/animated.js +22 -11
  133. package/lib/module/animated.js.map +1 -1
  134. package/lib/module/architecture.js +2 -0
  135. package/lib/module/architecture.js.map +1 -0
  136. package/lib/module/bindings.js +36 -2
  137. package/lib/module/bindings.js.map +1 -1
  138. package/lib/module/bindings.native.js +24 -2
  139. package/lib/module/bindings.native.js.map +1 -1
  140. package/lib/module/compat.js +43 -0
  141. package/lib/module/compat.js.map +1 -0
  142. package/lib/module/components/KeyboardAvoidingView/hooks.js +22 -16
  143. package/lib/module/components/KeyboardAvoidingView/hooks.js.map +1 -1
  144. package/lib/module/components/KeyboardAvoidingView/index.js +35 -11
  145. package/lib/module/components/KeyboardAvoidingView/index.js.map +1 -1
  146. package/lib/module/components/KeyboardAwareScrollView/index.js +54 -19
  147. package/lib/module/components/KeyboardAwareScrollView/index.js.map +1 -1
  148. package/lib/module/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js +2 -2
  149. package/lib/module/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.js.map +1 -1
  150. package/lib/module/components/KeyboardChatScrollView/hooks.js +2 -0
  151. package/lib/module/components/KeyboardChatScrollView/hooks.js.map +1 -0
  152. package/lib/module/components/KeyboardChatScrollView/index.js +115 -0
  153. package/lib/module/components/KeyboardChatScrollView/index.js.map +1 -0
  154. package/lib/module/components/KeyboardChatScrollView/types.js +2 -0
  155. package/lib/module/components/KeyboardChatScrollView/types.js.map +1 -0
  156. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/helpers.js +207 -0
  157. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/helpers.js.map +1 -0
  158. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js +143 -0
  159. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.ios.js.map +1 -0
  160. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.js +234 -0
  161. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/index.js.map +1 -0
  162. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/types.js +2 -0
  163. package/lib/module/components/KeyboardChatScrollView/useChatKeyboard/types.js.map +1 -0
  164. package/lib/module/components/KeyboardChatScrollView/useEndVisible.js +33 -0
  165. package/lib/module/components/KeyboardChatScrollView/useEndVisible.js.map +1 -0
  166. package/lib/module/components/KeyboardChatScrollView/useExtraContentPadding/index.js +87 -0
  167. package/lib/module/components/KeyboardChatScrollView/useExtraContentPadding/index.js.map +1 -0
  168. package/lib/module/components/KeyboardToolbar/Arrow.js +2 -2
  169. package/lib/module/components/KeyboardToolbar/Arrow.js.map +1 -1
  170. package/lib/module/components/KeyboardToolbar/Button.js +2 -2
  171. package/lib/module/components/KeyboardToolbar/Button.js.map +1 -1
  172. package/lib/module/components/KeyboardToolbar/compound/components/Background.js +6 -0
  173. package/lib/module/components/KeyboardToolbar/compound/components/Background.js.map +1 -0
  174. package/lib/module/components/KeyboardToolbar/compound/components/Content.js +18 -0
  175. package/lib/module/components/KeyboardToolbar/compound/components/Content.js.map +1 -0
  176. package/lib/module/components/KeyboardToolbar/compound/components/Done.js +50 -0
  177. package/lib/module/components/KeyboardToolbar/compound/components/Done.js.map +1 -0
  178. package/lib/module/components/KeyboardToolbar/compound/components/Next.js +41 -0
  179. package/lib/module/components/KeyboardToolbar/compound/components/Next.js.map +1 -0
  180. package/lib/module/components/KeyboardToolbar/compound/components/Prev.js +41 -0
  181. package/lib/module/components/KeyboardToolbar/compound/components/Prev.js.map +1 -0
  182. package/lib/module/components/KeyboardToolbar/compound/components/index.js +6 -0
  183. package/lib/module/components/KeyboardToolbar/compound/components/index.js.map +1 -0
  184. package/lib/module/components/KeyboardToolbar/compound/components/types.js +2 -0
  185. package/lib/module/components/KeyboardToolbar/compound/components/types.js.map +1 -0
  186. package/lib/module/components/KeyboardToolbar/compound/context.js +10 -0
  187. package/lib/module/components/KeyboardToolbar/compound/context.js.map +1 -0
  188. package/lib/module/components/KeyboardToolbar/constants.js +11 -0
  189. package/lib/module/components/KeyboardToolbar/constants.js.map +1 -0
  190. package/lib/module/components/KeyboardToolbar/index.js +95 -85
  191. package/lib/module/components/KeyboardToolbar/index.js.map +1 -1
  192. package/lib/module/components/KeyboardToolbar/types.js.map +1 -1
  193. package/lib/module/components/ScrollViewWithBottomPadding/index.js +112 -0
  194. package/lib/module/components/ScrollViewWithBottomPadding/index.js.map +1 -0
  195. package/lib/module/components/ScrollViewWithBottomPadding/styles.js +9 -0
  196. package/lib/module/components/ScrollViewWithBottomPadding/styles.js.map +1 -0
  197. package/lib/module/components/hooks/useColorScheme.js +1 -1
  198. package/lib/module/components/hooks/useColorScheme.js.map +1 -1
  199. package/lib/module/components/hooks/useCombinedRef.js +18 -0
  200. package/lib/module/components/hooks/useCombinedRef.js.map +1 -0
  201. package/lib/module/components/hooks/useScrollState.js +56 -0
  202. package/lib/module/components/hooks/useScrollState.js.map +1 -0
  203. package/lib/module/components/index.js +1 -0
  204. package/lib/module/components/index.js.map +1 -1
  205. package/lib/module/constants.js +3 -0
  206. package/lib/module/constants.js.map +1 -1
  207. package/lib/module/context.js +1 -0
  208. package/lib/module/context.js.map +1 -1
  209. package/lib/module/hooks/index.js +3 -1
  210. package/lib/module/hooks/index.js.map +1 -1
  211. package/lib/module/hooks/useKeyboardState/index.js +33 -0
  212. package/lib/module/hooks/useKeyboardState/index.js.map +1 -0
  213. package/lib/module/index.js +3 -2
  214. package/lib/module/index.js.map +1 -1
  215. package/lib/module/internal.js +35 -0
  216. package/lib/module/internal.js.map +1 -1
  217. package/lib/module/module.js +21 -12
  218. package/lib/module/module.js.map +1 -1
  219. package/lib/module/specs/ClippingScrollViewDecoratorViewNativeComponent.js +6 -0
  220. package/lib/module/specs/ClippingScrollViewDecoratorViewNativeComponent.js.map +1 -0
  221. package/lib/module/specs/KeyboardControllerViewNativeComponent.js +7 -1
  222. package/lib/module/specs/KeyboardControllerViewNativeComponent.js.map +1 -1
  223. package/lib/module/specs/KeyboardGestureAreaNativeComponent.js +2 -1
  224. package/lib/module/specs/KeyboardGestureAreaNativeComponent.js.map +1 -1
  225. package/lib/module/specs/KeyboardToolbarGroupViewNativeComponent.js +5 -0
  226. package/lib/module/specs/KeyboardToolbarGroupViewNativeComponent.js.map +1 -0
  227. package/lib/module/specs/NativeKeyboardController.js.map +1 -1
  228. package/lib/module/types.js.map +1 -1
  229. package/lib/module/utils/findNodeHandle/index.js +2 -0
  230. package/lib/module/utils/findNodeHandle/index.js.map +1 -0
  231. package/lib/module/utils/findNodeHandle/index.native.js +3 -0
  232. package/lib/module/utils/findNodeHandle/index.native.js.map +1 -0
  233. package/lib/module/views/KeyboardExtender/index.js +23 -0
  234. package/lib/module/views/KeyboardExtender/index.js.map +1 -0
  235. package/lib/module/views/index.js +1 -0
  236. package/lib/module/views/index.js.map +1 -1
  237. package/lib/typescript/animated.d.ts +2 -38
  238. package/lib/typescript/architecture.d.ts +1 -0
  239. package/lib/typescript/bindings.d.ts +15 -1
  240. package/lib/typescript/bindings.native.d.ts +10 -1
  241. package/lib/typescript/compat.d.ts +12 -0
  242. package/lib/typescript/components/KeyboardAvoidingView/index.d.ts +5 -0
  243. package/lib/typescript/components/KeyboardAwareScrollView/index.d.ts +4 -1
  244. package/lib/typescript/components/KeyboardChatScrollView/hooks.d.ts +2 -0
  245. package/lib/typescript/components/KeyboardChatScrollView/index.d.ts +17 -0
  246. package/lib/typescript/components/KeyboardChatScrollView/types.d.ts +113 -0
  247. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/helpers.d.ts +132 -0
  248. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/index.d.ts +18 -0
  249. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/index.ios.d.ts +21 -0
  250. package/lib/typescript/components/KeyboardChatScrollView/useChatKeyboard/types.d.ts +37 -0
  251. package/lib/typescript/components/KeyboardChatScrollView/useEndVisible.d.ts +17 -0
  252. package/lib/typescript/components/KeyboardChatScrollView/useExtraContentPadding/index.d.ts +45 -0
  253. package/lib/typescript/components/KeyboardToolbar/Button.d.ts +2 -2
  254. package/lib/typescript/components/KeyboardToolbar/compound/components/Background.d.ts +6 -0
  255. package/lib/typescript/components/KeyboardToolbar/compound/components/Content.d.ts +7 -0
  256. package/lib/typescript/components/KeyboardToolbar/compound/components/Done.d.ts +7 -0
  257. package/lib/typescript/components/KeyboardToolbar/compound/components/Next.d.ts +4 -0
  258. package/lib/typescript/components/KeyboardToolbar/compound/components/Prev.d.ts +4 -0
  259. package/lib/typescript/components/KeyboardToolbar/compound/components/index.d.ts +5 -0
  260. package/lib/typescript/components/KeyboardToolbar/compound/components/types.d.ts +14 -0
  261. package/lib/typescript/components/KeyboardToolbar/compound/context.d.ts +9 -0
  262. package/lib/typescript/components/KeyboardToolbar/constants.d.ts +10 -0
  263. package/lib/typescript/components/KeyboardToolbar/index.d.ts +12 -45
  264. package/lib/typescript/components/KeyboardToolbar/types.d.ts +24 -1
  265. package/lib/typescript/components/ScrollViewWithBottomPadding/index.d.ts +30 -0
  266. package/lib/typescript/components/ScrollViewWithBottomPadding/styles.d.ts +7 -0
  267. package/lib/typescript/components/hooks/useCombinedRef.d.ts +3 -0
  268. package/lib/typescript/components/hooks/useScrollState.d.ts +17 -0
  269. package/lib/typescript/components/index.d.ts +3 -0
  270. package/lib/typescript/constants.d.ts +1 -0
  271. package/lib/typescript/context.d.ts +1 -0
  272. package/lib/typescript/hooks/index.d.ts +2 -0
  273. package/lib/typescript/hooks/useKeyboardState/index.d.ts +4 -0
  274. package/lib/typescript/index.d.ts +4 -3
  275. package/lib/typescript/internal.d.ts +4 -0
  276. package/lib/typescript/specs/ClippingScrollViewDecoratorViewNativeComponent.d.ts +10 -0
  277. package/lib/typescript/specs/KeyboardControllerViewNativeComponent.d.ts +4 -0
  278. package/lib/typescript/specs/KeyboardToolbarGroupViewNativeComponent.d.ts +6 -0
  279. package/lib/typescript/specs/NativeKeyboardController.d.ts +6 -2
  280. package/lib/typescript/types.d.ts +80 -5
  281. package/lib/typescript/utils/findNodeHandle/index.d.ts +4 -0
  282. package/lib/typescript/utils/findNodeHandle/index.native.d.ts +2 -0
  283. package/lib/typescript/views/KeyboardExtender/index.d.ts +5 -0
  284. package/lib/typescript/views/index.d.ts +1 -0
  285. package/package.json +15 -9
  286. package/src/animated.tsx +41 -48
  287. package/src/architecture.ts +1 -0
  288. package/src/bindings.native.ts +37 -2
  289. package/src/bindings.ts +40 -1
  290. package/src/compat.ts +44 -0
  291. package/src/components/KeyboardAvoidingView/hooks.ts +24 -17
  292. package/src/components/KeyboardAvoidingView/index.tsx +62 -18
  293. package/src/components/KeyboardAwareScrollView/index.tsx +75 -20
  294. package/src/components/KeyboardAwareScrollView/useSmoothKeyboardHandler.ts +2 -2
  295. package/src/components/KeyboardChatScrollView/hooks.ts +2 -0
  296. package/src/components/KeyboardChatScrollView/index.tsx +164 -0
  297. package/src/components/KeyboardChatScrollView/types.ts +117 -0
  298. package/src/components/KeyboardChatScrollView/useChatKeyboard/helpers.ts +268 -0
  299. package/src/components/KeyboardChatScrollView/useChatKeyboard/index.ios.ts +260 -0
  300. package/src/components/KeyboardChatScrollView/useChatKeyboard/index.ts +374 -0
  301. package/src/components/KeyboardChatScrollView/useChatKeyboard/types.ts +39 -0
  302. package/src/components/KeyboardChatScrollView/useEndVisible.ts +66 -0
  303. package/src/components/KeyboardChatScrollView/useExtraContentPadding/index.ts +149 -0
  304. package/src/components/KeyboardToolbar/Arrow.tsx +2 -2
  305. package/src/components/KeyboardToolbar/Button.tsx +4 -4
  306. package/src/components/KeyboardToolbar/compound/components/Background.tsx +9 -0
  307. package/src/components/KeyboardToolbar/compound/components/Content.tsx +25 -0
  308. package/src/components/KeyboardToolbar/compound/components/Done.tsx +57 -0
  309. package/src/components/KeyboardToolbar/compound/components/Next.tsx +49 -0
  310. package/src/components/KeyboardToolbar/compound/components/Prev.tsx +49 -0
  311. package/src/components/KeyboardToolbar/compound/components/index.ts +5 -0
  312. package/src/components/KeyboardToolbar/compound/components/types.ts +15 -0
  313. package/src/components/KeyboardToolbar/compound/context.ts +25 -0
  314. package/src/components/KeyboardToolbar/constants.ts +14 -0
  315. package/src/components/KeyboardToolbar/index.tsx +143 -146
  316. package/src/components/KeyboardToolbar/types.ts +33 -1
  317. package/src/components/ScrollViewWithBottomPadding/index.tsx +216 -0
  318. package/src/components/ScrollViewWithBottomPadding/styles.ts +10 -0
  319. package/src/components/hooks/useColorScheme.ts +2 -1
  320. package/src/components/hooks/useCombinedRef.ts +22 -0
  321. package/src/components/hooks/useScrollState.ts +81 -0
  322. package/src/components/index.ts +3 -0
  323. package/src/constants.ts +4 -0
  324. package/src/context.ts +2 -0
  325. package/src/hooks/index.ts +2 -1
  326. package/src/hooks/useKeyboardState/index.ts +52 -0
  327. package/src/index.ts +5 -1
  328. package/src/internal.ts +62 -0
  329. package/src/module.ts +21 -9
  330. package/src/specs/ClippingScrollViewDecoratorViewNativeComponent.ts +19 -0
  331. package/src/specs/KeyboardControllerViewNativeComponent.ts +14 -3
  332. package/src/specs/KeyboardGestureAreaNativeComponent.ts +1 -0
  333. package/src/specs/KeyboardToolbarGroupViewNativeComponent.ts +10 -0
  334. package/src/specs/NativeKeyboardController.ts +6 -2
  335. package/src/types.ts +91 -5
  336. package/src/utils/findNodeHandle/index.native.ts +3 -0
  337. package/src/utils/findNodeHandle/index.ts +6 -0
  338. package/src/views/KeyboardExtender/index.tsx +30 -0
  339. package/src/views/index.ts +1 -0
  340. package/lib/commonjs/monkey-patch.android.js +0 -57
  341. package/lib/commonjs/monkey-patch.android.js.map +0 -1
  342. package/lib/commonjs/monkey-patch.js +0 -11
  343. package/lib/commonjs/monkey-patch.js.map +0 -1
  344. package/lib/module/monkey-patch.android.js +0 -47
  345. package/lib/module/monkey-patch.android.js.map +0 -1
  346. package/lib/module/monkey-patch.js +0 -5
  347. package/lib/module/monkey-patch.js.map +0 -1
  348. package/lib/typescript/monkey-patch.android.d.ts +0 -2
  349. package/lib/typescript/monkey-patch.d.ts +0 -2
  350. package/src/monkey-patch.android.ts +0 -44
  351. package/src/monkey-patch.ts +0 -4
  352. /package/harmony/keyboard_controller/{ts.ts → ts.ets} +0 -0
package/README.OpenSource CHANGED
@@ -3,9 +3,9 @@
3
3
  "Name": "react-native-keyboard-controller",
4
4
  "License": "MIT License",
5
5
  "License File": "https://github.com/kirillzyusko/react-native-keyboard-controller/blob/main/LICENSE",
6
- "Version Number": "1.16.5",
6
+ "Version Number": "1.21.8",
7
7
  "Owner" : "xiafeng@huawei.com",
8
8
  "Upstream URL": "https://github.com/kirillzyusko/react-native-keyboard-controller",
9
9
  "Description": "Keyboard manager which works in identical way on iOS and Android and harmony"
10
10
  }
11
- ]
11
+ ]
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  | 三方库名称 | 三方库版本(npm地址) | 发布信息 | 支持RN版本 | Autolink | 编译API版本 | 社区基线版本 | 源码地址 |
12
12
  | ---------- | --------------------- | -------- | ---------- | -------- | ----------- | ------------ | -------- |
13
- | @react-native-ohos/react-native-keyboard-controller | [~ 1.16.7](https://www.npmjs.com/package/@react-native-ohos/react-native-keyboard-controller) | [Gitcode Releases](https://gitcode.com/CPF-RN/rntpc_react-native-keyboard-controller/releases) | 0.77.* | | API12+ | 1.16.5 | [br_rnoh0.77](https://gitcode.com/CPF-RN/rntpc_react-native-keyboard-controller/tree/br_rnoh0.77) |
13
+ | @react-native-ohos/react-native-keyboard-controller | [~ 1.17.0(开发中)](https://www.npmjs.com/package/@react-native-ohos/react-native-keyboard-controller) | [GitCode Releases](https://gitcode.com/CPF-RN/rntpc_react-native-keyboard-controller/releases) | 0.82.* | | API12+ | 1.21.8 | [br_rnoh0.82](https://gitcode.com/CPF-RN/rntpc_react-native-keyboard-controller/tree/br_rnoh0.82) |
14
14
 
15
15
  ## 简介
16
16
 
@@ -43,8 +43,10 @@ yarn add @react-native-ohos/react-native-keyboard-controller
43
43
 
44
44
  | | 是否支持autolink | RN框架版本 |
45
45
  |-------------------------------|------------------|-----------|
46
- | ~ 1.16.7 | No | 0.77 |
46
+ | ~ 1.17.0 | Yes | 0.82 |
47
47
 
48
+ <details>
49
+ <summary>ManualLink: 此步骤为手动配置原生依赖项的指导</summary>
48
50
 
49
51
  首先需要使用 DevEco Studio 打开项目里的 HarmonyOS 工程 `harmony`。
50
52
 
@@ -57,7 +59,7 @@ yarn add @react-native-ohos/react-native-keyboard-controller
57
59
  ```json
58
60
  {
59
61
  "overrides": {
60
- "@rnoh/react-native-openharmony": "^0.77.38" // ohpm 在线版本
62
+ "@rnoh/react-native-openharmony": "^0.82.1" // ohpm 在线版本
61
63
  // "@rnoh/react-native-openharmony" : "./react_native_openharmony.har" // 指向本地 har 包的路径
62
64
  // "@rnoh/react-native-openharmony" : "./react_native_openharmony" // 指向源码路径
63
65
  }
@@ -175,8 +177,7 @@ export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
175
177
  ];
176
178
  }
177
179
  ```
178
-
179
-
180
+ </details>
180
181
 
181
182
  ### 运行
182
183
 
@@ -199,15 +200,15 @@ ohpm install
199
200
 
200
201
  在以下版本验证通过:
201
202
 
202
- 1. RNOH: 0.77.61; SDK: HarmonyOS 6.0.0 Release SDK; IDE: DevEco Studio 6.0.0.858; ROM: 6.0.0.112;
203
+ 1. RNOH: 0.82.20; SDK: HarmonyOS 6.0.1 Release SDK; IDE: DevEco Studio 6.0.1 Release; ROM: 6.0.0.120 SP7;
203
204
 
204
205
  ### 编译运行API要求
205
206
 
206
207
  > [!TIP] 当前分支版本支持在 `API12+` 工程编译,及 `API12+` ROM运行。
207
208
 
208
209
  > [!TIP] 以下功能依赖特定版本的API,使用 `低于指定API版本的工程编译` 或 `低于指定API版本的ROM运行` 均可能导致部分功能受限。
209
- 1. 版本 >=1.16.7 for 0.77引入[OH_ArkUI_FocusRequest](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-interface-focus-h#oh_arkui_focusrequest),实现了 `onNextCallback?: () => void` 和 `onPrevCallback?: () => void` 功能,此API需要在支持`API15+`的工程编译,并在支持`API15+`的ROM上运行,方可生效。
210
- 2. 版本 >=1.16.8 for 0.77引入了[on('keyboardWillShow')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#onkeyboardwillshow20)和[on('keyboardWillHide')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#onkeyboardwillhide20),实现了`KeyboardEvents`中的`keyboardWillShow`键盘将要显示事件和`keyboardWillHide`键盘将要隐藏事件功能,这些API需要在支持`API20+`的工程编译,并在支持`API20+`的ROM上运行,方可生效。
210
+ 1. 版本 >=1.17.0 for 0.82引入[OH_ArkUI_FocusRequest](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-native-interface-focus-h#oh_arkui_focusrequest),实现了 `onNextCallback?: (event: GestureResponderEvent) => void` 和 `onPrevCallback?: (event: GestureResponderEvent) => void` 功能,此API需要在支持`API15+`的工程编译,并在支持`API15+`的ROM上运行,方可生效。
211
+ 2. 版本 >=1.17.0 for 0.82引入了[on('keyboardWillShow')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#onkeyboardwillshow20)和[on('keyboardWillHide')](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-window-window#onkeyboardwillhide20),实现了`KeyboardEvents`中的`keyboardWillShow`键盘将要显示事件和`keyboardWillHide`键盘将要隐藏事件功能,这些API需要在支持`API20+`的工程编译,并在支持`API20+`的ROM上运行,方可生效。
211
212
 
212
213
  ## 使用示例
213
214
 
@@ -299,11 +300,13 @@ export default App;
299
300
  | useKeyboardHandler | 设置键盘回调事件的钩子函数 | `(handler: KeyboardHandler, deps?: DependencyList) => void` | no | iOS,Android | yes |
300
301
  | useKeyboardController | 设置是否启动键盘监听事件的钩子函数 | `() => { setEnabled: React.Dispatch<React.SetStateAction<boolean>>; enabled: boolean }` | no | iOS,Android | yes |
301
302
  | useFocusedInputHandler | 设置监听输入框回调事件的钩子函数(HarmonyOS暂支持文本变化的监听) | `(handler?: FocusedInputHandler, deps?: DependencyList) => void` | no | iOS,Android | partially |
302
- | useReanimatedFocusedInput | 当前聚焦的输入控件文本变化事件回调的钩子函数 | `() => { input: SharedValue<FocusedInputLayoutChangedEvent \| null> }` | no | iOS,Android |no |
303
+ | useReanimatedFocusedInput | 当前聚焦的输入控件文本变化事件回调的钩子函数,update()用于主动同步当前聚焦输入框布局 | `() => { input: SharedValue<FocusedInputLayoutChangedEvent \| null>; update: () => Promise<void> }` | no | iOS,Android |yes |
304
+ | useKeyboardState(selector?) | 响应式读取完整键盘状态;传入selector时仅订阅并返回所需字段 | `<T>(selector?: (state: IKeyboardState) => T) => T` | no | iOS,Android | yes |
305
+ | useAnimatedKeyboard() | 返回键盘高度和状态对应的SharedValue | `() => { height: SharedValue<number>; state: SharedValue<number> }` | no | iOS,Android | yes |
303
306
  | useResizeMode | 组件挂载时将 Android 输入模式设置为 `adjustResize`,卸载时恢复默认模式 | `() => void` | no | Android | no |
304
307
  | useGenericKeyboardHandler | 注册键盘生命周期回调,不修改 Android 输入模式;HarmonyOS 原生仅支持 `onEnd`,`onStart`、`onMove` 不是原生事件,`onInteractive` 不支持 | `(handler: KeyboardHandler, deps?: DependencyList) => void` | no | iOS,Android | partially |
305
- | useWindowDimensions | 读取并监听窗口宽高变化,使用 React Native 通用实现 | `() => ScaledSize` | no | iOS,Android | yes |
306
- | useKeyboardContext | 读取键盘动画上下文,用于构建自定义 Hook;必须在 `KeyboardProvider` 内调用 | `() => KeyboardAnimationContext` | no | iOS,Android | yes |
308
+ | useWindowDimensions | 使用 React Native 通用实现读取并监听窗口宽高变化 | `() => ScaledSize` | no | iOS,Android | yes |
309
+ | useKeyboardContext | 读取 `KeyboardProvider` 提供的键盘上下文,用于构建自定义 Hook;建议业务优先使用上层 Hooks | `() => KeyboardAnimationContext` | no | iOS,Android | yes |
307
310
 
308
311
  **KeyboardController**:键盘控制器
309
312
 
@@ -311,32 +314,49 @@ export default App;
311
314
  | ---- | ----------- | ---- | -------- | -------- | ------------------ |
312
315
  | setInputMode(mode: number): void | 设置键盘显示默认模式 | function | no | Android | no |
313
316
  | setDefaultMode(): void | 设置键盘显示默认模式 | function | no | Android | no |
314
- | dismiss(options?: DismissOptions): Promise<void> | 设置键盘隐藏。`DismissOptions` `{ keepFocus: boolean }`,用于指定隐藏键盘时是否保持输入框焦点。HarmonyOS 可以隐藏键盘;由于 HarmonyOS 缺少保持聚焦输入框的相关能力,`keepFocus` 参数暂不支持。 | `Promise<void>` | no | iOS,Android | partially |
315
- | setFocusTo(direction: "next" \| "prev" \| "current"): void | 设置聚焦的方式 | function | no | iOS,Android | no |
317
+ | dismiss(options?: Partial&lt;DismissOptions&gt;): Promise&lt;void&gt; | 设置键盘隐藏。`DismissOptions` 包含 `keepFocus` `animated`。HarmonyOS 可以隐藏键盘;由于 HarmonyOS 缺少保持聚焦输入框的相关能力,`keepFocus` 参数暂不支持;同时不支持无动画关闭键盘。 | `Promise<void>` | no | iOS,Android | partially |
318
+ | setFocusTo(direction: "next" \| "prev" \| "current"): void | 将焦点移动到下一个、上一个或当前输入框;HarmonyOS 支持 `next`/`prev`,`current` 尚不支持 | function | no | iOS,Android | no |
316
319
  | addListener: (eventName: string) => void | 添加键盘的监听事件 | function | no | iOS,Android | yes |
317
320
  | removeListeners: (count: number) => void | 删除键盘的监听事件 | function | no | iOS,Android | yes |
318
321
  | isVisible(): boolean | 返回键盘是否可见 | function | no | iOS,Android | yes |
319
- | state(): KeyboardEventData \| null | 返回键盘最后的状态,如果键盘还没有显示过返回 `null` | function | no | iOS,Android | yes |
322
+ | state(): KeyboardEventData | 返回键盘最后的状态 | function | no | iOS,Android | yes |
323
+ | preload(): void | 预加载键盘以减少首次聚焦时的延迟 | function | no | iOS | no |
320
324
 
321
- **AndroidSoftInputModes**:Android `windowSoftInputMode` 的公共枚举,用于向 `setInputMode` 传入输入法窗口调整模式。该枚举对应 Android `WindowManager.LayoutParams`,HarmonyOS 不适用。
325
+ **AndroidSoftInputModes**:Android `windowSoftInputMode` 的公共枚举,用于向 `setInputMode` 传入输入法窗口调整模式。HarmonyOS 不适用。
322
326
 
323
327
  | Name | Value | Description | Platform | HarmonyOS Support |
324
328
  | ---- | ----- | ----------- | -------- | ----------------- |
325
329
  | `SOFT_INPUT_ADJUST_NOTHING` | 48 | 键盘显示时不调整窗口 | Android | no |
326
- | `SOFT_INPUT_ADJUST_PAN` | 32 | 键盘显示时平移窗口,避免焦点输入框被遮挡 | Android | no |
330
+ | `SOFT_INPUT_ADJUST_PAN` | 32 | 键盘显示时平移窗口 | Android | no |
327
331
  | `SOFT_INPUT_ADJUST_RESIZE` | 16 | 键盘显示时调整窗口可用区域大小 | Android | no |
328
332
  | `SOFT_INPUT_ADJUST_UNSPECIFIED` | 0 | 由系统自动选择窗口调整方式 | Android | no |
329
333
  | `SOFT_INPUT_IS_FORWARD_NAVIGATION` | 256 | 表示窗口由向前导航进入 | Android | no |
330
- | `SOFT_INPUT_MASK_ADJUST` | 240 | 获取窗口调整方式的位掩码 | Android | no |
331
- | `SOFT_INPUT_MASK_STATE` | 15 | 获取键盘初始显示状态的位掩码 | Android | no |
332
- | `SOFT_INPUT_MODE_CHANGED` | 512 | 表示输入模式已经发生变化 | Android | no |
334
+ | `SOFT_INPUT_MASK_ADJUST` | 240 | 窗口调整方式的位掩码 | Android | no |
335
+ | `SOFT_INPUT_MASK_STATE` | 15 | 键盘初始状态的位掩码 | Android | no |
336
+ | `SOFT_INPUT_MODE_CHANGED` | 512 | 表示输入模式已经变化 | Android | no |
333
337
  | `SOFT_INPUT_STATE_ALWAYS_HIDDEN` | 3 | 窗口获得焦点时始终隐藏键盘 | Android | no |
334
338
  | `SOFT_INPUT_STATE_ALWAYS_VISIBLE` | 5 | 窗口获得焦点时始终显示键盘 | Android | no |
335
339
  | `SOFT_INPUT_STATE_HIDDEN` | 2 | 窗口获得焦点时隐藏键盘 | Android | no |
336
340
  | `SOFT_INPUT_STATE_UNCHANGED` | 1 | 保持键盘当前显示状态 | Android | no |
337
- | `SOFT_INPUT_STATE_UNSPECIFIED` | 0 | 未指定键盘初始显示状态,由系统决定 | Android | no |
341
+ | `SOFT_INPUT_STATE_UNSPECIFIED` | 0 | 由系统决定键盘初始显示状态 | Android | no |
338
342
  | `SOFT_INPUT_STATE_VISIBLE` | 4 | 窗口获得焦点时显示键盘 | Android | no |
339
343
 
344
+ **KeyboardState**:`useAnimatedKeyboard()` 使用的键盘状态常量。
345
+
346
+ | Name | Value | Description | HarmonyOS Support |
347
+ | ---- | ----- | ----------- | ----------------- |
348
+ | `UNKNOWN` | 0 | 键盘状态未知 | yes |
349
+ | `OPENING` | 1 | 键盘正在打开 | yes |
350
+ | `OPEN` | 2 | 键盘已经打开 | yes |
351
+ | `CLOSING` | 3 | 键盘正在关闭 | yes |
352
+ | `CLOSED` | 4 | 键盘已经关闭 | yes |
353
+
354
+ **公共常量**
355
+
356
+ | Name | Description | Type | Platform | HarmonyOS Support |
357
+ | ---- | ----------- | ---- | -------- | ----------------- |
358
+ | `KEYBOARD_BORDER_RADIUS` | 键盘圆角半径;Android、iOS 26 以下及 iOS 26+ 兼容模式返回 `0`,iOS 26+ 新式键盘返回 `30`;HarmonyOS 与 Android 一致返回 `0` | number | iOS,Android | yes |
359
+
340
360
  **StatusBarManagerCompat**:状态栏控制器
341
361
 
342
362
  | Name | Description | Type | Required | Platform | HarmonyOS Support |
@@ -374,13 +394,14 @@ export default App;
374
394
 
375
395
  **KeyboardProvider**:为子组件提供键盘监听、动画状态及运行时控制上下文。其 `KeyboardProviderProps` 类型包含以下属性。
376
396
 
377
- | Name | Description | Type | Required | Platform | HarmonyOS Support |
378
- | ---- | ----------- | ---- | -------- | -------- | ------------------ |
397
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
398
+ | ---- | ----------- | ---- | -------- | -------- | ----------------- |
379
399
  | `children` | Provider 包裹的子组件 | `React.ReactNode` | yes | iOS,Android | yes |
380
- | `enabled` | 是否在初始化时开启键盘监听,运行时切换请使用 `useKeyboardController().setEnabled()`,默认值为 `true` | boolean | no | iOS,Android | yes |
400
+ | `enabled` | 是否在初始化时开启键盘监听,默认值为 `true` | boolean | no | iOS,Android | yes |
381
401
  | `statusBarTranslucent` | 是否使用透明状态栏,默认值为 `false` | boolean | no | Android | no |
382
402
  | `navigationBarTranslucent` | 是否使用透明导航栏,默认值为 `false` | boolean | no | Android | no |
383
403
  | `preserveEdgeToEdge` | 是否始终保持 edge-to-edge 模式,默认值为 `false` | boolean | no | Android | yes |
404
+ | `preload` | 是否预加载键盘以减少首次聚焦延迟,默认值为 `true`; | boolean | no | iOS | no |
384
405
 
385
406
  **KeyboardControllerView**:键盘控制器
386
407
 
@@ -406,7 +427,7 @@ export default App;
406
427
  | ---- | ----------- | ---- | -------- | -------- | ------------------ |
407
428
  | showOnSwipeUp | 键盘随手势向上滑动显示 | boolean | no | Android | no |
408
429
  | enableSwipeToDismiss | 键盘随手势向下滑动隐藏 | boolean | no | Android | no |
409
- | interpolator | 设置键盘随手势滑动的动画模式 | ios / linear | no | Android | no |
430
+ | interpolator | 设置键盘随手势滑动的动画模式 | `"ios" \| "linear"` | no | Android | no |
410
431
  | offset | 到键盘的额外距离 | number | no | iOS、Android | no |
411
432
  | textInputNativeID | TextInput对应的nativeID | string | no | iOS | no |
412
433
 
@@ -418,6 +439,7 @@ export default App;
418
439
  | contentContainerStyle | 当`behavior`为position时,内容容器的样式 | [ ViewStyle ](https://reactnative.dev/docs/view#props) | no | iOS,Android | yes |
419
440
  | enabled | 控制这个`KeyboardAvoidingView`实例是否应该生效,默认为true | boolean | no | iOS,Android | yes |
420
441
  | keyboardVerticalOffset | 键盘与React Native视图之间的距离,默认为`0` | number | no | iOS,Android | yes |
442
+ | automaticOffset | 是否自动测量组件在窗口中的坐标并参与键盘避让,默认为`false` | boolean | no | iOS,Android | yes |
421
443
  | onLayout | 在安装和布局更改时的回调函数(event: LayoutChangeEvent) => void | function/undefined | no | iOS,Android | yes |
422
444
  | style | `KeyboardAvoidingView`的CSS属性 | [ ViewStyle ](https://reactnative.dev/docs/view#props) | no | iOS,Android | yes |
423
445
  | children | JSX element 子组件 | JSX.Element | no | iOS,Android | yes |
@@ -430,10 +452,27 @@ export default App;
430
452
  | enabled | 控制此`KeyboardAwareScrollView`实例是否应生效。默认值为`true` | boolean | no | iOS,Android | yes |
431
453
  | disableScrollOnKeyboardHide |防止键盘隐藏时`ScrollView`自动滚动,保持当前屏幕位置。默认值为`false`。 | boolean | no | iOS,Android | no |
432
454
  | extraKeyboardSpace | KeyboardAwareScrollView的底部间距,默认为0 | number | no | iOS,Android | no |
455
+ | mode | 选择使用`insets`或`layout`方式创建键盘空间,默认为`insets` | "insets" / "layout" | no | iOS,Android | no |
456
+ | assureFocusedInputVisible() | 主动重新执行当前聚焦输入框的避让 | function | no | iOS,Android | no |
433
457
  | onLayout | 在安装和布局更改时的回调函数(event: LayoutChangeEvent) => void | function/undefined | no | iOS,Android | yes |
434
458
  | style | `KeyboardAwareScrollView`的CSS属性 | [ ViewStyle ](https://reactnative.dev/docs/view#props) | no | iOS,Android | yes |
435
459
  | children | JSX element 子组件 | JSX.Element | no | iOS,Android | yes |
436
- | ScrollViewComponent | ScrollView的自定义组件 | React.ComponentType<ScrollViewProps> | no | iOS,Android | yes |
460
+ | ScrollViewComponent | ScrollView的自定义组件 | React.ComponentType<ScrollViewProps> | no | iOS,Android | yes |
461
+
462
+ **KeyboardChatScrollView**:面向聊天场景的键盘感知滚动容器组件,用于在键盘显示或隐藏时联动调整消息列表的底部空间和滚动位置
463
+
464
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
465
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
466
+ | ScrollViewComponent | 注入自定义动画`ScrollView`实现,默认使用`Reanimated.ScrollView` | AnimatedScrollViewComponent | no | iOS,Android | yes |
467
+ | inverted | 是否使用反转列表方向,默认为`false` | boolean | no | iOS,Android | yes |
468
+ | offset | `ScrollView`底部与屏幕底部之间的距离;键盘弹起时按键盘高度减去该距离计算有效抬升量,默认为`0` | number | no | iOS,Android | yes |
469
+ | keyboardLiftBehavior | 设置键盘弹起时消息列表的抬升策略,默认为`always`。 | "always" / "whenAtEnd" / "persistent" / "never" | no | iOS,Android | yes |
470
+ | freeze | 冻结键盘驱动的padding、offset和滚动更新,默认为`false` | boolean / SharedValue&lt;boolean&gt; | no | iOS,Android | yes |
471
+ | extraContentPadding | 外部元素产生的动态额外内容边距 | SharedValue&lt;number&gt; | no | iOS,Android | no |
472
+ | blankSpace | 设置内容的最小inset空间,键盘空间和额外边距不会使总边距低于该值 | SharedValue&lt;number&gt; | no | iOS,Android | no |
473
+ | applyWorkaroundForContentInsetHitTestBug | iOS `contentInset`触摸问题的兼容开关,默认为`false` | boolean | no | iOS | no |
474
+ | onContentInsetChange | 内容inset发生变化时的回调函数(insets) => void | function | no | iOS,Android | no |
475
+ | onEndVisible | 内容末端进入或离开可见区域时的回调函数(visible: boolean) => void | function | no | iOS,Android | no |
437
476
 
438
477
  **KeyboardStickyView**:随键盘移动的粘性视图组件
439
478
 
@@ -459,9 +498,43 @@ export default App;
459
498
  | showArrows | 是否显示下一个和上一个按钮 | boolean | no | iOS,Android | yes |
460
499
  | blur | 工具栏聚焦时标题组件 | JSX.Element | no | iOS,Android | yes |
461
500
  | opacity | 十六进制格式的容器不透明度值(例如`ff`)。默认值为`ff` | HEX | no | iOS,Android | yes |
462
- | onNextCallback?: () => void | 当用户按下“下一步”按钮时调用的回调以及默认操作;HarmonyOS 为无参回调,不支持 `event.preventDefault()`。 | function | no | iOS,Android | yes |
463
- | onPrevCallback?: () => void | 用户按下“上一步”按钮时调用的回调以及默认操作;HarmonyOS 为无参回调,不支持 `event.preventDefault()`。 | function | no | iOS,Android | yes |
464
- | onDoneCallback?: () => void | 当用户按下“完成”按钮时调用的回调以及默认操作;HarmonyOS 为无参回调,不支持 `event.preventDefault()`。 | function | no | iOS,Android | yes |
501
+ | onNextCallback?: (event: GestureResponderEvent) => void | 当用户按下“下一步”按钮时调用的回调以及默认操作。 | `(event: GestureResponderEvent) => void` | no | iOS,Android | yes |
502
+ | onPrevCallback?: (event: GestureResponderEvent) => void | 用户按下“上一步”按钮时调用的回调以及默认操作。 | `(event: GestureResponderEvent) => void` | no | iOS,Android | yes |
503
+ | onDoneCallback?: (event: GestureResponderEvent) => void | 当用户按下“完成”按钮时调用的回调以及默认操作。 | `(event: GestureResponderEvent) => void` | no | iOS,Android | yes |
504
+ | insets | 工具栏左右两侧的安全区域边距 | {left: number;right: number;} | no | iOS,Android | yes |
505
+ | children | 组合式Toolbar的JSX子组件入口 | React.ReactNode | no | iOS,Android | yes |
506
+
507
+ **KeyboardToolbar Compound**:`KeyboardToolbar`的组合式API,通过静态子组件分别定义背景、中间内容和操作按钮。
508
+
509
+ `KeyboardToolbar.Background`、`KeyboardToolbar.Content`、`KeyboardToolbar.Prev`、`KeyboardToolbar.Next`和`KeyboardToolbar.Done`需要作为`KeyboardToolbar`的直接子组件。
510
+
511
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
512
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
513
+ | KeyboardToolbar.Background | 设置工具栏背景内容,`children`为必选 | React.FC&lt;{children: React.ReactNode;}&gt; | no | iOS,Android | yes |
514
+ | KeyboardToolbar.Content | 设置工具栏中间的内容区域 | React.FC&lt;ViewProps &amp; {children?: React.ReactNode;}&gt; | no | iOS,Android | yes |
515
+ | KeyboardToolbar.Prev | 上一个输入框按钮; | React.FC&lt;ButtonSubProps&gt; | no | iOS,Android | yes |
516
+ | KeyboardToolbar.Next | 下一个输入框按钮; | React.FC&lt;ButtonSubProps&gt; | no | iOS,Android | yes |
517
+ | KeyboardToolbar.Done | 隐藏键盘按钮; | React.FC&lt;Omit&lt;ButtonSubProps, "icon"&gt; &amp; {text?: React.ReactNode;}&gt; | no | iOS,Android | yes |
518
+
519
+ **KeyboardToolbar.Group**:输入框分组组件。该组件作为`KeyboardToolbar`的静态成员导出,但不属于Compound内容组件;应包裹需要分组的输入框,限定Prev/Next按钮仅在当前分组内遍历。
520
+
521
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
522
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
523
+ | KeyboardToolbar.Group | 包裹一组需要限制焦点遍历范围的输入框 | React.FC&lt;KeyboardToolbarGroupViewProps&gt; | no | iOS,Android | yes |
524
+
525
+ **KeyboardBackgroundView**:匹配键盘区域背景的视图组件
526
+
527
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
528
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
529
+ | KeyboardBackgroundView | 匹配键盘区域的背景视图 | React.FC&lt;KeyboardBackgroundViewProps&gt; | no | iOS,Android | no |
530
+
531
+ **KeyboardExtender**:将子内容附着到键盘区域,并显示在键盘系统按钮上方的容器组件
532
+
533
+ | Name | Description | Type | Required | Platform | HarmonyOS Support |
534
+ | ---- | ----------- | ---- | -------- | -------- | ------------------ |
535
+ | KeyboardExtender | 将子内容附着到键盘区域,并显示在键盘系统按钮上方 | React.FC&lt;KeyboardExtenderProps&gt; | no | iOS,Android | yes |
536
+ | enabled | 控制扩展区域是否跟随键盘生效,默认为`true` | boolean | no | iOS,Android | yes |
537
+ | children | JSX element 子组件 | JSX.Element | no | iOS,Android | yes |
465
538
 
466
539
  **OverKeyboardView**:覆盖在键盘上的容器组件
467
540
 
@@ -473,11 +546,14 @@ export default App;
473
546
 
474
547
  - [ ] 暂不支持KeyboardControllerView中onKeyboardMoveStart,onKeyboardMove,onKeyboardMoveInteractive事件的回调:[ issue#1 ](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/1)
475
548
  - [ ] 暂不支持KeyboardGestureArea组件:[issue#2 ](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/2)
476
- - [ ] 暂不支持hook方法useReanimatedFocusedInput,KeyboardController中setFocusTo,FocusedInputEvents中focusDidSet:[issue#3 ](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/3)
549
+ - [ ] 暂不支持KeyboardController中setFocusTo,FocusedInputEvents中focusDidSet:[issue#3 ](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/3)
477
550
  - [ ] 暂不支持KeyboardAwareScrollView组件属性disableScrollOnKeyboardHide、extraKeyboardSpace的设置[#issue#16](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/16)
478
551
  - [ ] KeyboardControllerView中onFocusedInputSelectionChanged事件部分支持,HarmonyOS暂支持选区的position,选区坐标默认为0:[issue#13](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/13)
479
552
  - [ ] KeyboardAvoidingView属性behavior支持position, 不支持高度height、padding的样式[#issue#13](https://github.com/react-native-oh-library/react-native-harmony-reanimated/issues/13)
480
553
  - [ ] 暂不支持OverKeyboardView接口:[issue#27](https://github.com/react-native-oh-library/react-native-keyboard-controller/issues/27)
554
+ - [ ] 暂不支持KeyboardChatScrollView的onEndVisible、onContentInsetChange回调以及extraContentPadding、blankSpace属性
555
+ - [ ] 暂不支持KeyboardAwareScrollView Ref的assureFocusedInputVisible()方法和mode属性
556
+ - [ ] 暂不支持KeyboardBackgroundView组件
481
557
  - [ ] 暂不支持 Hook 方法 `useResizeMode`。
482
558
  - [ ] Hook 方法 `useGenericKeyboardHandler` 部分支持:HarmonyOS 原生仅支持 `onEnd`,`onStart`、`onMove` 不是原生事件,`onInteractive` 不支持。
483
559
  - [ ] 暂不支持 `KeyboardProvider` 的 `statusBarTranslucent` 和 `navigationBarTranslucent` 属性。
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Use these variables when you tailor your ArkTS code. They must be of the const type.
3
3
  */
4
- export const HAR_VERSION = '1.16.8';
4
+ export const HAR_VERSION = '1.17.0';
5
5
  export const BUILD_MODE_NAME = 'debug';
6
6
  export const DEBUG = true;
7
7
  export const TARGET_NAME = 'default';
@@ -26,3 +26,4 @@
26
26
  */
27
27
 
28
28
  export * from './ts';
29
+ export { RNKeyboardControllerPackage as default } from './src/main/ets/RNKeyboardControllerPackage';
@@ -5,24 +5,24 @@
5
5
  "lockfileVersion": 3,
6
6
  "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.",
7
7
  "specifiers": {
8
- "@ppd/ffrt@1.1.10": "@ppd/ffrt@1.1.10",
8
+ "@ppd/ffrt@1.1.5": "@ppd/ffrt@1.1.5",
9
9
  "@rnoh/react-native-openharmony@../../example/node_modules/react-native-harmony/react_native_openharmony.har": "@rnoh/react-native-openharmony@../../example/node_modules/react-native-harmony/react_native_openharmony.har"
10
10
  },
11
11
  "packages": {
12
- "@ppd/ffrt@1.1.10": {
12
+ "@ppd/ffrt@1.1.5": {
13
13
  "name": "@ppd/ffrt",
14
- "version": "1.1.10",
15
- "integrity": "sha512-hRV0R2dKn9nqcOHhya5jRrTMoB51icGRNXem+WGJOKQdByXaEpI8NGT2BNjlR1Zf6zquQ2jxtsnSMzB88mbF7Q==",
16
- "resolved": "https://ohpm.openharmony.cn/ohpm/@ppd/ffrt/-/ffrt-1.1.10.har",
14
+ "version": "1.1.5",
15
+ "integrity": "sha512-MbXdRqeNHQQv4ALTGdosvOCQI+xH8nt0+E2/aFLS4UuGJ5541MAeenRCDOrgIG05k7SnSJ4WngsCfjj3FbTCQg==",
16
+ "resolved": "https://ohpm.openharmony.cn/ohpm/@ppd/ffrt/-/ffrt-1.1.5.har",
17
17
  "registryType": "ohpm"
18
18
  },
19
19
  "@rnoh/react-native-openharmony@../../example/node_modules/react-native-harmony/react_native_openharmony.har": {
20
20
  "name": "@rnoh/react-native-openharmony",
21
- "version": "0.77.74",
21
+ "version": "0.82.23",
22
22
  "resolved": "../../example/node_modules/react-native-harmony/react_native_openharmony.har",
23
23
  "registryType": "local",
24
24
  "dependencies": {
25
- "@ppd/ffrt": "1.1.10"
25
+ "@ppd/ffrt": "1.1.5"
26
26
  }
27
27
  }
28
28
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-ohos/react-native-keyboard-controller",
3
- "version": "1.16.8",
3
+ "version": "1.17.0",
4
4
  "description": " control keyboard show or hide",
5
5
  "main": "Index.ets",
6
6
  "author": "",
@@ -0,0 +1,86 @@
1
+ /*
2
+ * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
3
+ */
4
+ /**
5
+ * MIT License
6
+ *
7
+ * Copyright (C) 2026 Huawei Device Co., Ltd.
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ * of this software and associated documentation files (the "Software"), to deal
11
+ * in the Software without restriction, including without limitation the rights
12
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ * copies of the Software, and to permit persons to whom the Software is
14
+ * furnished to do so, subject to the following conditions:
15
+ *
16
+ * The above copyright notice and this permission notice shall be included in all
17
+ * copies or substantial portions of the Software.
18
+ *
19
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ * SOFTWARE.
26
+ */
27
+
28
+ #ifndef CLIPPINGSCROLLVIEWCOMPONENTDESCRIPTOR_H
29
+ #define CLIPPINGSCROLLVIEWCOMPONENTDESCRIPTOR_H
30
+
31
+ #pragma once
32
+
33
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
34
+ #include <react/renderer/components/view/ConcreteViewShadowNode.h>
35
+ #include <react/renderer/components/view/ViewShadowNode.h>
36
+ #include <react/renderer/core/propsConversions.h>
37
+
38
+ namespace facebook {
39
+ namespace react {
40
+
41
+ inline const char ClippingScrollViewDecoratorViewComponentName[] =
42
+ "ClippingScrollViewDecoratorView";
43
+
44
+ class ClippingScrollViewDecoratorViewProps : public ViewProps {
45
+ public:
46
+ Float contentInsetBottom;
47
+ Float contentInsetTop;
48
+ bool applyWorkaroundForContentInsetHitTestBug;
49
+
50
+ ClippingScrollViewDecoratorViewProps() = default;
51
+
52
+ ClippingScrollViewDecoratorViewProps(
53
+ const PropsParserContext &context,
54
+ const ClippingScrollViewDecoratorViewProps &sourceProps,
55
+ const RawProps &rawProps)
56
+ : ViewProps(context, sourceProps, rawProps),
57
+ contentInsetBottom(convertRawProp(
58
+ context, rawProps, "contentInsetBottom",
59
+ sourceProps.contentInsetBottom, {0.0})),
60
+ contentInsetTop(convertRawProp(
61
+ context, rawProps, "contentInsetTop",
62
+ sourceProps.contentInsetTop, {0.0})),
63
+ applyWorkaroundForContentInsetHitTestBug(convertRawProp(
64
+ context, rawProps,
65
+ "applyWorkaroundForContentInsetHitTestBug",
66
+ sourceProps.applyWorkaroundForContentInsetHitTestBug, {false})) {}
67
+ };
68
+
69
+ using ClippingScrollViewDecoratorViewShadowNode =
70
+ ConcreteViewShadowNode<ClippingScrollViewDecoratorViewComponentName,
71
+ ClippingScrollViewDecoratorViewProps,
72
+ ViewEventEmitter>;
73
+
74
+ class ClippingScrollViewDecoratorViewComponentDescriptor final
75
+ : public ConcreteComponentDescriptor<
76
+ ClippingScrollViewDecoratorViewShadowNode> {
77
+ public:
78
+ ClippingScrollViewDecoratorViewComponentDescriptor(
79
+ ComponentDescriptorParameters const &parameters)
80
+ : ConcreteComponentDescriptor(parameters) {}
81
+ };
82
+
83
+ } // namespace react
84
+ } // namespace facebook
85
+
86
+ #endif
@@ -0,0 +1,104 @@
1
+ /*
2
+ * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
3
+ */
4
+ /**
5
+ * MIT License
6
+ *
7
+ * Copyright (C) 2026 Huawei Device Co., Ltd.
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ * of this software and associated documentation files (the "Software"), to deal
11
+ * in the Software without restriction, including without limitation the rights
12
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ * copies of the Software, and to permit persons to whom the Software is
14
+ * furnished to do so, subject to the following conditions:
15
+ *
16
+ * The above copyright notice and this permission notice shall be included in all
17
+ * copies or substantial portions of the Software.
18
+ *
19
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ * SOFTWARE.
26
+ */
27
+
28
+ #include "ClippingScrollViewComponentInstance.h"
29
+ #include "RNOHCorePackage/ComponentInstances/ScrollViewComponentInstance.h"
30
+ #include "glog/logging.h"
31
+
32
+ namespace rnoh {
33
+
34
+ ClippingScrollViewComponentInstance::ClippingScrollViewComponentInstance(
35
+ Context context)
36
+ : CppComponentInstance(std::move(context)) {
37
+ DLOG(INFO) << "[ClippingScrollView] constructed tag=" << this->getTag();
38
+ m_stackNode.setClip(true);
39
+ m_stackNode.setHitTestMode(ARKUI_HIT_TEST_MODE_DEFAULT);
40
+ }
41
+
42
+ void ClippingScrollViewComponentInstance::onChildInserted(
43
+ ComponentInstance::Shared const &childComponentInstance,
44
+ std::size_t index) {
45
+ DLOG(INFO) << "[ClippingScrollView] onChildInserted index=" << index
46
+ << " child=" << childComponentInstance->getComponentName();
47
+ CppComponentInstance::onChildInserted(childComponentInstance, index);
48
+ m_stackNode.insertChild(childComponentInstance->getLocalRootArkUINode(), index);
49
+
50
+ if (childComponentInstance->getComponentName() == "ScrollView") {
51
+ m_scrollViewChild =
52
+ std::dynamic_pointer_cast<ScrollViewComponentInstance>(childComponentInstance);
53
+ DLOG(INFO) << "[ClippingScrollView] captured ScrollView child tag="
54
+ << childComponentInstance->getTag();
55
+ applyInsets();
56
+ }
57
+ }
58
+
59
+ void ClippingScrollViewComponentInstance::onChildRemoved(
60
+ ComponentInstance::Shared const &childComponentInstance) {
61
+ CppComponentInstance::onChildRemoved(childComponentInstance);
62
+ m_stackNode.removeChild(childComponentInstance->getLocalRootArkUINode());
63
+ }
64
+
65
+ void ClippingScrollViewComponentInstance::onPropsChanged(
66
+ SharedConcreteProps const &props) {
67
+ CppComponentInstance::onPropsChanged(props);
68
+ m_contentInsetTop = props->contentInsetTop;
69
+ m_contentInsetBottom = props->contentInsetBottom;
70
+ m_applyHitTestWorkaround = props->applyWorkaroundForContentInsetHitTestBug;
71
+ DLOG(INFO) << "[ClippingScrollView] onPropsChanged tag=" << this->getTag()
72
+ << " insetTop=" << m_contentInsetTop
73
+ << " insetBottom=" << m_contentInsetBottom
74
+ << " workaround=" << m_applyHitTestWorkaround;
75
+ applyInsets();
76
+ }
77
+
78
+ void ClippingScrollViewComponentInstance::applyInsets() {
79
+ auto scrollView = m_scrollViewChild.lock();
80
+ if (scrollView) {
81
+ auto &scrollNode = scrollView->getLocalRootArkUINode();
82
+ scrollNode.setEdgeEffect(false, false);
83
+ scrollNode.setScrollOverScrollMode("never");
84
+ DLOG(INFO) << "[ClippingScrollView] applied insets to ScrollView tag="
85
+ << scrollView->getTag()
86
+ << " top=" << m_contentInsetTop
87
+ << " bottom=" << (m_contentInsetBottom + m_contentInsetTop);
88
+ } else {
89
+ m_stackNode.setPadding(
90
+ 0.0f,
91
+ static_cast<float>(m_contentInsetTop),
92
+ 0.0f,
93
+ static_cast<float>(m_contentInsetBottom));
94
+ }
95
+
96
+ m_stackNode.setClip(true);
97
+ m_stackNode.setHitTestMode(ARKUI_HIT_TEST_MODE_DEFAULT);
98
+ }
99
+
100
+ ArkUINode &ClippingScrollViewComponentInstance::getLocalRootArkUINode() {
101
+ return m_stackNode;
102
+ }
103
+
104
+ } // namespace rnoh
@@ -0,0 +1,64 @@
1
+ /*
2
+ * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved.
3
+ */
4
+ /**
5
+ * MIT License
6
+ *
7
+ * Copyright (C) 2026 Huawei Device Co., Ltd.
8
+ *
9
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ * of this software and associated documentation files (the "Software"), to deal
11
+ * in the Software without restriction, including without limitation the rights
12
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ * copies of the Software, and to permit persons to whom the Software is
14
+ * furnished to do so, subject to the following conditions:
15
+ *
16
+ * The above copyright notice and this permission notice shall be included in all
17
+ * copies or substantial portions of the Software.
18
+ *
19
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ * SOFTWARE.
26
+ */
27
+ #ifndef CLIPPINGSCROLLVIEWCOMPONENTINSTANCE_H
28
+ #define CLIPPINGSCROLLVIEWCOMPONENTINSTANCE_H
29
+
30
+ #pragma once
31
+
32
+ #include "ClippingScrollViewComponentDescriptor.h"
33
+ #include "RNOH/CppComponentInstance.h"
34
+ #include "RNOH/arkui/StackNode.h"
35
+
36
+ namespace rnoh {
37
+
38
+ class ScrollViewComponentInstance;
39
+
40
+ class ClippingScrollViewComponentInstance
41
+ : public CppComponentInstance<
42
+ facebook::react::ClippingScrollViewDecoratorViewShadowNode> {
43
+ public:
44
+ explicit ClippingScrollViewComponentInstance(Context context);
45
+
46
+ void onChildInserted(ComponentInstance::Shared const &childComponentInstance,
47
+ std::size_t index) override;
48
+ void onChildRemoved(ComponentInstance::Shared const &childComponentInstance) override;
49
+ void onPropsChanged(SharedConcreteProps const &props) override;
50
+ ArkUINode &getLocalRootArkUINode() override;
51
+
52
+ private:
53
+ void applyInsets();
54
+
55
+ StackNode m_stackNode;
56
+ std::weak_ptr<ScrollViewComponentInstance> m_scrollViewChild;
57
+ facebook::react::Float m_contentInsetTop = 0.0;
58
+ facebook::react::Float m_contentInsetBottom = 0.0;
59
+ bool m_applyHitTestWorkaround = false;
60
+ };
61
+
62
+ } // namespace rnoh
63
+
64
+ #endif