react-native-screens 3.29.0 → 3.30.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 (448) hide show
  1. package/README.md +7 -7
  2. package/RNScreens.podspec +3 -3
  3. package/android/CMakeLists.txt +27 -0
  4. package/android/build.gradle +21 -2
  5. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +17 -14
  6. package/android/src/main/cpp/jni-adapter.cpp +110 -0
  7. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +13 -8
  8. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +8 -8
  9. package/android/src/main/java/com/swmansion/rnscreens/ModalScreenViewManager.kt +12 -0
  10. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +38 -5
  11. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +32 -42
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +76 -48
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +38 -35
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +43 -37
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +23 -23
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +73 -71
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +3 -3
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +5 -5
  19. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +3 -3
  20. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +3 -3
  21. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +4 -4
  22. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +13 -16
  23. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +105 -0
  24. package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +2 -2
  25. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +1 -0
  26. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +14 -10
  27. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +8 -8
  28. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +3 -7
  29. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +4 -8
  30. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +3 -7
  31. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +3 -3
  32. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +9 -13
  33. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +3 -7
  34. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +3 -7
  35. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +3 -7
  36. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +3 -7
  37. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +3 -7
  38. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +3 -7
  39. package/android/src/main/jni/rnscreens.h +1 -0
  40. package/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml +0 -1
  41. package/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml +2 -2
  42. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +1 -1
  43. package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +32 -0
  44. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h +41 -0
  45. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +15 -0
  46. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +31 -0
  47. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +6 -0
  48. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +1 -5
  49. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +1 -1
  50. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +8 -3
  51. package/cpp/RNScreensTurboModule.cpp +107 -0
  52. package/cpp/RNScreensTurboModule.h +43 -0
  53. package/gesture-handler/package.json +6 -0
  54. package/ios/RNSConvert.h +2 -0
  55. package/ios/RNSConvert.mm +5 -2
  56. package/ios/RNSEnums.h +1 -0
  57. package/ios/RNSModalScreen.h +8 -0
  58. package/ios/RNSModalScreen.mm +36 -0
  59. package/ios/RNSModule.h +19 -0
  60. package/ios/RNSModule.mm +174 -0
  61. package/ios/RNSScreen.h +4 -1
  62. package/ios/RNSScreen.mm +48 -26
  63. package/ios/RNSScreenStack.h +6 -0
  64. package/ios/RNSScreenStack.mm +81 -15
  65. package/ios/RNSScreenStackAnimator.mm +89 -1
  66. package/ios/RNSScreenStackHeaderConfig.mm +7 -1
  67. package/ios/RNSScreenWindowTraits.h +1 -1
  68. package/ios/RNSScreenWindowTraits.mm +24 -50
  69. package/ios/RNSSearchBar.mm +24 -0
  70. package/ios/utils/RNSUIBarButtonItem.h +2 -0
  71. package/lib/commonjs/TransitionProgressContext.js +3 -4
  72. package/lib/commonjs/TransitionProgressContext.js.map +1 -1
  73. package/lib/commonjs/components/FullWindowOverlay.js +28 -0
  74. package/lib/commonjs/components/FullWindowOverlay.js.map +1 -0
  75. package/lib/commonjs/components/FullWindowOverlay.web.js +9 -0
  76. package/lib/commonjs/components/FullWindowOverlay.web.js.map +1 -0
  77. package/lib/commonjs/components/Screen.js +161 -0
  78. package/lib/commonjs/components/Screen.js.map +1 -0
  79. package/lib/commonjs/components/Screen.web.js +46 -0
  80. package/lib/commonjs/components/Screen.web.js.map +1 -0
  81. package/lib/commonjs/components/ScreenContainer.js +33 -0
  82. package/lib/commonjs/components/ScreenContainer.js.map +1 -0
  83. package/lib/commonjs/components/ScreenContainer.web.js +11 -0
  84. package/lib/commonjs/components/ScreenContainer.web.js.map +1 -0
  85. package/lib/commonjs/components/ScreenStack.js +45 -0
  86. package/lib/commonjs/components/ScreenStack.js.map +1 -0
  87. package/lib/commonjs/components/ScreenStack.web.js +9 -0
  88. package/lib/commonjs/components/ScreenStack.web.js.map +1 -0
  89. package/lib/commonjs/components/ScreenStackHeaderConfig.js +53 -0
  90. package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -0
  91. package/lib/commonjs/components/ScreenStackHeaderConfig.web.js +27 -0
  92. package/lib/commonjs/components/ScreenStackHeaderConfig.web.js.map +1 -0
  93. package/lib/commonjs/components/SearchBar.js +59 -0
  94. package/lib/commonjs/components/SearchBar.js.map +1 -0
  95. package/lib/commonjs/components/SearchBar.web.js +11 -0
  96. package/lib/commonjs/components/SearchBar.web.js.map +1 -0
  97. package/lib/commonjs/components/helpers/DelayedFreeze.js +32 -0
  98. package/lib/commonjs/components/helpers/DelayedFreeze.js.map +1 -0
  99. package/lib/commonjs/core.js +41 -0
  100. package/lib/commonjs/core.js.map +1 -0
  101. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +1 -2
  102. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
  103. package/lib/commonjs/fabric/ModalScreenNativeComponent.js +13 -0
  104. package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -0
  105. package/lib/commonjs/fabric/NativeScreensModule.js +10 -0
  106. package/lib/commonjs/fabric/NativeScreensModule.js.map +1 -0
  107. package/lib/commonjs/fabric/NativeScreensModule.web.js +8 -0
  108. package/lib/commonjs/fabric/NativeScreensModule.web.js.map +1 -0
  109. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +1 -2
  110. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -1
  111. package/lib/commonjs/fabric/ScreenNativeComponent.js +1 -2
  112. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
  113. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +1 -2
  114. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
  115. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +1 -2
  116. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  117. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +1 -2
  118. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  119. package/lib/commonjs/fabric/ScreenStackNativeComponent.js +1 -2
  120. package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -1
  121. package/lib/commonjs/fabric/SearchBarNativeComponent.js +3 -5
  122. package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -1
  123. package/lib/commonjs/gesture-handler/GestureDetectorProvider.js +19 -0
  124. package/lib/commonjs/gesture-handler/GestureDetectorProvider.js.map +1 -0
  125. package/lib/commonjs/gesture-handler/RNScreensTurboModule.js +8 -0
  126. package/lib/commonjs/gesture-handler/RNScreensTurboModule.js.map +1 -0
  127. package/lib/commonjs/gesture-handler/ScreenGestureDetector.js +202 -0
  128. package/lib/commonjs/gesture-handler/ScreenGestureDetector.js.map +1 -0
  129. package/lib/commonjs/gesture-handler/constraints.js +64 -0
  130. package/lib/commonjs/gesture-handler/constraints.js.map +1 -0
  131. package/lib/commonjs/gesture-handler/defaults.js +38 -0
  132. package/lib/commonjs/gesture-handler/defaults.js.map +1 -0
  133. package/lib/commonjs/gesture-handler/fabricUtils.js +30 -0
  134. package/lib/commonjs/gesture-handler/fabricUtils.js.map +1 -0
  135. package/lib/commonjs/gesture-handler/fabricUtils.web.js +17 -0
  136. package/lib/commonjs/gesture-handler/fabricUtils.web.js.map +1 -0
  137. package/lib/commonjs/gesture-handler/index.js +14 -0
  138. package/lib/commonjs/gesture-handler/index.js.map +1 -0
  139. package/lib/commonjs/index.js +183 -100
  140. package/lib/commonjs/index.js.map +1 -1
  141. package/lib/commonjs/native-stack/contexts/GHContext.js +11 -0
  142. package/lib/commonjs/native-stack/contexts/GHContext.js.map +1 -0
  143. package/lib/commonjs/native-stack/index.js.map +1 -1
  144. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +20 -24
  145. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  146. package/lib/commonjs/native-stack/types.js.map +1 -1
  147. package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js +3 -4
  148. package/lib/commonjs/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
  149. package/lib/commonjs/native-stack/utils/HeaderHeightContext.js +3 -4
  150. package/lib/commonjs/native-stack/utils/HeaderHeightContext.js.map +1 -1
  151. package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js +2 -2
  152. package/lib/commonjs/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
  153. package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
  154. package/lib/commonjs/native-stack/utils/getStatusBarHeight.js.map +1 -1
  155. package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js +2 -2
  156. package/lib/commonjs/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
  157. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +2 -4
  158. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -1
  159. package/lib/commonjs/native-stack/utils/useHeaderHeight.js +2 -2
  160. package/lib/commonjs/native-stack/utils/useHeaderHeight.js.map +1 -1
  161. package/lib/commonjs/native-stack/views/FontProcessor.js +1 -2
  162. package/lib/commonjs/native-stack/views/FontProcessor.js.map +1 -1
  163. package/lib/commonjs/native-stack/views/HeaderConfig.js +11 -7
  164. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  165. package/lib/commonjs/native-stack/views/NativeStackView.js +50 -15
  166. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  167. package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js +3 -4
  168. package/lib/commonjs/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
  169. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +6 -9
  170. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  171. package/lib/commonjs/reanimated/ReanimatedScreen.js +1 -2
  172. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  173. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +6 -14
  174. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -1
  175. package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js +3 -4
  176. package/lib/commonjs/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
  177. package/lib/commonjs/reanimated/index.js.map +1 -1
  178. package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js +2 -2
  179. package/lib/commonjs/reanimated/useReanimatedHeaderHeight.js.map +1 -1
  180. package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js +2 -2
  181. package/lib/commonjs/reanimated/useReanimatedTransitionProgress.js.map +1 -1
  182. package/lib/commonjs/types.js.map +1 -1
  183. package/lib/commonjs/useTransitionProgress.js +2 -2
  184. package/lib/commonjs/useTransitionProgress.js.map +1 -1
  185. package/lib/commonjs/utils.js +2 -4
  186. package/lib/commonjs/utils.js.map +1 -1
  187. package/lib/module/TransitionProgressContext.js.map +1 -1
  188. package/lib/module/components/FullWindowOverlay.js +21 -0
  189. package/lib/module/components/FullWindowOverlay.js.map +1 -0
  190. package/lib/module/components/FullWindowOverlay.web.js +3 -0
  191. package/lib/module/components/FullWindowOverlay.web.js.map +1 -0
  192. package/lib/module/components/Screen.js +156 -0
  193. package/lib/module/components/Screen.js.map +1 -0
  194. package/lib/module/components/Screen.web.js +38 -0
  195. package/lib/module/components/Screen.web.js.map +1 -0
  196. package/lib/module/components/ScreenContainer.js +26 -0
  197. package/lib/module/components/ScreenContainer.js.map +1 -0
  198. package/lib/module/components/ScreenContainer.web.js +5 -0
  199. package/lib/module/components/ScreenContainer.web.js.map +1 -0
  200. package/lib/module/components/ScreenStack.js +40 -0
  201. package/lib/module/components/ScreenStack.js.map +1 -0
  202. package/lib/module/components/ScreenStack.web.js +3 -0
  203. package/lib/module/components/ScreenStack.web.js.map +1 -0
  204. package/lib/module/components/ScreenStackHeaderConfig.js +43 -0
  205. package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -0
  206. package/lib/module/components/ScreenStackHeaderConfig.web.js +14 -0
  207. package/lib/module/components/ScreenStackHeaderConfig.web.js.map +1 -0
  208. package/lib/module/components/SearchBar.js +52 -0
  209. package/lib/module/components/SearchBar.js.map +1 -0
  210. package/lib/module/components/SearchBar.web.js +5 -0
  211. package/lib/module/components/SearchBar.web.js.map +1 -0
  212. package/lib/module/components/helpers/DelayedFreeze.js +25 -0
  213. package/lib/module/components/helpers/DelayedFreeze.js.map +1 -0
  214. package/lib/module/core.js +31 -0
  215. package/lib/module/core.js.map +1 -0
  216. package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
  217. package/lib/module/fabric/ModalScreenNativeComponent.js +8 -0
  218. package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -0
  219. package/lib/module/fabric/NativeScreensModule.js +5 -0
  220. package/lib/module/fabric/NativeScreensModule.js.map +1 -0
  221. package/lib/module/fabric/NativeScreensModule.web.js +2 -0
  222. package/lib/module/fabric/NativeScreensModule.web.js.map +1 -0
  223. package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -1
  224. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  225. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -1
  226. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  227. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
  228. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -1
  229. package/lib/module/fabric/SearchBarNativeComponent.js +1 -1
  230. package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -1
  231. package/lib/module/gesture-handler/GestureDetectorProvider.js +12 -0
  232. package/lib/module/gesture-handler/GestureDetectorProvider.js.map +1 -0
  233. package/lib/module/gesture-handler/RNScreensTurboModule.js +2 -0
  234. package/lib/module/gesture-handler/RNScreensTurboModule.js.map +1 -0
  235. package/lib/module/gesture-handler/ScreenGestureDetector.js +194 -0
  236. package/lib/module/gesture-handler/ScreenGestureDetector.js.map +1 -0
  237. package/lib/module/gesture-handler/constraints.js +56 -0
  238. package/lib/module/gesture-handler/constraints.js.map +1 -0
  239. package/lib/module/gesture-handler/defaults.js +32 -0
  240. package/lib/module/gesture-handler/defaults.js.map +1 -0
  241. package/lib/module/gesture-handler/fabricUtils.js +23 -0
  242. package/lib/module/gesture-handler/fabricUtils.js.map +1 -0
  243. package/lib/module/gesture-handler/fabricUtils.web.js +10 -0
  244. package/lib/module/gesture-handler/fabricUtils.web.js.map +1 -0
  245. package/lib/module/gesture-handler/index.js +5 -0
  246. package/lib/module/gesture-handler/index.js.map +1 -0
  247. package/lib/module/index.js +31 -64
  248. package/lib/module/index.js.map +1 -1
  249. package/lib/module/native-stack/contexts/GHContext.js +4 -0
  250. package/lib/module/native-stack/contexts/GHContext.js.map +1 -0
  251. package/lib/module/native-stack/index.js.map +1 -1
  252. package/lib/module/native-stack/navigators/createNativeStackNavigator.js +17 -20
  253. package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  254. package/lib/module/native-stack/types.js.map +1 -1
  255. package/lib/module/native-stack/utils/AnimatedHeaderHeightContext.js.map +1 -1
  256. package/lib/module/native-stack/utils/HeaderHeightContext.js.map +1 -1
  257. package/lib/module/native-stack/utils/SafeAreaProviderCompat.js.map +1 -1
  258. package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
  259. package/lib/module/native-stack/utils/getStatusBarHeight.js.map +1 -1
  260. package/lib/module/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -1
  261. package/lib/module/native-stack/utils/useBackPressSubscription.js +2 -4
  262. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -1
  263. package/lib/module/native-stack/utils/useHeaderHeight.js.map +1 -1
  264. package/lib/module/native-stack/views/FontProcessor.js +1 -2
  265. package/lib/module/native-stack/views/FontProcessor.js.map +1 -1
  266. package/lib/module/native-stack/views/HeaderConfig.js +8 -5
  267. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  268. package/lib/module/native-stack/views/NativeStackView.js +49 -14
  269. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  270. package/lib/module/reanimated/ReanimatedHeaderHeightContext.js.map +1 -1
  271. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +2 -4
  272. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  273. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  274. package/lib/module/reanimated/ReanimatedScreenProvider.js +6 -14
  275. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -1
  276. package/lib/module/reanimated/ReanimatedTransitionProgressContext.js.map +1 -1
  277. package/lib/module/reanimated/index.js.map +1 -1
  278. package/lib/module/reanimated/useReanimatedHeaderHeight.js.map +1 -1
  279. package/lib/module/reanimated/useReanimatedTransitionProgress.js.map +1 -1
  280. package/lib/module/types.js.map +1 -1
  281. package/lib/module/useTransitionProgress.js.map +1 -1
  282. package/lib/module/utils.js.map +1 -1
  283. package/lib/typescript/TransitionProgressContext.d.ts +1 -0
  284. package/lib/typescript/TransitionProgressContext.d.ts.map +1 -0
  285. package/lib/typescript/components/FullWindowOverlay.d.ts +6 -0
  286. package/lib/typescript/components/FullWindowOverlay.d.ts.map +1 -0
  287. package/lib/typescript/components/FullWindowOverlay.web.d.ts +6 -0
  288. package/lib/typescript/components/FullWindowOverlay.web.d.ts.map +1 -0
  289. package/lib/typescript/components/Screen.d.ts +20 -0
  290. package/lib/typescript/components/Screen.d.ts.map +1 -0
  291. package/lib/typescript/components/Screen.web.d.ts +11 -0
  292. package/lib/typescript/components/Screen.web.d.ts.map +1 -0
  293. package/lib/typescript/components/ScreenContainer.d.ts +7 -0
  294. package/lib/typescript/components/ScreenContainer.d.ts.map +1 -0
  295. package/lib/typescript/components/ScreenContainer.web.d.ts +5 -0
  296. package/lib/typescript/components/ScreenContainer.web.d.ts.map +1 -0
  297. package/lib/typescript/components/ScreenStack.d.ts +5 -0
  298. package/lib/typescript/components/ScreenStack.d.ts.map +1 -0
  299. package/lib/typescript/components/ScreenStack.web.d.ts +3 -0
  300. package/lib/typescript/components/ScreenStack.web.d.ts.map +1 -0
  301. package/lib/typescript/components/ScreenStackHeaderConfig.d.ts +13 -0
  302. package/lib/typescript/components/ScreenStackHeaderConfig.d.ts.map +1 -0
  303. package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts +13 -0
  304. package/lib/typescript/components/ScreenStackHeaderConfig.web.d.ts.map +1 -0
  305. package/lib/typescript/components/SearchBar.d.ts +26 -0
  306. package/lib/typescript/components/SearchBar.d.ts.map +1 -0
  307. package/lib/typescript/components/SearchBar.web.d.ts +5 -0
  308. package/lib/typescript/components/SearchBar.web.d.ts.map +1 -0
  309. package/lib/typescript/components/helpers/DelayedFreeze.d.ts +8 -0
  310. package/lib/typescript/components/helpers/DelayedFreeze.d.ts.map +1 -0
  311. package/lib/typescript/core.d.ts +7 -0
  312. package/lib/typescript/core.d.ts.map +1 -0
  313. package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts +1 -0
  314. package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts.map +1 -0
  315. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +68 -0
  316. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -0
  317. package/lib/typescript/fabric/NativeScreensModule.d.ts +6 -0
  318. package/lib/typescript/fabric/NativeScreensModule.d.ts.map +1 -0
  319. package/lib/typescript/fabric/NativeScreensModule.web.d.ts +3 -0
  320. package/lib/typescript/fabric/NativeScreensModule.web.d.ts.map +1 -0
  321. package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts +1 -0
  322. package/lib/typescript/fabric/ScreenContainerNativeComponent.d.ts.map +1 -0
  323. package/lib/typescript/fabric/ScreenNativeComponent.d.ts +2 -1
  324. package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -0
  325. package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts +1 -0
  326. package/lib/typescript/fabric/ScreenNavigationContainerNativeComponent.d.ts.map +1 -0
  327. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +1 -0
  328. package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -0
  329. package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +1 -0
  330. package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -0
  331. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +1 -0
  332. package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -0
  333. package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +3 -1
  334. package/lib/typescript/fabric/SearchBarNativeComponent.d.ts.map +1 -0
  335. package/lib/typescript/gesture-handler/GestureDetectorProvider.d.ts +5 -0
  336. package/lib/typescript/gesture-handler/GestureDetectorProvider.d.ts.map +1 -0
  337. package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts +13 -0
  338. package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts.map +1 -0
  339. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts +5 -0
  340. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts.map +1 -0
  341. package/lib/typescript/gesture-handler/constraints.d.ts +6 -0
  342. package/lib/typescript/gesture-handler/constraints.d.ts.map +1 -0
  343. package/lib/typescript/gesture-handler/defaults.d.ts +20 -0
  344. package/lib/typescript/gesture-handler/defaults.d.ts.map +1 -0
  345. package/lib/typescript/gesture-handler/fabricUtils.d.ts +8 -0
  346. package/lib/typescript/gesture-handler/fabricUtils.d.ts.map +1 -0
  347. package/lib/typescript/gesture-handler/fabricUtils.web.d.ts +6 -0
  348. package/lib/typescript/gesture-handler/fabricUtils.web.d.ts.map +1 -0
  349. package/lib/typescript/gesture-handler/index.d.ts +2 -0
  350. package/lib/typescript/gesture-handler/index.d.ts.map +1 -0
  351. package/lib/typescript/index.d.ts +11 -31
  352. package/lib/typescript/index.d.ts.map +1 -0
  353. package/lib/typescript/native-stack/contexts/GHContext.d.ts +4 -0
  354. package/lib/typescript/native-stack/contexts/GHContext.d.ts.map +1 -0
  355. package/lib/typescript/native-stack/index.d.ts +1 -0
  356. package/lib/typescript/native-stack/index.d.ts.map +1 -0
  357. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +1 -0
  358. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -0
  359. package/lib/typescript/native-stack/types.d.ts +39 -2
  360. package/lib/typescript/native-stack/types.d.ts.map +1 -0
  361. package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts +1 -0
  362. package/lib/typescript/native-stack/utils/AnimatedHeaderHeightContext.d.ts.map +1 -0
  363. package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts +1 -0
  364. package/lib/typescript/native-stack/utils/HeaderHeightContext.d.ts.map +1 -0
  365. package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +1 -0
  366. package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts.map +1 -0
  367. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +1 -0
  368. package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -0
  369. package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts +1 -0
  370. package/lib/typescript/native-stack/utils/getStatusBarHeight.d.ts.map +1 -0
  371. package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -0
  372. package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts.map +1 -0
  373. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +1 -0
  374. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts.map +1 -0
  375. package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts +1 -0
  376. package/lib/typescript/native-stack/utils/useHeaderHeight.d.ts.map +1 -0
  377. package/lib/typescript/native-stack/views/FontProcessor.d.ts +1 -0
  378. package/lib/typescript/native-stack/views/FontProcessor.d.ts.map +1 -0
  379. package/lib/typescript/native-stack/views/HeaderConfig.d.ts +1 -0
  380. package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -0
  381. package/lib/typescript/native-stack/views/NativeStackView.d.ts +1 -0
  382. package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -0
  383. package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts +1 -0
  384. package/lib/typescript/reanimated/ReanimatedHeaderHeightContext.d.ts.map +1 -0
  385. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +2 -2
  386. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts.map +1 -0
  387. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +2 -2
  388. package/lib/typescript/reanimated/ReanimatedScreen.d.ts.map +1 -0
  389. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +1 -0
  390. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts.map +1 -0
  391. package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +1 -0
  392. package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts.map +1 -0
  393. package/lib/typescript/reanimated/index.d.ts +1 -0
  394. package/lib/typescript/reanimated/index.d.ts.map +1 -0
  395. package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts +2 -3
  396. package/lib/typescript/reanimated/useReanimatedHeaderHeight.d.ts.map +1 -0
  397. package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts +4 -9
  398. package/lib/typescript/reanimated/useReanimatedTransitionProgress.d.ts.map +1 -0
  399. package/lib/typescript/types.d.ts +11 -2
  400. package/lib/typescript/types.d.ts.map +1 -0
  401. package/lib/typescript/useTransitionProgress.d.ts +1 -0
  402. package/lib/typescript/useTransitionProgress.d.ts.map +1 -0
  403. package/lib/typescript/utils.d.ts +1 -0
  404. package/lib/typescript/utils.d.ts.map +1 -0
  405. package/native-stack/README.md +2 -1
  406. package/native-stack/package.json +1 -1
  407. package/package.json +18 -11
  408. package/react-native.config.js +2 -1
  409. package/reanimated/package.json +1 -1
  410. package/src/components/FullWindowOverlay.tsx +25 -0
  411. package/src/components/FullWindowOverlay.web.tsx +6 -0
  412. package/src/components/Screen.tsx +218 -0
  413. package/src/components/Screen.web.tsx +43 -0
  414. package/src/components/ScreenContainer.tsx +33 -0
  415. package/src/components/ScreenContainer.web.tsx +6 -0
  416. package/src/components/ScreenStack.tsx +41 -0
  417. package/src/components/ScreenStack.web.tsx +3 -0
  418. package/src/components/ScreenStackHeaderConfig.tsx +76 -0
  419. package/src/components/ScreenStackHeaderConfig.web.tsx +39 -0
  420. package/src/components/SearchBar.tsx +91 -0
  421. package/src/components/SearchBar.web.tsx +6 -0
  422. package/src/components/helpers/DelayedFreeze.tsx +27 -0
  423. package/src/core.ts +43 -0
  424. package/src/fabric/ModalScreenNativeComponent.ts +104 -0
  425. package/src/fabric/NativeScreensModule.ts +7 -0
  426. package/src/fabric/NativeScreensModule.web.ts +1 -0
  427. package/src/fabric/ScreenNativeComponent.ts +1 -1
  428. package/src/fabric/SearchBarNativeComponent.ts +2 -0
  429. package/src/gesture-handler/GestureDetectorProvider.tsx +16 -0
  430. package/src/gesture-handler/RNScreensTurboModule.ts +13 -0
  431. package/src/gesture-handler/ScreenGestureDetector.tsx +241 -0
  432. package/src/gesture-handler/constraints.ts +87 -0
  433. package/src/gesture-handler/defaults.ts +38 -0
  434. package/src/gesture-handler/fabricUtils.ts +39 -0
  435. package/src/gesture-handler/fabricUtils.web.ts +10 -0
  436. package/src/gesture-handler/index.tsx +4 -0
  437. package/src/index.tsx +65 -112
  438. package/src/native-stack/contexts/GHContext.tsx +7 -0
  439. package/src/native-stack/types.tsx +62 -1
  440. package/src/native-stack/views/HeaderConfig.tsx +11 -0
  441. package/src/native-stack/views/NativeStackView.tsx +65 -13
  442. package/src/types.tsx +13 -1
  443. package/lib/commonjs/index.native.js +0 -418
  444. package/lib/commonjs/index.native.js.map +0 -1
  445. package/lib/module/index.native.js +0 -415
  446. package/lib/module/index.native.js.map +0 -1
  447. package/lib/typescript/index.native.d.ts +0 -2
  448. package/src/index.native.tsx +0 -619
