react-native-screen-transitions 3.6.0-beta.0 → 3.7.0-alpha.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 (381) hide show
  1. package/README.md +2 -2
  2. package/lib/commonjs/blank-stack/components/stack-view.js +35 -39
  3. package/lib/commonjs/blank-stack/components/stack-view.js.map +1 -1
  4. package/lib/commonjs/blank-stack/navigators/create-blank-stack-navigator.js +7 -14
  5. package/lib/commonjs/blank-stack/navigators/create-blank-stack-navigator.js.map +1 -1
  6. package/lib/commonjs/component-stack/components/stack-view.js +4 -11
  7. package/lib/commonjs/component-stack/components/stack-view.js.map +1 -1
  8. package/lib/commonjs/component-stack/navigators/create-component-stack-navigator.js +1 -1
  9. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +6 -0
  10. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  11. package/lib/commonjs/shared/adapters/with-screen-transitions/context.js +28 -0
  12. package/lib/commonjs/shared/adapters/with-screen-transitions/context.js.map +1 -0
  13. package/lib/commonjs/shared/adapters/with-screen-transitions/index.js +75 -0
  14. package/lib/commonjs/shared/adapters/with-screen-transitions/index.js.map +1 -0
  15. package/lib/commonjs/shared/adapters/with-screen-transitions/options.js +103 -0
  16. package/lib/commonjs/shared/adapters/with-screen-transitions/options.js.map +1 -0
  17. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js +143 -0
  18. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -0
  19. package/lib/commonjs/shared/adapters/with-screen-transitions/types.js +6 -0
  20. package/lib/commonjs/shared/adapters/with-screen-transitions/types.js.map +1 -0
  21. package/lib/commonjs/shared/components/activity/helpers.js +9 -0
  22. package/lib/commonjs/shared/components/activity/helpers.js.map +1 -0
  23. package/lib/commonjs/shared/components/activity/index.js +20 -0
  24. package/lib/commonjs/shared/components/activity/index.js.map +1 -0
  25. package/lib/commonjs/shared/components/activity/variants/activity-container.js +29 -0
  26. package/lib/commonjs/shared/components/activity/variants/activity-container.js.map +1 -0
  27. package/lib/commonjs/shared/components/activity/variants/activity-screen.js +107 -0
  28. package/lib/commonjs/shared/components/activity/variants/activity-screen.js.map +1 -0
  29. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-measurer.js +10 -4
  30. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-measurer.js.map +1 -1
  31. package/lib/commonjs/shared/components/create-boundary-component/utils/measured-bounds.js +13 -1
  32. package/lib/commonjs/shared/components/create-boundary-component/utils/measured-bounds.js.map +1 -1
  33. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -17
  34. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  35. package/lib/commonjs/shared/components/screen-lifecycle/index.js +1 -1
  36. package/lib/commonjs/shared/components/screen-lifecycle/index.js.map +1 -1
  37. package/lib/commonjs/shared/hooks/navigation/use-navigation-helpers.js +10 -4
  38. package/lib/commonjs/shared/hooks/navigation/use-navigation-helpers.js.map +1 -1
  39. package/lib/commonjs/shared/hooks/navigation/use-stack.js +63 -6
  40. package/lib/commonjs/shared/hooks/navigation/use-stack.js.map +1 -1
  41. package/lib/commonjs/shared/index.js +8 -0
  42. package/lib/commonjs/shared/index.js.map +1 -1
  43. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js +18 -29
  44. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  45. package/lib/commonjs/shared/providers/screen/descriptors/index.js +6 -0
  46. package/lib/commonjs/shared/providers/screen/descriptors/index.js.map +1 -1
  47. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js +2 -1
  48. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  49. package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +1 -1
  50. package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
  51. package/lib/commonjs/shared/providers/screen/gestures/pan/pan-lifecycle.js +4 -1
  52. package/lib/commonjs/shared/providers/screen/gestures/pan/pan-lifecycle.js.map +1 -1
  53. package/lib/commonjs/shared/providers/screen/gestures/pan/use-pan-behavior.js +4 -3
  54. package/lib/commonjs/shared/providers/screen/gestures/pan/use-pan-behavior.js.map +1 -1
  55. package/lib/commonjs/shared/providers/screen/gestures/pinch/pinch-lifecycle.js +4 -1
  56. package/lib/commonjs/shared/providers/screen/gestures/pinch/pinch-lifecycle.js.map +1 -1
  57. package/lib/commonjs/shared/providers/screen/gestures/pinch/use-pinch-behavior.js +4 -3
  58. package/lib/commonjs/shared/providers/screen/gestures/pinch/use-pinch-behavior.js.map +1 -1
  59. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +16 -1
  60. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  61. package/lib/commonjs/shared/providers/stack/direct.provider.js +4 -3
  62. package/lib/commonjs/shared/providers/stack/direct.provider.js.map +1 -1
  63. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +199 -0
  64. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -0
  65. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js +62 -0
  66. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js.map +1 -0
  67. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js +81 -0
  68. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js.map +1 -0
  69. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js +123 -0
  70. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js.map +1 -0
  71. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/types.js +6 -0
  72. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/types.js.map +1 -0
  73. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/index.js +24 -0
  74. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/index.js.map +1 -0
  75. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js +131 -0
  76. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js.map +1 -0
  77. package/lib/commonjs/shared/providers/stack/managed.provider.js +18 -29
  78. package/lib/commonjs/shared/providers/stack/managed.provider.js.map +1 -1
  79. package/lib/commonjs/shared/types/stack.types.js.map +1 -1
  80. package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js +47 -50
  81. package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
  82. package/lib/commonjs/shared/utils/bounds/navigation/zoom/config.js +1 -1
  83. package/lib/commonjs/shared/utils/create-provider.js +99 -10
  84. package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
  85. package/lib/commonjs/shared/utils/navigation/resolve-scene-neighbors.js +8 -5
  86. package/lib/commonjs/shared/utils/navigation/resolve-scene-neighbors.js.map +1 -1
  87. package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js +23 -6
  88. package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
  89. package/lib/commonjs/shared/utils/visibility-block-offset.js +13 -0
  90. package/lib/commonjs/shared/utils/visibility-block-offset.js.map +1 -0
  91. package/lib/module/blank-stack/components/stack-view.js +36 -40
  92. package/lib/module/blank-stack/components/stack-view.js.map +1 -1
  93. package/lib/module/blank-stack/navigators/create-blank-stack-navigator.js +7 -14
  94. package/lib/module/blank-stack/navigators/create-blank-stack-navigator.js.map +1 -1
  95. package/lib/module/component-stack/components/stack-view.js +4 -11
  96. package/lib/module/component-stack/components/stack-view.js.map +1 -1
  97. package/lib/module/component-stack/navigators/create-component-stack-navigator.js +1 -1
  98. package/lib/module/native-stack/navigators/createNativeStackNavigator.js +6 -0
  99. package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  100. package/lib/module/shared/adapters/with-screen-transitions/context.js +23 -0
  101. package/lib/module/shared/adapters/with-screen-transitions/context.js.map +1 -0
  102. package/lib/module/shared/adapters/with-screen-transitions/index.js +66 -0
  103. package/lib/module/shared/adapters/with-screen-transitions/index.js.map +1 -0
  104. package/lib/module/shared/adapters/with-screen-transitions/options.js +98 -0
  105. package/lib/module/shared/adapters/with-screen-transitions/options.js.map +1 -0
  106. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js +138 -0
  107. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -0
  108. package/lib/module/shared/adapters/with-screen-transitions/types.js +4 -0
  109. package/lib/module/shared/adapters/with-screen-transitions/types.js.map +1 -0
  110. package/lib/module/shared/components/activity/helpers.js +5 -0
  111. package/lib/module/shared/components/activity/helpers.js.map +1 -0
  112. package/lib/module/shared/components/activity/index.js +5 -0
  113. package/lib/module/shared/components/activity/index.js.map +1 -0
  114. package/lib/module/shared/components/activity/variants/activity-container.js +24 -0
  115. package/lib/module/shared/components/activity/variants/activity-container.js.map +1 -0
  116. package/lib/module/shared/components/activity/variants/activity-screen.js +103 -0
  117. package/lib/module/shared/components/activity/variants/activity-screen.js.map +1 -0
  118. package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js +11 -5
  119. package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js.map +1 -1
  120. package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js +11 -0
  121. package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js.map +1 -1
  122. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -17
  123. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  124. package/lib/module/shared/components/screen-lifecycle/index.js +1 -1
  125. package/lib/module/shared/components/screen-lifecycle/index.js.map +1 -1
  126. package/lib/module/shared/hooks/navigation/use-navigation-helpers.js +11 -5
  127. package/lib/module/shared/hooks/navigation/use-navigation-helpers.js.map +1 -1
  128. package/lib/module/shared/hooks/navigation/use-stack.js +63 -6
  129. package/lib/module/shared/hooks/navigation/use-stack.js.map +1 -1
  130. package/lib/module/shared/index.js +3 -0
  131. package/lib/module/shared/index.js.map +1 -1
  132. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js +17 -29
  133. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  134. package/lib/module/shared/providers/screen/descriptors/index.js +1 -1
  135. package/lib/module/shared/providers/screen/descriptors/index.js.map +1 -1
  136. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js +2 -1
  137. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  138. package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +2 -2
  139. package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
  140. package/lib/module/shared/providers/screen/gestures/pan/pan-lifecycle.js +5 -2
  141. package/lib/module/shared/providers/screen/gestures/pan/pan-lifecycle.js.map +1 -1
  142. package/lib/module/shared/providers/screen/gestures/pan/use-pan-behavior.js +4 -3
  143. package/lib/module/shared/providers/screen/gestures/pan/use-pan-behavior.js.map +1 -1
  144. package/lib/module/shared/providers/screen/gestures/pinch/pinch-lifecycle.js +5 -2
  145. package/lib/module/shared/providers/screen/gestures/pinch/pinch-lifecycle.js.map +1 -1
  146. package/lib/module/shared/providers/screen/gestures/pinch/use-pinch-behavior.js +4 -3
  147. package/lib/module/shared/providers/screen/gestures/pinch/use-pinch-behavior.js.map +1 -1
  148. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +16 -1
  149. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  150. package/lib/module/shared/providers/stack/direct.provider.js +5 -4
  151. package/lib/module/shared/providers/stack/direct.provider.js.map +1 -1
  152. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +194 -0
  153. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -0
  154. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js +57 -0
  155. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js.map +1 -0
  156. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js +69 -0
  157. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js.map +1 -0
  158. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js +118 -0
  159. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js.map +1 -0
  160. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/types.js +4 -0
  161. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/types.js.map +1 -0
  162. package/lib/module/shared/providers/stack/helpers/managed-stack-state/index.js +19 -0
  163. package/lib/module/shared/providers/stack/helpers/managed-stack-state/index.js.map +1 -0
  164. package/lib/module/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js +126 -0
  165. package/lib/module/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js.map +1 -0
  166. package/lib/module/shared/providers/stack/managed.provider.js +19 -30
  167. package/lib/module/shared/providers/stack/managed.provider.js.map +1 -1
  168. package/lib/module/shared/types/stack.types.js.map +1 -1
  169. package/lib/module/shared/utils/bounds/navigation/zoom/build.js +45 -48
  170. package/lib/module/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
  171. package/lib/module/shared/utils/bounds/navigation/zoom/config.js +1 -1
  172. package/lib/module/shared/utils/create-provider.js +100 -11
  173. package/lib/module/shared/utils/create-provider.js.map +1 -1
  174. package/lib/module/shared/utils/navigation/resolve-scene-neighbors.js +8 -5
  175. package/lib/module/shared/utils/navigation/resolve-scene-neighbors.js.map +1 -1
  176. package/lib/module/shared/utils/navigation/sync-routes-with-removed.js +23 -6
  177. package/lib/module/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
  178. package/lib/module/shared/utils/visibility-block-offset.js +8 -0
  179. package/lib/module/shared/utils/visibility-block-offset.js.map +1 -0
  180. package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
  181. package/lib/typescript/blank-stack/index.d.ts +1 -1
  182. package/lib/typescript/blank-stack/index.d.ts.map +1 -1
  183. package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts +4 -6
  184. package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts.map +1 -1
  185. package/lib/typescript/blank-stack/types.d.ts +41 -29
  186. package/lib/typescript/blank-stack/types.d.ts.map +1 -1
  187. package/lib/typescript/component-stack/components/stack-view.d.ts.map +1 -1
  188. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts +1 -1
  189. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +5 -0
  190. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -1
  191. package/lib/typescript/native-stack/types.d.ts +25 -0
  192. package/lib/typescript/native-stack/types.d.ts.map +1 -1
  193. package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts +15 -0
  194. package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts.map +1 -0
  195. package/lib/typescript/shared/adapters/with-screen-transitions/index.d.ts +11 -0
  196. package/lib/typescript/shared/adapters/with-screen-transitions/index.d.ts.map +1 -0
  197. package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts +16 -0
  198. package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts.map +1 -0
  199. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts +12 -0
  200. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -0
  201. package/lib/typescript/shared/adapters/with-screen-transitions/types.d.ts +24 -0
  202. package/lib/typescript/shared/adapters/with-screen-transitions/types.d.ts.map +1 -0
  203. package/lib/typescript/shared/components/activity/helpers.d.ts +4 -0
  204. package/lib/typescript/shared/components/activity/helpers.d.ts.map +1 -0
  205. package/lib/typescript/shared/components/activity/index.d.ts +3 -0
  206. package/lib/typescript/shared/components/activity/index.d.ts.map +1 -0
  207. package/lib/typescript/shared/components/activity/variants/activity-container.d.ts +6 -0
  208. package/lib/typescript/shared/components/activity/variants/activity-container.d.ts.map +1 -0
  209. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts +13 -0
  210. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -0
  211. package/lib/typescript/shared/components/create-boundary-component/hooks/use-measurer.d.ts.map +1 -1
  212. package/lib/typescript/shared/components/create-boundary-component/index.d.ts +2 -2
  213. package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts +1 -0
  214. package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts.map +1 -1
  215. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts +1 -2
  216. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts.map +1 -1
  217. package/lib/typescript/shared/hooks/navigation/use-navigation-helpers.d.ts +1 -0
  218. package/lib/typescript/shared/hooks/navigation/use-navigation-helpers.d.ts.map +1 -1
  219. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +13 -1
  220. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
  221. package/lib/typescript/shared/index.d.ts +15 -11
  222. package/lib/typescript/shared/index.d.ts.map +1 -1
  223. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts +11 -3
  224. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  225. package/lib/typescript/shared/providers/screen/descriptors/index.d.ts +1 -1
  226. package/lib/typescript/shared/providers/screen/descriptors/index.d.ts.map +1 -1
  227. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +1 -1
  228. package/lib/typescript/shared/providers/screen/gestures/pan/pan-lifecycle.d.ts +1 -1
  229. package/lib/typescript/shared/providers/screen/gestures/pan/pan-lifecycle.d.ts.map +1 -1
  230. package/lib/typescript/shared/providers/screen/gestures/pan/use-pan-behavior.d.ts.map +1 -1
  231. package/lib/typescript/shared/providers/screen/gestures/pinch/pinch-lifecycle.d.ts +1 -1
  232. package/lib/typescript/shared/providers/screen/gestures/pinch/pinch-lifecycle.d.ts.map +1 -1
  233. package/lib/typescript/shared/providers/screen/gestures/pinch/use-pinch-behavior.d.ts.map +1 -1
  234. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +3 -1
  235. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
  236. package/lib/typescript/shared/providers/stack/direct.provider.d.ts.map +1 -1
  237. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts +13 -0
  238. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts.map +1 -0
  239. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.d.ts +12 -0
  240. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.d.ts.map +1 -0
  241. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.d.ts +11 -0
  242. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.d.ts.map +1 -0
  243. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.d.ts +12 -0
  244. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.d.ts.map +1 -0
  245. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts +40 -0
  246. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts.map +1 -0
  247. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/index.d.ts +12 -0
  248. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/index.d.ts.map +1 -0
  249. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.d.ts +13 -0
  250. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.d.ts.map +1 -0
  251. package/lib/typescript/shared/providers/stack/managed.provider.d.ts.map +1 -1
  252. package/lib/typescript/shared/types/bounds.types.d.ts +27 -0
  253. package/lib/typescript/shared/types/bounds.types.d.ts.map +1 -1
  254. package/lib/typescript/shared/types/index.d.ts +2 -2
  255. package/lib/typescript/shared/types/index.d.ts.map +1 -1
  256. package/lib/typescript/shared/types/providers/managed-stack.types.d.ts +3 -9
  257. package/lib/typescript/shared/types/providers/managed-stack.types.d.ts.map +1 -1
  258. package/lib/typescript/shared/types/screen.types.d.ts +24 -0
  259. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  260. package/lib/typescript/shared/types/stack.types.d.ts +7 -0
  261. package/lib/typescript/shared/types/stack.types.d.ts.map +1 -1
  262. package/lib/typescript/shared/utils/bounds/navigation/zoom/build.d.ts.map +1 -1
  263. package/lib/typescript/shared/utils/bounds/navigation/zoom/config.d.ts +1 -1
  264. package/lib/typescript/shared/utils/create-provider.d.ts +17 -3
  265. package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
  266. package/lib/typescript/shared/utils/navigation/resolve-scene-neighbors.d.ts +2 -1
  267. package/lib/typescript/shared/utils/navigation/resolve-scene-neighbors.d.ts.map +1 -1
  268. package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts +2 -1
  269. package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts.map +1 -1
  270. package/lib/typescript/shared/utils/visibility-block-offset.d.ts +2 -0
  271. package/lib/typescript/shared/utils/visibility-block-offset.d.ts.map +1 -0
  272. package/package.json +11 -1
  273. package/src/blank-stack/components/stack-view.tsx +54 -48
  274. package/src/blank-stack/index.ts +1 -0
  275. package/src/blank-stack/navigators/create-blank-stack-navigator.tsx +7 -15
  276. package/src/blank-stack/types.ts +44 -29
  277. package/src/component-stack/components/stack-view.tsx +4 -11
  278. package/src/component-stack/navigators/create-component-stack-navigator.tsx +1 -1
  279. package/src/native-stack/navigators/createNativeStackNavigator.tsx +5 -0
  280. package/src/native-stack/types.ts +25 -0
  281. package/src/shared/adapters/with-screen-transitions/context.tsx +42 -0
  282. package/src/shared/adapters/with-screen-transitions/index.tsx +155 -0
  283. package/src/shared/adapters/with-screen-transitions/options.ts +172 -0
  284. package/src/shared/adapters/with-screen-transitions/stack-layout.tsx +233 -0
  285. package/src/shared/adapters/with-screen-transitions/types.ts +28 -0
  286. package/src/shared/components/activity/helpers.ts +8 -0
  287. package/src/shared/components/activity/index.tsx +2 -0
  288. package/src/shared/components/activity/variants/activity-container.tsx +25 -0
  289. package/src/shared/components/activity/variants/activity-screen.tsx +133 -0
  290. package/src/shared/components/create-boundary-component/hooks/use-measurer.ts +23 -4
  291. package/src/shared/components/create-boundary-component/utils/measured-bounds.ts +15 -0
  292. package/src/shared/components/screen-lifecycle/hooks/use-close-transition-intent.ts +9 -26
  293. package/src/shared/components/screen-lifecycle/index.tsx +1 -1
  294. package/src/shared/hooks/navigation/use-navigation-helpers.ts +9 -3
  295. package/src/shared/hooks/navigation/use-stack.tsx +115 -6
  296. package/src/shared/index.ts +9 -0
  297. package/src/shared/providers/screen/descriptors/descriptors.provider.tsx +31 -31
  298. package/src/shared/providers/screen/descriptors/index.tsx +1 -0
  299. package/src/shared/providers/screen/gestures/ownership/resolve-ownership.ts +2 -1
  300. package/src/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.ts +2 -2
  301. package/src/shared/providers/screen/gestures/pan/pan-lifecycle.ts +7 -2
  302. package/src/shared/providers/screen/gestures/pan/use-pan-behavior.ts +10 -2
  303. package/src/shared/providers/screen/gestures/pinch/pinch-lifecycle.ts +7 -2
  304. package/src/shared/providers/screen/gestures/pinch/use-pinch-behavior.ts +8 -3
  305. package/src/shared/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +17 -1
  306. package/src/shared/providers/stack/direct.provider.tsx +13 -4
  307. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.ts +368 -0
  308. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.ts +129 -0
  309. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.ts +139 -0
  310. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.ts +198 -0
  311. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/types.ts +57 -0
  312. package/src/shared/providers/stack/helpers/managed-stack-state/index.ts +40 -0
  313. package/src/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.ts +160 -0
  314. package/src/shared/providers/stack/managed.provider.tsx +23 -39
  315. package/src/shared/types/bounds.types.ts +27 -0
  316. package/src/shared/types/index.ts +3 -0
  317. package/src/shared/types/providers/managed-stack.types.ts +6 -8
  318. package/src/shared/types/screen.types.ts +25 -0
  319. package/src/shared/types/stack.types.ts +11 -0
  320. package/src/shared/utils/bounds/navigation/zoom/build.ts +62 -71
  321. package/src/shared/utils/bounds/navigation/zoom/config.ts +1 -1
  322. package/src/shared/utils/create-provider.tsx +183 -8
  323. package/src/shared/utils/navigation/resolve-scene-neighbors.ts +9 -4
  324. package/src/shared/utils/navigation/sync-routes-with-removed.ts +38 -7
  325. package/src/shared/utils/visibility-block-offset.ts +4 -0
  326. package/lib/commonjs/blank-stack/components/stack-view.native.js +0 -64
  327. package/lib/commonjs/blank-stack/components/stack-view.native.js.map +0 -1
  328. package/lib/commonjs/shared/components/native-screen-container.js +0 -42
  329. package/lib/commonjs/shared/components/native-screen-container.js.map +0 -1
  330. package/lib/commonjs/shared/components/native-screen.js +0 -125
  331. package/lib/commonjs/shared/components/native-screen.js.map +0 -1
  332. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js +0 -51
  333. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js.map +0 -1
  334. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js +0 -15
  335. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js.map +0 -1
  336. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js +0 -14
  337. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js.map +0 -1
  338. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js +0 -13
  339. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js.map +0 -1
  340. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/index.js +0 -101
  341. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/index.js.map +0 -1
  342. package/lib/module/blank-stack/components/stack-view.native.js +0 -60
  343. package/lib/module/blank-stack/components/stack-view.native.js.map +0 -1
  344. package/lib/module/shared/components/native-screen-container.js +0 -37
  345. package/lib/module/shared/components/native-screen-container.js.map +0 -1
  346. package/lib/module/shared/components/native-screen.js +0 -119
  347. package/lib/module/shared/components/native-screen.js.map +0 -1
  348. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js +0 -47
  349. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js.map +0 -1
  350. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js +0 -10
  351. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js.map +0 -1
  352. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js +0 -9
  353. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js.map +0 -1
  354. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js +0 -8
  355. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js.map +0 -1
  356. package/lib/module/shared/providers/stack/helpers/use-local-routes/index.js +0 -95
  357. package/lib/module/shared/providers/stack/helpers/use-local-routes/index.js.map +0 -1
  358. package/lib/typescript/blank-stack/components/stack-view.native.d.ts +0 -3
  359. package/lib/typescript/blank-stack/components/stack-view.native.d.ts.map +0 -1
  360. package/lib/typescript/shared/components/native-screen-container.d.ts +0 -6
  361. package/lib/typescript/shared/components/native-screen-container.d.ts.map +0 -1
  362. package/lib/typescript/shared/components/native-screen.d.ts +0 -12
  363. package/lib/typescript/shared/components/native-screen.d.ts.map +0 -1
  364. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.d.ts +0 -10
  365. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.d.ts.map +0 -1
  366. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.d.ts +0 -2
  367. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.d.ts.map +0 -1
  368. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.d.ts +0 -3
  369. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.d.ts.map +0 -1
  370. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.d.ts +0 -3
  371. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.d.ts.map +0 -1
  372. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/index.d.ts +0 -19
  373. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/index.d.ts.map +0 -1
  374. package/src/blank-stack/components/stack-view.native.tsx +0 -74
  375. package/src/shared/components/native-screen-container.tsx +0 -33
  376. package/src/shared/components/native-screen.tsx +0 -176
  377. package/src/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.ts +0 -65
  378. package/src/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.ts +0 -15
  379. package/src/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.ts +0 -12
  380. package/src/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.ts +0 -11
  381. package/src/shared/providers/stack/helpers/use-local-routes/index.ts +0 -147
