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,6 +1,5 @@
1
1
  /** biome-ignore-all lint/correctness/useHookAtTopLevel: STACK_TYPE is stable per navigator */
2
2
  import { useLayoutEffect, useMemo, useRef } from "react";
3
- import { useAnimatedReaction } from "react-native-reanimated";
4
3
  import useStableCallback from "../../../hooks/use-stable-callback";
5
4
  import {
6
5
  type BaseDescriptor,
@@ -8,7 +7,6 @@ import {
8
7
  } from "../../../providers/screen/descriptors";
9
8
  import { useStackCoreContext } from "../../../providers/stack/core.provider";
10
9
  import { useManagedStackContext } from "../../../providers/stack/managed.provider";
11
- import type { AnimationStoreMap } from "../../../stores/animation.store";
12
10
  import { GestureStore } from "../../../stores/gesture.store";
13
11
  import {
14
12
  LifecycleTransitionRequestKind,
@@ -20,22 +18,24 @@ import { resetStoresForScreen } from "./helpers/reset-stores-for-screen";
20
18
 
21
19
  interface CloseHookParams {
22
20
  current: BaseDescriptor;
23
- animations: AnimationStoreMap;
24
21
  requestLifecycleTransition: SystemStoreActions["requestLifecycleTransition"];
25
22
  resetStores: () => void;
26
23
  }
27
24
 
28
- /**
29
- * Managed close - reacts to closingRouteKeysShared from ManagedStackContext.
30
- * Used by blank-stack and component-stack.
31
- */
32
25
  const useManagedClose = ({
33
26
  current,
34
27
  requestLifecycleTransition,
35
28
  resetStores,
36
29
  }: CloseHookParams) => {
37
- const { handleCloseRoute, closingRouteKeysShared } = useManagedStackContext();
38
- const routeKey = current.route.key;
30
+ const { handleCloseRoute } = useManagedStackContext();
31
+
32
+ useLayoutEffect(() => {
33
+ if (current.activity !== "closing") {
34
+ return;
35
+ }
36
+
37
+ requestLifecycleTransition(LifecycleTransitionRequestKind.ManagedClose, 0);
38
+ }, [current.activity, requestLifecycleTransition]);
39
39
 
40
40
  const handleManagedCloseEnd = useStableCallback((finished: boolean) => {
41
41
  if (!finished) return;
@@ -45,21 +45,6 @@ const useManagedClose = ({
45
45
  });
46
46
  });
47
47
 
48
- useAnimatedReaction(
49
- () => {
50
- const keys = closingRouteKeysShared.get();
51
- return keys?.includes(routeKey) ?? false;
52
- },
53
- (isClosing, wasClosing) => {
54
- if (!isClosing || wasClosing) return;
55
-
56
- requestLifecycleTransition(
57
- LifecycleTransitionRequestKind.ManagedClose,
58
- 0,
59
- );
60
- },
61
- );
62
-
63
48
  return { handleManagedCloseEnd };
64
49
  };
65
50
 
@@ -127,7 +112,6 @@ const useNativeStackClose = ({
127
112
  */
128
113
  export function useCloseTransitionIntent(
129
114
  current: BaseDescriptor,
130
- animations: AnimationStoreMap,
131
115
  system: SystemStoreMap,
132
116
  ): {
133
117
  handleManagedCloseEnd?: (finished: boolean) => void;
@@ -144,7 +128,6 @@ export function useCloseTransitionIntent(
144
128
 
145
129
  const closeParams: CloseHookParams = {
146
130
  current,
147
- animations,
148
131
  requestLifecycleTransition,
149
132
  resetStores,
150
133
  };
@@ -21,7 +21,7 @@ export const ScreenLifecycle = ({ children }: Props) => {
21
21
  const system = SystemStore.getBag(current.route.key);
22
22
 
23
23
  const { handleManagedCloseEnd, handleNativeCloseEnd } =
24
- useCloseTransitionIntent(current, animations, system);
24
+ useCloseTransitionIntent(current, system);
25
25
 
26
26
  useOpenTransitionIntent(current, animations, system);
27
27
 
@@ -1,9 +1,15 @@
1
1
  import { StackActions } from "@react-navigation/native";
2
2
  import { useCallback } from "react";
3
- import { useDescriptors } from "../../providers/screen/descriptors";
3
+ import { useDescriptorsStore } from "../../providers/screen/descriptors";
4
+ import { useStack } from "./use-stack";
4
5
 
5
6
  export function useNavigationHelpers() {
6
- const { current } = useDescriptors();
7
+ const current = useDescriptorsStore((store) => store.descriptors.current);
8
+ const requestStackDismiss = useStack((stack) => stack.requestDismiss);
9
+
10
+ const requestDismiss = useCallback((): boolean => {
11
+ return requestStackDismiss?.({ route: current.route }) ?? false;
12
+ }, [current.route, requestStackDismiss]);
7
13
 
8
14
  const dismissScreen = useCallback((): boolean => {
9
15
  const state = current.navigation.getState();
@@ -21,5 +27,5 @@ export function useNavigationHelpers() {
21
27
  return true;
22
28
  }, [current]);
23
29
 
24
- return { dismissScreen };
30
+ return { dismissScreen, requestDismiss };
25
31
  }
@@ -1,5 +1,13 @@
1
1
  import type { Route } from "@react-navigation/native";
2
- import { createContext, useContext } from "react";
2
+ import {
3
+ createContext,
4
+ type ReactNode,
5
+ useCallback,
6
+ useContext,
7
+ useLayoutEffect,
8
+ useRef,
9
+ useSyncExternalStore,
10
+ } from "react";
3
11
  import type { DerivedValue } from "react-native-reanimated";
4
12
  import type { StackCoreContextValue } from "../../providers/stack/core.provider";
5
13
  import type { OverlayProps } from "../../types/overlay.types";
@@ -25,23 +33,124 @@ export interface StackDescriptor<
25
33
  export type StackScene<TDescriptor extends StackDescriptor = StackDescriptor> =
26
34
  BaseStackScene<TDescriptor>;
27
35
 
36
+ type StackDismissRequest = (payload: { route: BaseStackRoute }) => boolean;
37
+ type StackSelector<T> = (stack: StackContextValue) => T;
38
+
28
39
  export interface StackContextValue extends StackCoreContextValue {
29
40
  navigatorKey: string;
30
41
  routeKeys: string[];
31
42
  routes: Route<string>[];
32
43
  scenes: StackScene[];
33
44
  optimisticFocusedIndex: DerivedValue<number>;
45
+ focusedIndex: number;
46
+ requestDismiss?: StackDismissRequest;
47
+ }
48
+
49
+ interface StackStoreApi {
50
+ getSnapshot: () => StackContextValue;
51
+ subscribe: (listener: () => void) => () => void;
34
52
  }
35
53
 
36
- export const StackContext = createContext<StackContextValue | null>(null);
54
+ interface MutableStackStoreApi extends StackStoreApi {
55
+ notify: () => void;
56
+ setSnapshot: (snapshot: StackContextValue) => boolean;
57
+ }
58
+
59
+ const createStackStore = (
60
+ initialSnapshot: StackContextValue,
61
+ ): MutableStackStoreApi => {
62
+ let snapshot = initialSnapshot;
63
+ const listeners = new Set<() => void>();
64
+
65
+ return {
66
+ getSnapshot: () => snapshot,
67
+ notify: () => {
68
+ for (const listener of listeners) {
69
+ listener();
70
+ }
71
+ },
72
+ setSnapshot: (nextSnapshot) => {
73
+ if (Object.is(snapshot, nextSnapshot)) {
74
+ return false;
75
+ }
76
+
77
+ snapshot = nextSnapshot;
78
+ return true;
79
+ },
80
+ subscribe: (listener) => {
81
+ listeners.add(listener);
82
+ return () => {
83
+ listeners.delete(listener);
84
+ };
85
+ },
86
+ };
87
+ };
88
+
89
+ const StackContext = createContext<StackStoreApi | null>(null);
37
90
  StackContext.displayName = "Stack";
38
91
 
39
- export function useStack<T extends StackContextValue = StackContextValue>(): T {
40
- const context = useContext(StackContext);
92
+ export function StackProvider({
93
+ children,
94
+ value,
95
+ }: {
96
+ children: ReactNode;
97
+ value: StackContextValue;
98
+ }) {
99
+ const storeRef = useRef<MutableStackStoreApi | null>(null);
100
+ const pendingNotifyRef = useRef(false);
101
+
102
+ let store = storeRef.current;
103
+ if (!store) {
104
+ store = createStackStore(value);
105
+ storeRef.current = store;
106
+ }
41
107
 
42
- if (context === null) {
108
+ pendingNotifyRef.current =
109
+ store.setSnapshot(value) || pendingNotifyRef.current;
110
+
111
+ useLayoutEffect(() => {
112
+ if (!pendingNotifyRef.current) {
113
+ return;
114
+ }
115
+
116
+ pendingNotifyRef.current = false;
117
+ store.notify();
118
+ });
119
+
120
+ return (
121
+ <StackContext.Provider value={store}>{children}</StackContext.Provider>
122
+ );
123
+ }
124
+
125
+ function useStackStore(): StackStoreApi {
126
+ const store = useContext(StackContext);
127
+
128
+ if (store === null) {
43
129
  throw new Error("useStack must be used within a Stack provider");
44
130
  }
45
131
 
46
- return context as T;
132
+ return store;
133
+ }
134
+
135
+ export function useStack<T extends StackContextValue = StackContextValue>(): T;
136
+ export function useStack<T>(selector: StackSelector<T>): T;
137
+ export function useStack<T>(
138
+ selector?: StackSelector<T>,
139
+ ): StackContextValue | T {
140
+ const store = useStackStore();
141
+ const selectorRef = useRef<StackSelector<StackContextValue | T>>(
142
+ selector ?? ((stack) => stack),
143
+ );
144
+ selectorRef.current = selector ?? ((stack) => stack);
145
+
146
+ const getSelectedSnapshot = useCallback(
147
+ () => selectorRef.current(store.getSnapshot()),
148
+ [store],
149
+ );
150
+
151
+ return useSyncExternalStore(
152
+ store.subscribe,
153
+ getSelectedSnapshot,
154
+ getSelectedSnapshot,
155
+ );
47
156
  }
@@ -1,4 +1,5 @@
1
1
  import { FlatList, Pressable, ScrollView, View } from "react-native";
2
+ import { withScreenTransitions } from "./adapters/with-screen-transitions";
2
3
  import {
3
4
  Boundary,
4
5
  createBoundaryComponent,
@@ -10,6 +11,7 @@ import { Presets, Specs } from "./configs";
10
11
  export default {
11
12
  createTransitionAwareComponent,
12
13
  createBoundaryComponent,
14
+ withScreenTransitions,
13
15
  Boundary,
14
16
  View: createTransitionAwareComponent(View),
15
17
  Pressable: createTransitionAwareComponent(Pressable),
@@ -24,6 +26,12 @@ export default {
24
26
  Specs,
25
27
  };
26
28
 
29
+ export type {
30
+ NativeStackAdapterOptions,
31
+ NativeStackNativeGestureOptions,
32
+ ScreenTransitionDescriptorOptions,
33
+ } from "./adapters/with-screen-transitions";
34
+ export { withScreenTransitions } from "./adapters/with-screen-transitions";
27
35
  export { snapTo } from "./animation/snap-to";
28
36
  export {
29
37
  NAVIGATION_MASK_CONTAINER_STYLE_ID,
@@ -53,6 +61,7 @@ export type {
53
61
  BoundsNavigationZoomOpacityRanges,
54
62
  BoundsNavigationZoomOptions,
55
63
  BoundsNavigationZoomStyle,
64
+ InactiveBehavior,
56
65
  OverlayProps,
57
66
  ScreenInterpolationProps,
58
67
  ScreenStyleInterpolator,
@@ -8,8 +8,8 @@ import { getAncestorKeys } from "./helpers/get-ancestor-keys";
8
8
 
9
9
  /**
10
10
  * Base descriptor interface - minimal contract for all stack types.
11
- * This allows blank-stack and native-stack to work with the shared
12
- * providers without tight coupling to React Navigation.
11
+ * This allows stack implementations to work with the shared providers without
12
+ * tight coupling to React Navigation.
13
13
  */
14
14
  export type BaseDescriptor = BaseStackDescriptor;
15
15
 
@@ -23,6 +23,13 @@ export interface DescriptorsContextValue<
23
23
 
24
24
  export type DescriptorDerivationsContextValue = DescriptorDerivations;
25
25
 
26
+ interface DescriptorStoreValue<
27
+ TDescriptor extends BaseDescriptor = BaseDescriptor,
28
+ > {
29
+ descriptors: DescriptorsContextValue<TDescriptor>;
30
+ derivations: DescriptorDerivationsContextValue;
31
+ }
32
+
26
33
  interface DescriptorsProviderProps<TDescriptor extends BaseDescriptor> {
27
34
  children: ReactNode;
28
35
  previous?: TDescriptor;
@@ -30,35 +37,21 @@ interface DescriptorsProviderProps<TDescriptor extends BaseDescriptor> {
30
37
  next?: TDescriptor;
31
38
  }
32
39
 
33
- type InternalProviderProps = DescriptorsProviderProps<BaseDescriptor>;
34
-
35
40
  const {
36
41
  DescriptorsProvider: InternalDescriptorsProvider,
37
- useDescriptorsContext,
42
+ useDescriptorsStore,
38
43
  } = createProvider("Descriptors", { guarded: true })<
39
- InternalProviderProps,
40
- DescriptorsContextValue<BaseDescriptor>
41
- >(({ previous, current, next }) => {
42
- const value = useMemo(
44
+ DescriptorsProviderProps<BaseDescriptor>,
45
+ DescriptorStoreValue<BaseDescriptor>
46
+ >(({ previous, current, next, children }) => {
47
+ const descriptors = useMemo(
43
48
  () => ({ previous, current, next }),
44
49
  [previous, current, next],
45
50
  );
46
51
 
47
- return {
48
- value,
49
- };
50
- });
51
-
52
- const {
53
- DescriptorDerivationsProvider: InternalDescriptorDerivationsProvider,
54
- useDescriptorDerivationsContext,
55
- } = createProvider("DescriptorDerivations", { guarded: true })<
56
- InternalProviderProps,
57
- DescriptorDerivationsContextValue
58
- >(({ previous, current, next, children }) => {
59
52
  const ancestorKeys = useMemo(() => getAncestorKeys(current), [current]);
60
53
 
61
- const value = useMemo(
54
+ const derivations = useMemo(
62
55
  () =>
63
56
  deriveDescriptorDerivations({
64
57
  previous,
@@ -69,6 +62,14 @@ const {
69
62
  [previous, current, next, ancestorKeys],
70
63
  );
71
64
 
65
+ const value = useMemo(
66
+ () => ({
67
+ descriptors,
68
+ derivations,
69
+ }),
70
+ [descriptors, derivations],
71
+ );
72
+
72
73
  return {
73
74
  value,
74
75
  children,
@@ -85,23 +86,22 @@ export function DescriptorsProvider<TDescriptor extends BaseDescriptor>({
85
86
  previous,
86
87
  current,
87
88
  next,
89
+ children,
88
90
  };
89
91
 
90
- return (
91
- <InternalDescriptorsProvider {...providerProps}>
92
- <InternalDescriptorDerivationsProvider {...providerProps}>
93
- {children}
94
- </InternalDescriptorDerivationsProvider>
95
- </InternalDescriptorsProvider>
96
- );
92
+ return <InternalDescriptorsProvider {...providerProps} />;
97
93
  }
98
94
 
99
95
  export function useDescriptors<
100
96
  TDescriptor extends BaseDescriptor = BaseDescriptor,
101
97
  >() {
102
- return useDescriptorsContext() as DescriptorsContextValue<TDescriptor>;
98
+ return useDescriptorsStore(
99
+ (store) => store.descriptors,
100
+ ) as DescriptorsContextValue<TDescriptor>;
103
101
  }
104
102
 
105
103
  export function useDescriptorDerivations(): DescriptorDerivationsContextValue {
106
- return useDescriptorDerivationsContext();
104
+ return useDescriptorsStore((store) => store.derivations);
107
105
  }
106
+
107
+ export { useDescriptorsStore };
@@ -3,4 +3,5 @@ export {
3
3
  DescriptorsProvider,
4
4
  useDescriptorDerivations,
5
5
  useDescriptors,
6
+ useDescriptorsStore,
6
7
  } from "./descriptors.provider";
@@ -87,6 +87,7 @@ export function shouldDeferToChildClaim(
87
87
  "worklet";
88
88
  if (!childClaim) return false;
89
89
  if (childClaim.routeKey === selfRouteKey) return false;
90
- if (childClaim.isDismissing.get()) return false;
90
+ // A closing child still owns its axis until its claim is cleaned up; otherwise
91
+ // an ancestor can steal the next drag while the previous screen is visible.
91
92
  return true;
92
93
  }
@@ -1,4 +1,4 @@
1
- import { useEffect, useMemo } from "react";
1
+ import { useLayoutEffect, useMemo } from "react";
2
2
  import { GestureStore } from "../../../../stores/gesture.store";
3
3
  import {
4
4
  type ClaimedDirections,
@@ -115,7 +115,7 @@ export function useWalkUpAndRegisterShadowingClaims(
115
115
  [parentContext, claimedDirections],
116
116
  );
117
117
 
118
- useEffect(() => {
118
+ useLayoutEffect(() => {
119
119
  if (!isTopMostScreen || !shadowedAncestors.length) {
120
120
  return;
121
121
  }
@@ -1,4 +1,4 @@
1
- import { clamp } from "react-native-reanimated";
1
+ import { clamp, runOnJS } from "react-native-reanimated";
2
2
  import { EPSILON, FALSE, TRUE } from "../../../../constants";
3
3
  import { animateToProgress } from "../../../../utils/animation/animate-to-progress";
4
4
  import { emit } from "../../../../utils/animation/emit";
@@ -94,9 +94,10 @@ export const trackPanGesture = (
94
94
  export const finalizePanRelease = (
95
95
  release: PanReleaseResult,
96
96
  runtime: PanGestureRuntime,
97
- dismissScreen: (() => void) | undefined,
97
+ dismissScreen: ((finished: boolean) => void) | undefined,
98
98
  dimensions: GestureDimensions,
99
99
  rawEvent: PanGestureEvent,
100
+ requestDismiss?: () => void,
100
101
  ) => {
101
102
  "worklet";
102
103
  const {
@@ -132,6 +133,10 @@ export const finalizePanRelease = (
132
133
  return;
133
134
  }
134
135
 
136
+ if (plan.shouldDismiss && requestDismiss) {
137
+ runOnJS(requestDismiss)();
138
+ }
139
+
135
140
  animateToProgress({
136
141
  target: plan.target,
137
142
  onAnimationFinish: plan.shouldDismiss ? dismissScreen : undefined,
@@ -26,7 +26,7 @@ export const usePanBehavior = (
26
26
  screenOptions: ScreenOptionsContextValue,
27
27
  dimensions: GestureDimensions,
28
28
  ): PanBehavior => {
29
- const { dismissScreen } = useNavigationHelpers();
29
+ const { dismissScreen, requestDismiss } = useNavigationHelpers();
30
30
  const { withSensitivity, resetSensitivity } =
31
31
  usePanGestureSensitivity(screenOptions);
32
32
 
@@ -76,9 +76,17 @@ export const usePanBehavior = (
76
76
  dismissScreen,
77
77
  dimensions,
78
78
  rawEvent,
79
+ requestDismiss,
79
80
  );
80
81
  },
81
- [runtime, screenOptions, dimensions, dismissScreen, withSensitivity],
82
+ [
83
+ runtime,
84
+ screenOptions,
85
+ dimensions,
86
+ dismissScreen,
87
+ requestDismiss,
88
+ withSensitivity,
89
+ ],
82
90
  );
83
91
 
84
92
  return useMemo(
@@ -1,4 +1,4 @@
1
- import { clamp } from "react-native-reanimated";
1
+ import { clamp, runOnJS } from "react-native-reanimated";
2
2
  import { EPSILON, FALSE, TRUE } from "../../../../constants";
3
3
  import { animateToProgress } from "../../../../utils/animation/animate-to-progress";
4
4
  import { emit } from "../../../../utils/animation/emit";
@@ -73,7 +73,8 @@ export const trackPinchGesture = (
73
73
  export const finalizePinchRelease = (
74
74
  release: PinchReleaseResult,
75
75
  runtime: PinchGestureRuntime,
76
- dismissScreen: (() => void) | undefined,
76
+ dismissScreen: ((finished: boolean) => void) | undefined,
77
+ requestDismiss?: () => void,
77
78
  ) => {
78
79
  "worklet";
79
80
  const {
@@ -92,6 +93,10 @@ export const finalizePinchRelease = (
92
93
  resetValuesImmediately: release.resetValuesImmediately,
93
94
  });
94
95
 
96
+ if (release.shouldDismiss && requestDismiss) {
97
+ runOnJS(requestDismiss)();
98
+ }
99
+
95
100
  animateToProgress({
96
101
  target: release.target,
97
102
  onAnimationFinish: release.shouldDismiss ? dismissScreen : undefined,
@@ -24,7 +24,7 @@ export const usePinchBehavior = (
24
24
  runtime: SharedValue<PinchGestureRuntime>,
25
25
  screenOptions: ScreenOptionsContextValue,
26
26
  ): PinchBehavior => {
27
- const { dismissScreen } = useNavigationHelpers();
27
+ const { dismissScreen, requestDismiss } = useNavigationHelpers();
28
28
  const { withSensitivity, resetSensitivity } =
29
29
  usePinchGestureSensitivity(screenOptions);
30
30
 
@@ -69,9 +69,14 @@ export const usePinchBehavior = (
69
69
  .hasSnapPoints
70
70
  ? resolveSnapPinchRelease(event, latestRuntime)
71
71
  : resolvePinchRelease(event, latestRuntime);
72
- finalizePinchRelease(release, latestRuntime, dismissScreen);
72
+ finalizePinchRelease(
73
+ release,
74
+ latestRuntime,
75
+ dismissScreen,
76
+ requestDismiss,
77
+ );
73
78
  },
74
- [runtime, screenOptions, dismissScreen, withSensitivity],
79
+ [runtime, screenOptions, dismissScreen, requestDismiss, withSensitivity],
75
80
  );
76
81
 
77
82
  return useMemo(
@@ -1,3 +1,4 @@
1
+ import { useWindowDimensions } from "react-native";
1
2
  import {
2
3
  useAnimatedProps,
3
4
  useAnimatedReaction,
@@ -6,10 +7,12 @@ import {
6
7
  } from "react-native-reanimated";
7
8
  import { AnimationStore } from "../../../../stores/animation.store";
8
9
  import { SystemStore } from "../../../../stores/system.store";
10
+ import { getVisibilityBlockOffset } from "../../../../utils/visibility-block-offset";
9
11
  import { useDescriptorDerivations } from "../../descriptors";
10
12
  import { resolveScreenVisibilityGate } from "../helpers/visibility-gate";
11
13
 
12
14
  export const useMaybeBlockVisibility = (isFloatingOverlay?: boolean) => {
15
+ const { height } = useWindowDimensions();
13
16
  const { currentScreenKey } = useDescriptorDerivations();
14
17
  const { entering, progress } = AnimationStore.getBag(currentScreenKey);
15
18
 
@@ -54,8 +57,21 @@ export const useMaybeBlockVisibility = (isFloatingOverlay?: boolean) => {
54
57
 
55
58
  const animatedStyle = useAnimatedStyle(() => {
56
59
  "worklet";
60
+ /**
61
+ * Keep blocked screens physically offscreen. On physical devices,
62
+ * opacity: 0 can break Liquid Glass sampling.
63
+ *
64
+ * See: https://github.com/expo/expo/issues/41024
65
+ *
66
+ */
67
+ const offset = getVisibilityBlockOffset(height);
68
+
57
69
  return {
58
- opacity: shouldBlockVisibility.get() ? 0 : 1,
70
+ transform: [
71
+ {
72
+ translateY: shouldBlockVisibility.get() ? offset : 0,
73
+ },
74
+ ],
59
75
  };
60
76
  });
61
77
 
@@ -2,8 +2,8 @@ import type * as React from "react";
2
2
  import { useMemo } from "react";
3
3
  import type { NativeStackDescriptorMap } from "../../../native-stack/types";
4
4
  import {
5
- StackContext,
6
5
  type StackContextValue,
6
+ StackProvider,
7
7
  } from "../../hooks/navigation/use-stack";
8
8
  import {
9
9
  AnimationStore,
@@ -91,8 +91,17 @@ function useDirectStackValue(
91
91
  routes: allRoutes,
92
92
  scenes,
93
93
  optimisticFocusedIndex,
94
+ focusedIndex,
94
95
  }),
95
- [flags, navigatorKey, routeKeys, allRoutes, scenes, optimisticFocusedIndex],
96
+ [
97
+ flags,
98
+ navigatorKey,
99
+ routeKeys,
100
+ allRoutes,
101
+ scenes,
102
+ optimisticFocusedIndex,
103
+ focusedIndex,
104
+ ],
96
105
  );
97
106
 
98
107
  // DirectStack context value
@@ -125,9 +134,9 @@ function withDirectStack<TProps extends DirectStackProps>(
125
134
  const { stackContextValue, ...lifecycleValue } = useDirectStackValue(props);
126
135
 
127
136
  return (
128
- <StackContext.Provider value={stackContextValue}>
137
+ <StackProvider value={stackContextValue}>
129
138
  <Component {...lifecycleValue} />
130
- </StackContext.Provider>
139
+ </StackProvider>
131
140
  );
132
141
  };
133
142
  }