package/README.md CHANGED
@@ -11,6 +11,7 @@ To learn about how to use `react-native-screens` with Fabric architecture, head
11
11
  - [x] iOS
12
12
  - [x] Android
13
13
  - [x] tvOS
14
+ - [x] visionOS
14
15
  - [x] Windows
15
16
  - [x] Web
16
17
 
@@ -103,8 +104,9 @@ Screens are already integrated with the React Native's most popular navigation l
103
104
 
104
105
  ## Supported react-native version
105
106
 
106
- | version | react-native version |
107
+ | library version | react-native version |
107
108
  | ------- | -------------------- |
109
+ | 3.30.0+ | 0.68.0+ |
108
110
  | 3.14.0+ | 0.64.0+ |
109
111
  | 3.0.0+ | 0.62.0+ |
110
112
  | 2.0.0+ | 0.60.0+ |
@@ -113,13 +115,11 @@ Screens are already integrated with the React Native's most popular navigation l
113
115
 
114
116
  [Fabric](https://reactnative.dev/architecture/fabric-renderer) is React Native's new rendering system.
115
117
 
116
- - As of [version `3.21.0`](https://github.com/software-mansion/react-native-screens/releases/tag/3.21.0) of this project, Fabric is supported only for react-native 0.72+. Support for lower versions has been dropped.
117
- - As of [version `3.19.0`](https://github.com/software-mansion/react-native-screens/releases/tag/3.19.0) of this project, Fabric is supported only for react-native 0.71+. Support for lower versions has been dropped.
118
- - As of [version `3.18.0`](https://github.com/software-mansion/react-native-screens/releases/tag/3.18.0) of this project, Fabric is supported only for react-native 0.70+. Support for lower versions has been dropped.
119
- - As of [version `3.14.0`](https://github.com/software-mansion/react-native-screens/releases/tag/3.14.0) of this project, Fabric is supported only for react-native 0.69+. Support for lower versions has been dropped.
118
+ Here's a table with summary of supported `react-native` versions when Fabric is turned on.
120
119
 
121
- | version | react-native version |
120
+ | library version | react-native version |
122
121
  | ------- | -------------------- |
122
+ | 3.28.0+ | 0.73.0+ |
123
123
  | 3.21.0+ | 0.72.0+ |
124
124
  | 3.19.0+ | 0.71.0+ |
125
125
  | 3.18.0+ | 0.70.0+ |
@@ -145,7 +145,7 @@ You are all set 🎉 – when screens are enabled in your application code react
145
145
 
146
146
  ### Experimental support for `react-freeze`
147
147
 
148
- > You have to use React Native 0.64 or higher, react-navigation 5.x or 6.x and react-native-screens >= v3.9.0
148
+ > You have to use React Native 0.68 or higher, react-navigation 5.x or 6.x and react-native-screens >= v3.9.0
149
149
 
150
150
  Since `v3.9.0`, `react-native-screens` comes with experimental support for [`react-freeze`](https://github.com/software-mansion-labs/react-freeze). It uses the React `Suspense` mechanism to prevent parts of the React component tree from rendering, while keeping its state untouched.
151
151
 
package/RNScreens.podspec CHANGED
@@ -4,7 +4,7 @@ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
4
 
5
5
  new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
6
6
  platform = new_arch_enabled ? "11.0" : "9.0"
7
- source_files = new_arch_enabled ? 'ios/**/*.{h,m,mm,cpp}' : "ios/**/*.{h,m,mm}"
7
+ source_files = new_arch_enabled ? 'ios/**/*.{h,m,mm,cpp}' : ["ios/**/*.{h,m,mm}", "cpp/**/*.{cpp,h}"]
8
8
 
9
9
  folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
10
10
 
@@ -17,7 +17,7 @@ class RNScreensDependencyHelper
17
17
  end
18
18
 
19
19
  s.subspec "common" do |ss|
20
- ss.source_files = "common/cpp/**/*.{cpp,h}"
20
+ ss.source_files = ["common/cpp/**/*.{cpp,h}", "cpp/**/*.{cpp,h}"]
21
21
  ss.header_dir = "rnscreens"
22
22
  ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/common/cpp\"" }
23
23
  end
@@ -60,7 +60,7 @@ Pod::Spec.new do |s|
60
60
  s.homepage = "https://github.com/software-mansion/react-native-screens"
61
61
  s.license = "MIT"
62
62
  s.author = { "author" => "author@domain.cn" }
63
- s.platforms = { :ios => platform, :tvos => "11.0" }
63
+ s.platforms = { :ios => platform, :tvos => "11.0", :visionos => "1.0" }
64
64
  s.source = { :git => "https://github.com/software-mansion/react-native-screens.git", :tag => "#{s.version}" }
65
65
  s.source_files = source_files
66
66
  s.requires_arc = true
@@ -0,0 +1,27 @@
1
+ cmake_minimum_required(VERSION 3.9.0)
2
+
3
+ project(rnscreens)
4
+
5
+ add_library(rnscreens
6
+ SHARED
7
+ ../cpp/RNScreensTurboModule.cpp
8
+ ./src/main/cpp/jni-adapter.cpp
9
+ )
10
+
11
+ include_directories(
12
+ ../cpp
13
+ )
14
+
15
+ set_target_properties(rnscreens PROPERTIES
16
+ CXX_STANDARD 17
17
+ CXX_STANDARD_REQUIRED ON
18
+ CXX_EXTENSIONS OFF
19
+ POSITION_INDEPENDENT_CODE ON
20
+ )
21
+
22
+ find_package(ReactAndroid REQUIRED CONFIG)
23
+
24
+ target_link_libraries(rnscreens
25
+ ReactAndroid::jsi
26
+ android
27
+ )
@@ -1,4 +1,5 @@
1
1
  import com.android.Version
2
+ import groovy.json.JsonSlurper
2
3
 
3
4
  buildscript {
4
5
  ext {
@@ -73,6 +74,19 @@ android {
73
74
  ndk {
74
75
  abiFilters (*reactNativeArchitectures())
75
76
  }
77
+ externalNativeBuild {
78
+ cmake {
79
+ arguments "-DANDROID_STL=c++_shared"
80
+ }
81
+ }
82
+ }
83
+ buildFeatures {
84
+ prefab true
85
+ }
86
+ externalNativeBuild {
87
+ cmake {
88
+ path "CMakeLists.txt"
89
+ }
76
90
  }
77
91
  lintOptions {
78
92
  abortOnError false
@@ -86,7 +100,13 @@ android {
86
100
  // while there are more libraries copied in intermediates folder of the lib build directory, we exclude
87
101
  // only the ones that make the build fail (ideally we should only include librnscreens_modules but we
88
102
  // are only allowed to specify exclude patterns)
89
- exclude "**/libreact_render*.so"
103
+ excludes = [
104
+ "META-INF",
105
+ "META-INF/**",
106
+ "**/libjsi.so",
107
+ "**/libc++_shared.so",
108
+ "**/libreact_render*.so"
109
+ ]
90
110
  }
91
111
  sourceSets.main {
92
112
  ext.androidResDir = "src/main/res"
@@ -101,7 +121,6 @@ android {
101
121
  "build/generated/source/codegen/java"
102
122
  ]
103
123
  }
104
-
105
124
  }
106
125
  res {
107
126
  if (safeExtGet('compileSdkVersion', rnsDefaultCompileSdkVersion) >= 33) {
@@ -3,7 +3,6 @@ package com.swmansion.rnscreens
3
3
  import android.view.ViewGroup
4
4
  import androidx.annotation.UiThread
5
5
  import com.facebook.react.bridge.ReactContext
6
- import com.facebook.react.bridge.ReadableMap
7
6
  import com.facebook.react.bridge.WritableMap
8
7
  import com.facebook.react.bridge.WritableNativeMap
9
8
  import com.facebook.react.uimanager.FabricViewStateManager
@@ -13,36 +12,40 @@ import kotlin.math.abs
13
12
  abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : ViewGroup(context), FabricViewStateManager.HasFabricViewStateManager {
14
13
  private val mFabricViewStateManager: FabricViewStateManager = FabricViewStateManager()
15
14
 
15
+ private var lastSetWidth = 0f
16
+ private var lastSetHeight = 0f
17
+
16
18
  override fun getFabricViewStateManager(): FabricViewStateManager {
17
19
  return mFabricViewStateManager
18
20
  }
19
21
 
20
- protected fun updateScreenSizeFabric(width: Int, height: Int) {
21
- updateState(width, height)
22
+ protected fun updateScreenSizeFabric(width: Int, height: Int, headerHeight: Double) {
23
+ updateState(width, height, headerHeight)
22
24
  }
23
25
 
24
26
  @UiThread
25
- fun updateState(width: Int, height: Int) {
27
+ fun updateState(width: Int, height: Int, headerHeight: Double) {
26
28
  val realWidth: Float = PixelUtil.toDIPFromPixel(width.toFloat())
27
29
  val realHeight: Float = PixelUtil.toDIPFromPixel(height.toFloat())
28
30
 
29
31
  // Check incoming state values. If they're already the correct value, return early to prevent
30
32
  // infinite UpdateState/SetState loop.
31
- val currentState: ReadableMap? = mFabricViewStateManager.getStateData()
32
- if (currentState != null) {
33
- val delta = 0.9f
34
- val stateFrameHeight: Float = if (currentState.hasKey("frameHeight")) currentState.getDouble("frameHeight").toFloat() else 0f
35
- val stateFrameWidth: Float = if (currentState.hasKey("frameWidth")) currentState.getDouble("frameWidth").toFloat() else 0f
36
- if (abs(stateFrameWidth - realWidth) < delta &&
37
- abs(stateFrameHeight - realHeight) < delta
38
- ) {
39
- return
40
- }
33
+ val delta = 0.9f
34
+ if (abs(lastSetWidth - realWidth) < delta &&
35
+ abs(lastSetHeight - realHeight) < delta
36
+ ) {
37
+ return
41
38
  }
39
+
40
+ lastSetWidth = realWidth
41
+ lastSetHeight = realHeight
42
+
42
43
  mFabricViewStateManager.setState {
43
44
  val map: WritableMap = WritableNativeMap()
44
45
  map.putDouble("frameWidth", realWidth.toDouble())
45
46
  map.putDouble("frameHeight", realHeight.toDouble())
47
+ map.putDouble("contentOffsetX", 0.0)
48
+ map.putDouble("contentOffsetY", headerHeight)
46
49
  map
47
50
  }
48
51
  }
@@ -0,0 +1,110 @@
1
+ #include <array>
2
+ #include <mutex>
3
+ #include <jni.h>
4
+ #include <jsi/jsi.h>
5
+ #include "RNScreensTurboModule.h"
6
+
7
+ using namespace facebook;
8
+
9
+ jobject globalThis;
10
+
11
+ extern "C"
12
+ JNIEXPORT void JNICALL
13
+ Java_com_swmansion_rnscreens_ScreensModule_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
14
+ auto runtime = reinterpret_cast<jsi::Runtime*>(jsiPtr);
15
+ if (!runtime) {
16
+ return;
17
+ }
18
+ jsi::Runtime &rt = *runtime;
19
+ globalThis = env->NewGlobalRef(thiz);
20
+ JavaVM* jvm;
21
+ env->GetJavaVM(&jvm);
22
+
23
+ const auto &startTransition = [jvm](int stackTag) -> std::array<int, 2> {
24
+ JNIEnv* currentEnv;
25
+ if (jvm->AttachCurrentThread(&currentEnv, nullptr) != JNI_OK) {
26
+ return {0, 0};
27
+ }
28
+ jclass javaClass = currentEnv->GetObjectClass(globalThis);
29
+ jmethodID methodID = currentEnv->GetMethodID(
30
+ javaClass,
31
+ "startTransition",
32
+ "(Ljava/lang/Integer;)[I"
33
+ );
34
+ jclass integerClass = currentEnv->FindClass("java/lang/Integer");
35
+ jmethodID integerConstructor = currentEnv->GetMethodID(integerClass, "<init>", "(I)V");
36
+ jobject integerArg = currentEnv->NewObject(integerClass, integerConstructor, stackTag);
37
+ jintArray resultArray = (jintArray) currentEnv->CallObjectMethod(
38
+ globalThis,
39
+ methodID,
40
+ integerArg
41
+ );
42
+ std::array<int, 2> result = {-1, -1};
43
+ jint* elements = currentEnv->GetIntArrayElements(resultArray, nullptr);
44
+ if (elements != nullptr) {
45
+ result[0] = elements[0];
46
+ result[1] = elements[1];
47
+ currentEnv->ReleaseIntArrayElements(resultArray, elements, JNI_ABORT);
48
+ }
49
+ return result;
50
+ };
51
+
52
+ const auto &updateTransition = [jvm](int stackTag, double progress){
53
+ JNIEnv* currentEnv;
54
+ if (jvm->AttachCurrentThread(&currentEnv, nullptr) != JNI_OK) {
55
+ return;
56
+ }
57
+ jclass javaClass = currentEnv->GetObjectClass(globalThis);
58
+ jmethodID methodID = currentEnv->GetMethodID(
59
+ javaClass,
60
+ "updateTransition",
61
+ "(D)V"
62
+ );
63
+ currentEnv->CallVoidMethod(globalThis, methodID, progress);
64
+ };
65
+
66
+ const auto &finishTransition = [jvm](int stackTag, bool canceled){
67
+ JNIEnv* currentEnv;
68
+ if (jvm->AttachCurrentThread(&currentEnv, nullptr) != JNI_OK) {
69
+ return;
70
+ }
71
+ jclass javaClass = currentEnv->GetObjectClass(globalThis);
72
+ jmethodID methodID = currentEnv->GetMethodID(
73
+ javaClass,
74
+ "finishTransition",
75
+ "(Ljava/lang/Integer;Z)V"
76
+ );
77
+ jclass integerClass = currentEnv->FindClass("java/lang/Integer");
78
+ jmethodID integerConstructor = currentEnv->GetMethodID(integerClass, "<init>", "(I)V");
79
+ jobject integerArg = currentEnv->NewObject(integerClass, integerConstructor, stackTag);
80
+ currentEnv->CallVoidMethod(globalThis, methodID, integerArg, canceled);
81
+ };
82
+
83
+ const auto &disableSwipeBackForTopScreen = [](int _stackTag){
84
+ // no implementation for Android
85
+ };
86
+
87
+ auto rnScreensModule = std::make_shared<RNScreens::RNScreensTurboModule>(
88
+ startTransition,
89
+ updateTransition,
90
+ finishTransition,
91
+ disableSwipeBackForTopScreen
92
+ );
93
+ auto rnScreensModuleHostObject = jsi::Object::createFromHostObject(rt, rnScreensModule);
94
+ rt.global().setProperty(
95
+ rt,
96
+ RNScreens::RNScreensTurboModule::MODULE_NAME,
97
+ std::move(rnScreensModuleHostObject)
98
+ );
99
+ }
100
+
101
+ void JNICALL JNI_OnUnload(JavaVM *jvm, void *) {
102
+ JNIEnv *env;
103
+ if (jvm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
104
+ return;
105
+ }
106
+ if (globalThis != nullptr) {
107
+ env->DeleteGlobalRef(globalThis);
108
+ globalThis = nullptr;
109
+ }
110
+ }
@@ -13,17 +13,17 @@ class CustomSearchView(context: Context, fragment: Fragment) : SearchView(contex
13
13
  setOnSearchClickListener - https://developer.android.com/reference/android/widget/SearchView#setOnSearchClickListener(android.view.View.OnClickListener)
14
14
  setOnCloseListener - https://developer.android.com/reference/android/widget/SearchView#setOnCloseListener(android.widget.SearchView.OnCloseListener)
15
15
  */
16
- private var mCustomOnCloseListener: OnCloseListener? = null
17
- private var mCustomOnSearchClickedListener: OnClickListener? = null
16
+ private var onCloseListener: OnCloseListener? = null
17
+ private var onSearchClickedListener: OnClickListener? = null
18
18
 
19
- private var mOnBackPressedCallback: OnBackPressedCallback =
19
+ private var onBackPressedCallback: OnBackPressedCallback =
20
20
  object : OnBackPressedCallback(true) {
21
21
  override fun handleOnBackPressed() {
22
22
  isIconified = true
23
23
  }
24
24
  }
25
25
 
26
- private val backPressOverrider = FragmentBackPressOverrider(fragment, mOnBackPressedCallback)
26
+ private val backPressOverrider = FragmentBackPressOverrider(fragment, onBackPressedCallback)
27
27
 
28
28
  var overrideBackAction: Boolean
29
29
  set(value) {
@@ -40,12 +40,17 @@ class CustomSearchView(context: Context, fragment: Fragment) : SearchView(contex
40
40
 
41
41
  fun setText(text: String) = setQuery(text, false)
42
42
 
43
+ fun cancelSearch() {
44
+ clearText()
45
+ setIconified(true)
46
+ }
47
+
43
48
  override fun setOnCloseListener(listener: OnCloseListener?) {
44
- mCustomOnCloseListener = listener
49
+ onCloseListener = listener
45
50
  }
46
51
 
47
52
  override fun setOnSearchClickListener(listener: OnClickListener?) {
48
- mCustomOnSearchClickedListener = listener
53
+ onSearchClickedListener = listener
49
54
  }
50
55
 
51
56
  override fun onAttachedToWindow() {
@@ -62,12 +67,12 @@ class CustomSearchView(context: Context, fragment: Fragment) : SearchView(contex
62
67
 
63
68
  init {
64
69
  super.setOnSearchClickListener { v ->
65
- mCustomOnSearchClickedListener?.onClick(v)
70
+ onSearchClickedListener?.onClick(v)
66
71
  backPressOverrider.maybeAddBackCallback()
67
72
  }
68
73
 
69
74
  super.setOnCloseListener {
70
- val result = mCustomOnCloseListener?.onClose() ?: false
75
+ val result = onCloseListener?.onClose() ?: false
71
76
  backPressOverrider.removeBackCallbackIfAdded()
72
77
  result
73
78
  }
@@ -5,25 +5,25 @@ import androidx.fragment.app.Fragment
5
5
 
6
6
  class FragmentBackPressOverrider(
7
7
  private val fragment: Fragment,
8
- private val mOnBackPressedCallback: OnBackPressedCallback
8
+ private val onBackPressedCallback: OnBackPressedCallback
9
9
  ) {
10
- private var mIsBackCallbackAdded: Boolean = false
10
+ private var isCallbackAdded: Boolean = false
11
11
  var overrideBackAction: Boolean = true
12
12
 
13
13
  fun maybeAddBackCallback() {
14
- if (!mIsBackCallbackAdded && overrideBackAction) {
14
+ if (!isCallbackAdded && overrideBackAction) {
15
15
  fragment.activity?.onBackPressedDispatcher?.addCallback(
16
16
  fragment,
17
- mOnBackPressedCallback
17
+ onBackPressedCallback
18
18
  )
19
- mIsBackCallbackAdded = true
19
+ isCallbackAdded = true
20
20
  }
21
21
  }
22
22
 
23
23
  fun removeBackCallbackIfAdded() {
24
- if (mIsBackCallbackAdded) {
25
- mOnBackPressedCallback.remove()
26
- mIsBackCallbackAdded = false
24
+ if (isCallbackAdded) {
25
+ onBackPressedCallback.remove()
26
+ isCallbackAdded = false
27
27
  }
28
28
  }
29
29
  }
@@ -0,0 +1,12 @@
1
+ package com.swmansion.rnscreens
2
+
3
+ import com.facebook.react.module.annotations.ReactModule
4
+
5
+ @ReactModule(name = ModalScreenViewManager.REACT_CLASS)
6
+ class ModalScreenViewManager : ScreenViewManager() {
7
+ override fun getName() = REACT_CLASS
8
+
9
+ companion object {
10
+ const val REACT_CLASS = "RNSModalScreen"
11
+ }
12
+ }
@@ -1,21 +1,54 @@
1
1
  package com.swmansion.rnscreens
2
2
 
3
- import com.facebook.react.ReactPackage
3
+ import com.facebook.react.TurboReactPackage
4
4
  import com.facebook.react.bridge.NativeModule
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.annotations.ReactModuleList
7
+ import com.facebook.react.module.model.ReactModuleInfo
8
+ import com.facebook.react.module.model.ReactModuleInfoProvider
6
9
  import com.facebook.react.uimanager.ViewManager
7
10
 
8
- class RNScreensPackage : ReactPackage {
9
- override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> =
10
- emptyList()
11
-
11
+ @ReactModuleList(
12
+ nativeModules = [
13
+ ScreensModule::class
14
+ ]
15
+ )
16
+ class RNScreensPackage : TurboReactPackage() {
12
17
  override fun createViewManagers(reactContext: ReactApplicationContext) =
13
18
  listOf<ViewManager<*, *>>(
14
19
  ScreenContainerViewManager(),
15
20
  ScreenViewManager(),
21
+ ModalScreenViewManager(),
16
22
  ScreenStackViewManager(),
17
23
  ScreenStackHeaderConfigViewManager(),
18
24
  ScreenStackHeaderSubviewManager(),
19
25
  SearchBarManager()
20
26
  )
27
+
28
+ override fun getModule(
29
+ s: String,
30
+ reactApplicationContext: ReactApplicationContext
31
+ ): NativeModule? {
32
+ when (s) {
33
+ ScreensModule.NAME -> return ScreensModule(reactApplicationContext)
34
+ }
35
+ return null
36
+ }
37
+
38
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
39
+ return ReactModuleInfoProvider {
40
+ val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
41
+ val isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
42
+ moduleInfos[ScreensModule.NAME] = ReactModuleInfo(
43
+ ScreensModule.NAME,
44
+ ScreensModule.NAME,
45
+ false, // canOverrideExistingModule
46
+ false, // needsEagerInit
47
+ true, // hasConstants
48
+ false, // isCxxModule
49
+ isTurboModule
50
+ )
51
+ moduleInfos
52
+ }
53
+ }
21
54
  }