@@ -1,72 +1,78 @@
1
- import { Fragment } from "react";
2
- import { NativeScreen } from "../../shared/components/native-screen";
3
- import { NativeScreenContainer } from "../../shared/components/native-screen-container";
1
+ import {
2
+ NavigationContext,
3
+ NavigationRouteContext,
4
+ } from "@react-navigation/native";
5
+ import { Fragment, memo } from "react";
6
+ import {
7
+ ActivityContainer,
8
+ ActivityScreen,
9
+ } from "../../shared/components/activity";
4
10
  import { Overlay } from "../../shared/components/overlay";
5
- import { SceneView } from "../../shared/components/scene-view";
6
11
  import { ScreenComposer } from "../../shared/providers/screen/screen-composer";
7
12
  import { withStackCore } from "../../shared/providers/stack/core.provider";
8
13
  import { withManagedStack } from "../../shared/providers/stack/managed.provider";
9
- import { resolveSceneNeighbors } from "../../shared/utils/navigation/resolve-scene-neighbors";
10
- import { isFabric } from "../../shared/utils/platform";
14
+ import type { BaseStackScene } from "../../shared/types/stack.types";
11
15
  import type {
12
16
  BlankStackDescriptor,
13
17
  BlankStackNavigationHelpers,
14
18
  } from "../types";
15
19
 
20
+ interface BlankSceneRowProps {
21
+ scene: BaseStackScene<BlankStackDescriptor>;
22
+ paintDriverRouteKey?: string;
23
+ }
24
+
25
+ const BlankSceneRow = memo(function BlankSceneRow({
26
+ scene,
27
+ paintDriverRouteKey,
28
+ }: BlankSceneRowProps) {
29
+ const descriptor = scene.descriptor;
30
+ const route = scene.route;
31
+
32
+ return (
33
+ <NavigationContext.Provider value={descriptor.navigation}>
34
+ <NavigationRouteContext.Provider value={route}>
35
+ <ActivityScreen
36
+ activity={descriptor.activity}
37
+ inactiveBehavior={descriptor.options.inactiveBehavior}
38
+ paintDriverRouteKey={paintDriverRouteKey}
39
+ hasNestedState={"state" in route}
40
+ >
41
+ <ScreenComposer
42
+ previous={scene.previousDescriptor}
43
+ current={descriptor}
44
+ next={scene.nextDescriptor}
45
+ >
46
+ {descriptor.render?.()}
47
+ </ScreenComposer>
48
+ </ActivityScreen>
49
+ </NavigationRouteContext.Provider>
50
+ </NavigationContext.Provider>
51
+ );
52
+ });
53
+
16
54
  export const StackView = withStackCore(
17
- { TRANSITIONS_ALWAYS_ON: true, DISABLE_NATIVE_SCREENS: true },
55
+ { TRANSITIONS_ALWAYS_ON: true, DISABLE_NATIVE_SCREENS: false },
18
56
  withManagedStack<BlankStackDescriptor, BlankStackNavigationHelpers>(
19
- ({
20
- descriptors,
21
- focusedIndex,
22
- scenes,
23
- shouldShowFloatOverlay,
24
- closingRouteMap,
25
- }) => {
26
- const isRouteClosing = (routeKey: string) =>
27
- Boolean(closingRouteMap.current[routeKey]);
28
-
57
+ ({ scenes, shouldShowFloatOverlay }) => {
29
58
  return (
30
59
  <Fragment>
31
60
  {shouldShowFloatOverlay ? <Overlay.Float /> : null}
32
61
 
33
- <NativeScreenContainer>
34
- {scenes.map((scene, sceneIndex) => {
35
- const descriptor = scene.descriptor;
62
+ <ActivityContainer>
63
+ {scenes.map((scene, index) => {
36
64
  const route = scene.route;
37
- const isFocused = focusedIndex === sceneIndex;
38
- const isBelowFocused = focusedIndex - 1 === sceneIndex;
39
-
40
- const { previousDescriptor, nextDescriptor } =
41
- resolveSceneNeighbors(scenes, sceneIndex, isRouteClosing);
42
-
43
- const isPreloaded = descriptors[route.key] === undefined;
65
+ const paintDriverRouteKey = scenes[index + 2]?.route.key;
44
66
 
45
- // On Fabric, when screen is frozen, animated and reanimated values are not updated
46
- // due to component being unmounted. To avoid this, we don't freeze the previous screen there
47
- const shouldFreeze = isFabric()
48
- ? !isPreloaded && !isFocused && !isBelowFocused
49
- : !isPreloaded && !isFocused;
50
67
  return (
51
- <NativeScreen
68
+ <BlankSceneRow
52
69
  key={route.key}
53
- isPreloaded={isPreloaded}
54
- index={sceneIndex}
55
- routeKey={route.key}
56
- shouldFreeze={shouldFreeze}
57
- freezeOnBlur={descriptor.options.freezeOnBlur}
58
- >
59
- <ScreenComposer
60
- previous={previousDescriptor}
61
- current={descriptor}
62
- next={nextDescriptor}
63
- >
64
- <SceneView key={route.key} descriptor={descriptor} />
65
- </ScreenComposer>
66
- </NativeScreen>
70
+ scene={scene}
71
+ paintDriverRouteKey={paintDriverRouteKey}
72
+ />
67
73
  );
68
74
  })}
69
- </NativeScreenContainer>
75
+ </ActivityContainer>
70
76
  </Fragment>
71
77
  );
72
78
  },
@@ -8,4 +8,5 @@ export type {
8
8
  BlankStackOptionsArgs,
9
9
  BlankStackOverlayProps,
10
10
  BlankStackScreenProps,
11
+ InactiveBehavior,
11
12
  } from "../blank-stack/types";
@@ -28,7 +28,6 @@ type BlankStackNavigatorInnerProps = Omit<
28
28
  keyof BlankStackFactoryOptions
29
29
  > & {
30
30
  DISABLE_NATIVE_SCREENS?: boolean;
31
- DISABLE_NATIVE_SCREEN_CONTAINER?: boolean;
32
31
  };
33
32
 
34
33
  const BlankStackContext = React.createContext<boolean>(false);
@@ -42,8 +41,6 @@ function BlankStackNavigatorInner({
42
41
  screenListeners,
43
42
  screenOptions,
44
43
  screenLayout,
45
- DISABLE_NATIVE_SCREENS,
46
- DISABLE_NATIVE_SCREEN_CONTAINER,
47
44
  ...rest
48
45
  }: BlankStackNavigatorInnerProps) {
49
46
  const { state, describe, descriptors, navigation, NavigationContent } =
@@ -69,8 +66,6 @@ function BlankStackNavigatorInner({
69
66
  <NavigationContent>
70
67
  <StackView
71
68
  {...rest}
72
- DISABLE_NATIVE_SCREENS={DISABLE_NATIVE_SCREENS}
73
- DISABLE_NATIVE_SCREEN_CONTAINER={DISABLE_NATIVE_SCREEN_CONTAINER}
74
69
  state={state}
75
70
  navigation={navigation}
76
71
  descriptors={descriptors}
@@ -81,19 +76,18 @@ function BlankStackNavigatorInner({
81
76
  }
82
77
 
83
78
  function BlankStackNavigator({
79
+ enableNativeScreens,
84
80
  independent = false,
85
- enableNativeScreens = true,
81
+ nativeScreens,
86
82
  ...rest
87
83
  }: BlankStackNavigatorProps) {
88
84
  const isNested = React.useContext(BlankStackContext);
85
+ const nativeScreensEnabled = nativeScreens ?? enableNativeScreens ?? true;
89
86
 
90
87
  const navigator = (
91
88
  <BlankStackNavigatorInner
92
89
  {...rest}
93
- {...(!enableNativeScreens && {
94
- DISABLE_NATIVE_SCREENS: true,
95
- })}
96
- DISABLE_NATIVE_SCREEN_CONTAINER={independent}
90
+ DISABLE_NATIVE_SCREENS={!nativeScreensEnabled}
97
91
  />
98
92
  );
99
93
 
@@ -137,14 +131,12 @@ type BlankStackTypeBag<
137
131
  * Creates a blank stack navigator with gesture-driven transitions.
138
132
  *
139
133
  * By default, blank stack behaves like the existing top-level blank stack:
140
- * it participates in the current navigation tree and uses native screen
141
- * primitives on supported native platforms.
134
+ * it participates in the current navigation tree and renders screens with
135
+ * react-native-screens.
142
136
  *
143
137
  * Blank stack also accepts navigator-specific props for embedded-flow behavior:
138
+ * - `nativeScreens: false` renders blank-stack screens as regular React Native views
144
139
  * - `independent: true` creates an isolated navigator for nested flows
145
- * - `enableNativeScreens: false` renders the stack with regular views instead
146
- * of `react-native-screens`
147
- *
148
140
  * In the dynamic API, pass these to `<Stack.Navigator />`.
149
141
  * In the static API, pass them in the same config object as `screens`.
150
142
  */
@@ -10,8 +10,11 @@ import type {
10
10
  StackRouterOptions,
11
11
  Theme,
12
12
  } from "@react-navigation/native";
13
- import type { ScreenTransitionConfig } from "../shared";
13
+ import type { InactiveBehavior, ScreenTransitionConfig } from "../shared";
14
14
  import type { OverlayProps } from "../shared/types/overlay.types";
15
+ import type { StackSceneActivity } from "../shared/types/stack.types";
16
+
17
+ export type { InactiveBehavior } from "../shared";
15
18
 
16
19
  export type BlankStackNavigationEventMap = {};
17
20
 
@@ -60,6 +63,24 @@ export type BlankStackNavigationHelpers = NavigationHelpers<
60
63
  * The exported name is kept for backward compatibility.
61
64
  */
62
65
  export interface BlankStackFactoryOptions {
66
+ /**
67
+ * Controls whether blank-stack screens are rendered with react-native-screens.
68
+ *
69
+ * When enabled, inactive presentation state is backed by
70
+ * `ScreenContainer`/`Screen.activityState`. Set this to `false` to render
71
+ * screens as regular React Native views.
72
+ *
73
+ * @default true
74
+ */
75
+ nativeScreens?: boolean;
76
+
77
+ /**
78
+ * Enables react-native-screens for blank-stack screen retention.
79
+ *
80
+ * @deprecated Use `nativeScreens` instead.
81
+ */
82
+ enableNativeScreens?: boolean;
83
+
63
84
  /**
64
85
  * Creates an isolated navigation tree for embedded flows.
65
86
  *
@@ -68,22 +89,10 @@ export interface BlankStackFactoryOptions {
68
89
  *
69
90
  * When enabled, the navigator:
70
91
  * - wraps itself in `NavigationIndependentTree` + `NavigationContainer`
71
- * - skips the shared native `ScreenContainer`
72
92
  *
73
93
  * Leave this disabled for normal top-level app stacks.
74
94
  */
75
95
  independent?: boolean;
76
- /**
77
- * Enables native screen primitives on supported native platforms.
78
- *
79
- * Use this when you want the embedded blank stack to keep `react-native-screens`
80
- * behavior such as native activity state and freezing.
81
- *
82
- * Set this to `false` when you want the blank stack to render with regular
83
- * views instead of native screen primitives. This is useful for embedded
84
- * flows where plain views are a better fit than native screen layering.
85
- */
86
- enableNativeScreens?: boolean;
87
96
  }
88
97
 
89
98
  /**
@@ -94,24 +103,28 @@ export type BlankStackOverlayProps = OverlayProps<
94
103
  BlankStackNavigationProp<ParamListBase>
95
104
  >;
96
105
 
97
- type BlankStackScreenTransitionConfig = ScreenTransitionConfig & {
98
- /**
99
- * Whether to detach the previous screen from the view hierarchy to save memory.
100
- * Set it to `false` if you need the previous screen to be seen through the active screen.
101
- * Only applicable if `detachInactiveScreens` isn't set to `false`.
102
- */
103
- detachPreviousScreen?: boolean;
104
- };
105
-
106
- export type BlankStackNavigationOptions = BlankStackScreenTransitionConfig & {
106
+ export type BlankStackNavigationOptions = ScreenTransitionConfig & {
107
107
  /**
108
- * Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
109
- * Defaults to `true` when `enableFreeze()` is run at the top of the application.
110
- * Requires `react-native-screens` version >=3.16.0.
108
+ * Controls how inactive blank-stack screens are retained after they are no
109
+ * longer active.
110
+ *
111
+ * For a stack shaped as A(inactive), B(inert), C(active):
112
+ *
113
+ * - `keep`: keeps A mounted, attached, visible, and non-interactive.
114
+ * - `freeze`: keeps A's last painted UI visible and asks the platform to
115
+ * stop or suspend inactive work where possible.
116
+ * - `detach`: removes A from native/view presentation after the screen that
117
+ * exposes it has safely painted.
118
+ * - `unmount`: removes A's React subtree after safe paint when the route has
119
+ * no nested navigation state.
111
120
  *
112
- * Only supported on iOS and Android.
121
+ * On web, or when native screens are disabled, `keep`, `freeze`, and
122
+ * `detach` currently have no meaningful retention effect. This will change
123
+ * once the implementation can use React 19.2's Activity component.
124
+ *
125
+ * @default "detach" on native, "unmount" on web
113
126
  */
114
- freezeOnBlur?: boolean;
127
+ inactiveBehavior?: InactiveBehavior;
115
128
  };
116
129
 
117
130
  export type BlankStackNavigatorProps = DefaultNavigatorOptions<
@@ -129,4 +142,6 @@ export type BlankStackDescriptor = Descriptor<
129
142
  BlankStackNavigationOptions,
130
143
  BlankStackNavigationProp<ParamListBase>,
131
144
  RouteProp<ParamListBase>
132
- >;
145
+ > & {
146
+ activity: StackSceneActivity;
147
+ };
@@ -5,7 +5,6 @@ import { ScreenComposer } from "../../shared/providers/screen/screen-composer";
5
5
  import { withStackCore } from "../../shared/providers/stack/core.provider";
6
6
  import { withManagedStack } from "../../shared/providers/stack/managed.provider";
7
7
  import { StackType } from "../../shared/types/stack.types";
8
- import { resolveSceneNeighbors } from "../../shared/utils/navigation/resolve-scene-neighbors";
9
8
  import type {
10
9
  ComponentStackDescriptor,
11
10
  ComponentStackNavigationHelpers,
@@ -15,27 +14,21 @@ import { ComponentScreen } from "./component-screen";
15
14
  export const StackView = withStackCore(
16
15
  { TRANSITIONS_ALWAYS_ON: true, STACK_TYPE: StackType.COMPONENT },
17
16
  withManagedStack<ComponentStackDescriptor, ComponentStackNavigationHelpers>(
18
- ({ scenes, shouldShowFloatOverlay, closingRouteMap }) => {
19
- const isRouteClosing = (routeKey: string) =>
20
- Boolean(closingRouteMap.current[routeKey]);
21
-
17
+ ({ scenes, shouldShowFloatOverlay }) => {
22
18
  return (
23
19
  <Fragment>
24
20
  {shouldShowFloatOverlay ? <Overlay.Float /> : null}
25
21
 
26
- {scenes.map((scene, sceneIndex) => {
22
+ {scenes.map((scene) => {
27
23
  const descriptor = scene.descriptor;
28
24
  const route = scene.route;
29
25
 
30
- const { previousDescriptor, nextDescriptor } =
31
- resolveSceneNeighbors(scenes, sceneIndex, isRouteClosing);
32
-
33
26
  return (
34
27
  <ComponentScreen key={route.key} routeKey={route.key}>
35
28
  <ScreenComposer
36
- previous={previousDescriptor}
29
+ previous={scene.previousDescriptor}
37
30
  current={descriptor}
38
- next={nextDescriptor}
31
+ next={scene.nextDescriptor}
39
32
  >
40
33
  <SceneView key={route.key} descriptor={descriptor} />
41
34
  </ScreenComposer>
@@ -99,7 +99,7 @@ function IsolatedComponentStackNavigator(props: ComponentStackNavigatorProps) {
99
99
  * @deprecated Component stack was originally introduced for independent,
100
100
  * embedded navigation flows. Blank stack now supports that use case directly
101
101
  * via navigator props such as `<BlankStack.Navigator independent />`, with
102
- * `enableNativeScreens` available when you need to switch between native
102
+ * `nativeScreens` available when you need to switch between native
103
103
  * screens and regular views. Prefer blank stack for new work; component stack
104
104
  * will be removed in a future release.
105
105
  */
@@ -62,6 +62,11 @@ function NativeStackNavigator({
62
62
  );
63
63
  }
64
64
 
65
+ /**
66
+ * @deprecated The bundled native-stack integration is deprecated and will be removed in a future major release.
67
+ * Use `@react-navigation/native-stack` or Expo Router's native stack with
68
+ * `withScreenTransitions` from `react-native-screen-transitions` instead.
69
+ */
65
70
  export function createNativeStackNavigator<
66
71
  const ParamList extends ParamListBase,
67
72
  const NavigatorID extends string | undefined = undefined,
@@ -50,6 +50,11 @@ export type NativeStackNavigationEventMap = {
50
50
  sheetDetentChange: { data: { index: number; stable: boolean } };
51
51
  };
52
52
 
53
+ /**
54
+ * @deprecated The bundled native-stack integration is deprecated and will be removed in a future major release.
55
+ * Use `@react-navigation/native-stack` or Expo Router's native stack with
56
+ * `withScreenTransitions` from `react-native-screen-transitions` instead.
57
+ */
53
58
  export type NativeStackNavigationProp<
54
59
  ParamList extends ParamListBase,
55
60
  RouteName extends keyof ParamList = string,
@@ -64,6 +69,11 @@ export type NativeStackNavigationProp<
64
69
  > &
65
70
  StackActionHelpers<ParamList>;
66
71
 
72
+ /**
73
+ * @deprecated The bundled native-stack integration is deprecated and will be removed in a future major release.
74
+ * Use `@react-navigation/native-stack` or Expo Router's native stack with
75
+ * `withScreenTransitions` from `react-native-screen-transitions` instead.
76
+ */
67
77
  export type NativeStackScreenProps<
68
78
  ParamList extends ParamListBase,
69
79
  RouteName extends keyof ParamList = string,
@@ -148,6 +158,11 @@ export type NativeStackOverlayProps = OverlayProps<
148
158
  NativeStackNavigationProp<ParamListBase>
149
159
  >;
150
160
 
161
+ /**
162
+ * @deprecated The bundled native-stack integration is deprecated and will be removed in a future major release.
163
+ * Use `NativeStackAdapterOptions` with `withScreenTransitions` from
164
+ * `react-native-screen-transitions` instead.
165
+ */
151
166
  export type NativeStackScreenTransitionConfig = ScreenTransitionConfig & {
152
167
  /**
153
168
  * Whether to enable transitions. It sets the presentation to containedTransparentModal, animation none, and headerShown to false.
@@ -155,6 +170,11 @@ export type NativeStackScreenTransitionConfig = ScreenTransitionConfig & {
155
170
  enableTransitions?: boolean;
156
171
  };
157
172
 
173
+ /**
174
+ * @deprecated The bundled native-stack integration is deprecated and will be removed in a future major release.
175
+ * Use `NativeStackAdapterOptions<NativeStackNavigationOptions>` with
176
+ * `@react-navigation/native-stack` and `withScreenTransitions` instead.
177
+ */
158
178
  export type NativeStackNavigationOptions = NativeStackScreenTransitionConfig & {
159
179
  /**
160
180
  * String that can be displayed in the header as a fallback for `headerTitle`.
@@ -701,6 +721,11 @@ export type NativeStackNavigationOptions = NativeStackScreenTransitionConfig & {
701
721
  unstable_sheetFooter?: () => React.ReactNode;
702
722
  };
703
723
 
724
+ /**
725
+ * @deprecated The bundled native-stack integration is deprecated and will be removed in a future major release.
726
+ * Use `@react-navigation/native-stack` or Expo Router's native stack with
727
+ * `withScreenTransitions` from `react-native-screen-transitions` instead.
728
+ */
704
729
  export type NativeStackNavigatorProps = DefaultNavigatorOptions<
705
730
  ParamListBase,
706
731
  string | undefined,
@@ -0,0 +1,42 @@
1
+ import { createContext, useContext } from "react";
2
+ import type { BaseStackDescriptor, BaseStackScene } from "../../types";
3
+
4
+ export type ScreenTransitionsAdapterScene =
5
+ BaseStackScene<BaseStackDescriptor> & {
6
+ previousDescriptor?: BaseStackDescriptor;
7
+ nextDescriptor?: BaseStackDescriptor;
8
+ };
9
+
10
+ export interface ScreenTransitionsAdapterContextValue {
11
+ routeIndexByKey: ReadonlyMap<string, number>;
12
+ scenes: ScreenTransitionsAdapterScene[];
13
+ }
14
+
15
+ const ScreenTransitionsAdapterContext =
16
+ createContext<ScreenTransitionsAdapterContextValue | null>(null);
17
+
18
+ ScreenTransitionsAdapterContext.displayName = "ScreenTransitionsAdapter";
19
+
20
+ export function ScreenTransitionsAdapterProvider({
21
+ children,
22
+ value,
23
+ }: {
24
+ children: React.ReactNode;
25
+ value: ScreenTransitionsAdapterContextValue;
26
+ }) {
27
+ return (
28
+ <ScreenTransitionsAdapterContext.Provider value={value}>
29
+ {children}
30
+ </ScreenTransitionsAdapterContext.Provider>
31
+ );
32
+ }
33
+
34
+ export function useScreenTransitionsAdapterContext() {
35
+ const context = useContext(ScreenTransitionsAdapterContext);
36
+ if (!context) {
37
+ throw new Error(
38
+ "useScreenTransitionsAdapterContext must be used within withScreenTransitions",
39
+ );
40
+ }
41
+ return context;
42
+ }
@@ -0,0 +1,155 @@
1
+ import type {
2
+ NavigatorTypeBagBase,
3
+ TypedNavigator,
4
+ } from "@react-navigation/native";
5
+ import type { ComponentType, ReactNode } from "react";
6
+ import {
7
+ Children,
8
+ cloneElement,
9
+ forwardRef,
10
+ isValidElement,
11
+ useCallback,
12
+ useMemo,
13
+ } from "react";
14
+ import type {
15
+ NativeStackAdapterOptionInput,
16
+ NativeStackAdapterOptions,
17
+ } from "./options";
18
+ import { adaptNativeStackTransitionOptions } from "./options";
19
+ import {
20
+ ScreenTransitionsScreenLayout,
21
+ ScreenTransitionsStackLayout,
22
+ } from "./stack-layout";
23
+ import type {
24
+ NavigatorLayout,
25
+ NavigatorLayoutArgs,
26
+ NavigatorWithScreenTransitions,
27
+ ScreenLayout,
28
+ ScreenLayoutArgs,
29
+ } from "./types";
30
+
31
+ export type {
32
+ NativeStackAdapterOptions,
33
+ NativeStackNativeGestureOptions,
34
+ ScreenTransitionDescriptorOptions,
35
+ } from "./options";
36
+ export { resolveScreenTransitionOptions } from "./options";
37
+
38
+ type ScreenTransitionsNavigatorProps = {
39
+ layout?: NavigatorLayout;
40
+ screenLayout?: ScreenLayout;
41
+ [key: string]: any;
42
+ };
43
+
44
+ type ScreenTransitionsNavigatorTypeBag<TBag extends NavigatorTypeBagBase> =
45
+ Omit<TBag, "ScreenOptions"> & {
46
+ ScreenOptions: NativeStackAdapterOptions<TBag["ScreenOptions"]>;
47
+ };
48
+
49
+ function adaptNavigatorChildren(children: ReactNode): ReactNode {
50
+ return Children.map(children, (child) => {
51
+ if (!isValidElement(child)) {
52
+ return child;
53
+ }
54
+
55
+ const props = child.props as Record<string, unknown>;
56
+ const nextProps: Record<string, unknown> = {};
57
+ let changed = false;
58
+
59
+ if ("options" in props) {
60
+ nextProps.options = adaptNativeStackTransitionOptions(
61
+ props.options as NativeStackAdapterOptionInput | undefined,
62
+ );
63
+ changed = true;
64
+ }
65
+
66
+ if ("screenOptions" in props) {
67
+ nextProps.screenOptions = adaptNativeStackTransitionOptions(
68
+ props.screenOptions as NativeStackAdapterOptionInput | undefined,
69
+ );
70
+ changed = true;
71
+ }
72
+
73
+ if (props.children !== undefined && typeof props.children !== "function") {
74
+ nextProps.children = adaptNavigatorChildren(props.children as ReactNode);
75
+ changed = true;
76
+ }
77
+
78
+ if (!changed) {
79
+ return child;
80
+ }
81
+
82
+ return cloneElement(child, nextProps);
83
+ });
84
+ }
85
+
86
+ export function withScreenTransitions<
87
+ TBag extends NavigatorTypeBagBase,
88
+ TConfig,
89
+ >(
90
+ navigator: TypedNavigator<TBag, TConfig>,
91
+ ): TypedNavigator<ScreenTransitionsNavigatorTypeBag<TBag>, TConfig>;
92
+ export function withScreenTransitions<
93
+ TNavigator extends NavigatorWithScreenTransitions,
94
+ >(navigator: TNavigator): TNavigator;
95
+ export function withScreenTransitions(
96
+ navigator: NavigatorWithScreenTransitions,
97
+ ): any {
98
+ const BaseNavigator = navigator.Navigator as ComponentType<any>;
99
+
100
+ const Navigator = forwardRef<unknown, ScreenTransitionsNavigatorProps>(
101
+ function ScreenTransitionsNavigator(
102
+ { layout, screenLayout, ...props },
103
+ ref,
104
+ ) {
105
+ const transitionLayout = useCallback(
106
+ (layoutArgs: NavigatorLayoutArgs) => (
107
+ <ScreenTransitionsStackLayout
108
+ layout={layout}
109
+ layoutArgs={layoutArgs}
110
+ />
111
+ ),
112
+ [layout],
113
+ );
114
+
115
+ const transitionScreenLayout = useCallback(
116
+ (screenLayoutArgs: ScreenLayoutArgs) => (
117
+ <ScreenTransitionsScreenLayout
118
+ screenLayout={screenLayout}
119
+ screenLayoutArgs={screenLayoutArgs}
120
+ />
121
+ ),
122
+ [screenLayout],
123
+ );
124
+ const screenOptions = useMemo(
125
+ () => adaptNativeStackTransitionOptions(props.screenOptions),
126
+ [props.screenOptions],
127
+ );
128
+ const children = useMemo(
129
+ () => adaptNavigatorChildren(props.children),
130
+ [props.children],
131
+ );
132
+
133
+ return (
134
+ <BaseNavigator
135
+ {...props}
136
+ screenOptions={screenOptions}
137
+ ref={ref as never}
138
+ layout={transitionLayout}
139
+ screenLayout={transitionScreenLayout}
140
+ >
141
+ {children}
142
+ </BaseNavigator>
143
+ );
144
+ },
145
+ );
146
+
147
+ Navigator.displayName = `withScreenTransitions(${
148
+ BaseNavigator.displayName ?? BaseNavigator.name ?? "Navigator"
149
+ })`;
150
+
151
+ return {
152
+ ...navigator,
153
+ Navigator,
154
+ };
155
+ }