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
@@ -0,0 +1,198 @@
1
+ import type {
2
+ BaseStackDescriptor,
3
+ RouteWithKey,
4
+ } from "../../../../../types/stack.types";
5
+ import { composeDescriptors } from "../../../../../utils/navigation/compose-descriptors";
6
+ import { syncRoutesWithRemoved } from "../../../../../utils/navigation/sync-routes-with-removed";
7
+ import type {
8
+ LocalRoutesState,
9
+ ManagedDescriptorSources,
10
+ ManagedRoutes,
11
+ ReconciledRoutes,
12
+ } from "./types";
13
+
14
+ type ReconcileManagedRoutesParams<TDescriptor extends BaseStackDescriptor> = {
15
+ current: LocalRoutesState<TDescriptor>;
16
+ previousRoutesSnapshot: ManagedRoutes<TDescriptor>;
17
+ nextRoutesSnapshot: ManagedRoutes<TDescriptor>;
18
+ nextDescriptors: ManagedDescriptorSources<TDescriptor>;
19
+ closingRouteKeys: Set<string>;
20
+ };
21
+
22
+ const haveSameRouteKeys = <Route extends RouteWithKey>(
23
+ previous: Route[],
24
+ next: Route[],
25
+ ): boolean => {
26
+ if (previous.length !== next.length) {
27
+ return false;
28
+ }
29
+
30
+ return previous.every((route, index) => route?.key === next[index]?.key);
31
+ };
32
+
33
+ const alignRoutesWithLatest = <
34
+ Route extends RouteWithKey,
35
+ DescriptorMap extends Record<string, unknown>,
36
+ >(
37
+ currentRoutes: Route[],
38
+ currentDescriptors: DescriptorMap,
39
+ nextRoutes: Route[],
40
+ nextDescriptors: DescriptorMap,
41
+ ): { routes: Route[]; descriptors: DescriptorMap } => {
42
+ if (currentRoutes.length === 0) {
43
+ return {
44
+ routes: nextRoutes,
45
+ descriptors: composeDescriptors(
46
+ nextRoutes,
47
+ nextDescriptors,
48
+ currentDescriptors,
49
+ ),
50
+ };
51
+ }
52
+
53
+ const nextRouteLookup = new Map<string, Route>();
54
+ for (const route of nextRoutes) {
55
+ nextRouteLookup.set(route.key, route);
56
+ }
57
+
58
+ let didChange = currentRoutes.length !== nextRoutes.length;
59
+ const alignedRoutes = currentRoutes.map((route) => {
60
+ const nextRoute = nextRouteLookup.get(route.key);
61
+
62
+ if (!nextRoute) {
63
+ return route;
64
+ }
65
+
66
+ if (nextRoute !== route) {
67
+ didChange = true;
68
+ return nextRoute;
69
+ }
70
+
71
+ return route;
72
+ });
73
+ const routesResult = didChange ? alignedRoutes : currentRoutes;
74
+
75
+ return {
76
+ routes: routesResult,
77
+ descriptors: composeDescriptors(
78
+ routesResult,
79
+ nextDescriptors,
80
+ currentDescriptors,
81
+ ),
82
+ };
83
+ };
84
+
85
+ const acceptAlreadyClosingRouteRemovals = <
86
+ TDescriptor extends BaseStackDescriptor,
87
+ >({
88
+ current,
89
+ previousRoutesSnapshot,
90
+ nextRoutesSnapshot,
91
+ nextDescriptors,
92
+ closingRouteKeys,
93
+ }: ReconcileManagedRoutesParams<TDescriptor>): ReconciledRoutes<TDescriptor> | null => {
94
+ const nextRouteKeys = new Set(nextRoutesSnapshot.map((route) => route.key));
95
+ const acceptedRemovedKeys = new Set<string>();
96
+
97
+ for (const route of previousRoutesSnapshot) {
98
+ if (nextRouteKeys.has(route.key)) {
99
+ continue;
100
+ }
101
+
102
+ if (!closingRouteKeys.has(route.key)) {
103
+ continue;
104
+ }
105
+
106
+ acceptedRemovedKeys.add(route.key);
107
+ closingRouteKeys.delete(route.key);
108
+ }
109
+
110
+ if (acceptedRemovedKeys.size === 0) {
111
+ return null;
112
+ }
113
+
114
+ const remainingClosingRoutes = current.routes.filter((route) => {
115
+ if (nextRouteKeys.has(route.key)) {
116
+ return false;
117
+ }
118
+
119
+ if (acceptedRemovedKeys.has(route.key)) {
120
+ return false;
121
+ }
122
+
123
+ return closingRouteKeys.has(route.key);
124
+ });
125
+
126
+ const routes = [
127
+ ...nextRoutesSnapshot,
128
+ ...remainingClosingRoutes,
129
+ ] as ManagedRoutes<TDescriptor>;
130
+ const descriptors = {
131
+ ...nextDescriptors,
132
+ } as ManagedDescriptorSources<TDescriptor>;
133
+
134
+ for (const route of remainingClosingRoutes) {
135
+ const descriptor = current.sourceDescriptors[route.key];
136
+ if (descriptor) {
137
+ descriptors[route.key] = descriptor;
138
+ }
139
+ }
140
+
141
+ return {
142
+ routes,
143
+ descriptors,
144
+ };
145
+ };
146
+
147
+ export const reconcileManagedRoutes = <TDescriptor extends BaseStackDescriptor>(
148
+ params: ReconcileManagedRoutesParams<TDescriptor>,
149
+ ): ReconciledRoutes<TDescriptor> => {
150
+ const {
151
+ current,
152
+ previousRoutesSnapshot,
153
+ nextRoutesSnapshot,
154
+ nextDescriptors,
155
+ closingRouteKeys,
156
+ } = params;
157
+
158
+ const routeKeysUnchanged = haveSameRouteKeys(
159
+ previousRoutesSnapshot,
160
+ nextRoutesSnapshot,
161
+ );
162
+
163
+ if (routeKeysUnchanged) {
164
+ const result = alignRoutesWithLatest(
165
+ current.routes,
166
+ current.sourceDescriptors,
167
+ nextRoutesSnapshot,
168
+ nextDescriptors,
169
+ );
170
+
171
+ return {
172
+ routes: result.routes as ManagedRoutes<TDescriptor>,
173
+ descriptors: result.descriptors as ManagedDescriptorSources<TDescriptor>,
174
+ };
175
+ }
176
+
177
+ const acceptedRemoval = acceptAlreadyClosingRouteRemovals(params);
178
+
179
+ if (acceptedRemoval) {
180
+ return acceptedRemoval;
181
+ }
182
+
183
+ const result = syncRoutesWithRemoved({
184
+ prevRoutes:
185
+ previousRoutesSnapshot.length > 0
186
+ ? previousRoutesSnapshot
187
+ : current.routes,
188
+ prevDescriptors: current.sourceDescriptors,
189
+ nextRoutes: nextRoutesSnapshot,
190
+ nextDescriptors,
191
+ closingRouteKeys,
192
+ });
193
+
194
+ return {
195
+ routes: result.routes as ManagedRoutes<TDescriptor>,
196
+ descriptors: result.descriptors as ManagedDescriptorSources<TDescriptor>,
197
+ };
198
+ };
@@ -0,0 +1,57 @@
1
+ import type { ManagedStackProps } from "../../../../../types/providers/managed-stack.types";
2
+ import type {
3
+ BaseStackDescriptor,
4
+ BaseStackNavigation,
5
+ BaseStackRoute,
6
+ BaseStackScene,
7
+ StackDescriptorSource,
8
+ } from "../../../../../types/stack.types";
9
+
10
+ export type ManagedRoutes<TDescriptor extends BaseStackDescriptor> =
11
+ TDescriptor["route"][];
12
+
13
+ export type ManagedDescriptors<TDescriptor extends BaseStackDescriptor> =
14
+ Record<string, TDescriptor>;
15
+
16
+ export type ManagedDescriptorSources<TDescriptor extends BaseStackDescriptor> =
17
+ Record<string, StackDescriptorSource<TDescriptor>>;
18
+
19
+ export type LocalRoutesState<TDescriptor extends BaseStackDescriptor> = {
20
+ routes: ManagedRoutes<TDescriptor>;
21
+ descriptors: ManagedDescriptors<TDescriptor>;
22
+ sourceDescriptors: ManagedDescriptorSources<TDescriptor>;
23
+ focusedRouteKey?: string;
24
+ routeChildStates: Record<string, unknown>;
25
+ scenes: BaseStackScene<TDescriptor>[];
26
+ routeKeys: string[];
27
+ shouldShowFloatOverlay: boolean;
28
+ closingRouteKeys: ReadonlySet<string>;
29
+ };
30
+
31
+ export type ManagedStackControllerSnapshot<
32
+ TDescriptor extends BaseStackDescriptor,
33
+ > = {
34
+ state: LocalRoutesState<TDescriptor>;
35
+ };
36
+
37
+ export type ManagedStackController<
38
+ TDescriptor extends BaseStackDescriptor,
39
+ TNavigation extends BaseStackNavigation,
40
+ > = {
41
+ subscribe: (listener: () => void) => () => void;
42
+ getSnapshot: () => ManagedStackControllerSnapshot<TDescriptor>;
43
+ update: (props: ManagedStackProps<TDescriptor, TNavigation>) => void;
44
+ handleCloseRoute: (payload: { route: BaseStackRoute }) => void;
45
+ requestDismiss: (payload: { route: BaseStackRoute }) => boolean;
46
+ };
47
+
48
+ export type ReconciledRoutes<TDescriptor extends BaseStackDescriptor> = {
49
+ routes: ManagedRoutes<TDescriptor>;
50
+ descriptors: ManagedDescriptorSources<TDescriptor>;
51
+ };
52
+
53
+ export type SceneActivityWindow = {
54
+ focusedIndex: number;
55
+ topIndex: number;
56
+ topIsClosing: boolean;
57
+ };
@@ -0,0 +1,40 @@
1
+ import { useRef, useSyncExternalStore } from "react";
2
+ import type { ManagedStackProps } from "../../../../types/providers/managed-stack.types";
3
+ import type {
4
+ BaseStackDescriptor,
5
+ BaseStackNavigation,
6
+ } from "../../../../types/stack.types";
7
+ import {
8
+ createManagedStackController,
9
+ type ManagedStackController,
10
+ } from "./managed-stack-controller";
11
+
12
+ export const useManagedStackState = <
13
+ TDescriptor extends BaseStackDescriptor,
14
+ TNavigation extends BaseStackNavigation,
15
+ >(
16
+ props: ManagedStackProps<TDescriptor, TNavigation>,
17
+ ) => {
18
+ const controllerRef = useRef<
19
+ ManagedStackController<TDescriptor, TNavigation> | undefined
20
+ >(undefined);
21
+
22
+ if (!controllerRef.current) {
23
+ controllerRef.current = createManagedStackController(props);
24
+ }
25
+
26
+ const controller = controllerRef.current;
27
+ controller.update(props);
28
+
29
+ const snapshot = useSyncExternalStore(
30
+ controller.subscribe,
31
+ controller.getSnapshot,
32
+ controller.getSnapshot,
33
+ );
34
+
35
+ return {
36
+ state: snapshot.state,
37
+ handleCloseRoute: controller.handleCloseRoute,
38
+ requestDismiss: controller.requestDismiss,
39
+ };
40
+ };
@@ -0,0 +1,160 @@
1
+ import { StackActions } from "@react-navigation/native";
2
+ import type { ManagedStackProps } from "../../../../types/providers/managed-stack.types";
3
+ import type {
4
+ BaseStackDescriptor,
5
+ BaseStackNavigation,
6
+ BaseStackRoute,
7
+ } from "../../../../types/stack.types";
8
+ import { buildManagedStackState } from "./helpers/build-managed-stack-state";
9
+ import { deriveManagedStackState } from "./helpers/derive-managed-stack-state";
10
+ import type {
11
+ ManagedDescriptorSources,
12
+ ManagedStackControllerSnapshot,
13
+ ManagedStackController as ManagedStackControllerType,
14
+ } from "./helpers/types";
15
+
16
+ export type { ManagedStackController } from "./helpers/types";
17
+
18
+ /**
19
+ * Maintains the stack-local route snapshot used while managed transitions run.
20
+ *
21
+ * React Navigation remains the source of truth for settled routes, but it can
22
+ * remove descriptors before our close animation has finished. This controller
23
+ * keeps those closing routes locally until their lifecycle reports completion.
24
+ */
25
+ export const createManagedStackController = <
26
+ TDescriptor extends BaseStackDescriptor,
27
+ TNavigation extends BaseStackNavigation,
28
+ >(
29
+ initialProps: ManagedStackProps<TDescriptor, TNavigation>,
30
+ ): ManagedStackControllerType<TDescriptor, TNavigation> => {
31
+ const closingRouteKeys = new Set<string>();
32
+ let props = initialProps;
33
+ let previousPropRoutes = initialProps.state.routes;
34
+ let snapshot: ManagedStackControllerSnapshot<TDescriptor> = {
35
+ state: buildManagedStackState({
36
+ props,
37
+ routes: initialProps.state.routes,
38
+ descriptors:
39
+ initialProps.descriptors as ManagedDescriptorSources<TDescriptor>,
40
+ closingRouteKeys,
41
+ }),
42
+ };
43
+ const listeners = new Set<() => void>();
44
+
45
+ const emit = () => {
46
+ for (const listener of listeners) {
47
+ listener();
48
+ }
49
+ };
50
+
51
+ const subscribe = (listener: () => void) => {
52
+ listeners.add(listener);
53
+ return () => {
54
+ listeners.delete(listener);
55
+ };
56
+ };
57
+
58
+ const getSnapshot = (): ManagedStackControllerSnapshot<TDescriptor> => {
59
+ return snapshot;
60
+ };
61
+
62
+ const update = (nextProps: ManagedStackProps<TDescriptor, TNavigation>) => {
63
+ const previousRoutesSnapshot = previousPropRoutes;
64
+ props = nextProps;
65
+
66
+ const nextState = deriveManagedStackState({
67
+ props,
68
+ current: snapshot.state,
69
+ previousRoutesSnapshot,
70
+ closingRouteKeys,
71
+ });
72
+ previousPropRoutes = nextProps.state.routes;
73
+
74
+ if (nextState === snapshot.state) {
75
+ return;
76
+ }
77
+
78
+ snapshot = {
79
+ state: nextState,
80
+ };
81
+ };
82
+
83
+ const handleCloseRoute = ({ route }: { route: BaseStackRoute }) => {
84
+ const { state, navigation } = props;
85
+
86
+ if (state.routes.some((candidate) => candidate.key === route.key)) {
87
+ navigation.dispatch({
88
+ ...StackActions.pop(),
89
+ source: route.key,
90
+ target: state.key,
91
+ });
92
+ return;
93
+ }
94
+
95
+ closingRouteKeys.delete(route.key);
96
+
97
+ const current = snapshot.state;
98
+ const routeExists = current.routes.some(
99
+ (candidate) => candidate.key === route.key,
100
+ );
101
+
102
+ if (!routeExists) {
103
+ return;
104
+ }
105
+
106
+ const nextRoutes = current.routes.filter(
107
+ (candidate) => candidate.key !== route.key,
108
+ );
109
+
110
+ const nextDescriptors = { ...current.sourceDescriptors };
111
+ delete nextDescriptors[route.key];
112
+
113
+ snapshot = {
114
+ state: buildManagedStackState({
115
+ props,
116
+ routes: nextRoutes,
117
+ descriptors: nextDescriptors,
118
+ closingRouteKeys,
119
+ previousState: current,
120
+ }),
121
+ };
122
+ emit();
123
+ };
124
+
125
+ const requestDismiss = ({ route }: { route: BaseStackRoute }): boolean => {
126
+ const current = snapshot.state;
127
+ const routeIndex = current.routes.findIndex(
128
+ (candidate) => candidate.key === route.key,
129
+ );
130
+
131
+ if (routeIndex <= 0) {
132
+ return false;
133
+ }
134
+
135
+ if (closingRouteKeys.has(route.key)) {
136
+ return true;
137
+ }
138
+
139
+ closingRouteKeys.add(route.key);
140
+ snapshot = {
141
+ state: buildManagedStackState({
142
+ props,
143
+ routes: current.routes,
144
+ descriptors: current.sourceDescriptors,
145
+ closingRouteKeys,
146
+ previousState: current,
147
+ }),
148
+ };
149
+ emit();
150
+ return true;
151
+ };
152
+
153
+ return {
154
+ subscribe,
155
+ getSnapshot,
156
+ update,
157
+ handleCloseRoute,
158
+ requestDismiss,
159
+ };
160
+ };
@@ -2,9 +2,10 @@ import type { Route } from "@react-navigation/native";
2
2
  import * as React from "react";
3
3
  import { useMemo } from "react";
4
4
  import {
5
- StackContext,
6
5
  type StackContextValue,
6
+ StackProvider,
7
7
  } from "../../hooks/navigation/use-stack";
8
+ import { AnimationStore } from "../../stores/animation.store";
8
9
  import type {
9
10
  ManagedStackContextValue,
10
11
  ManagedStackProps,
@@ -17,9 +18,7 @@ import type {
17
18
  BaseStackScene,
18
19
  } from "../../types/stack.types";
19
20
  import { useStackCoreContext } from "./core.provider";
20
- import { useClosingRouteMap } from "./helpers/use-closing-route-map";
21
- import { useLocalRoutes } from "./helpers/use-local-routes";
22
- import { useProcessedRoutes } from "./helpers/use-processed-routes";
21
+ import { useManagedStackState } from "./helpers/managed-stack-state";
23
22
  import { useStackDerived } from "./helpers/use-stack-derived";
24
23
 
25
24
  const ManagedStackContext =
@@ -43,70 +42,55 @@ function useManagedStackValue<
43
42
  props: ManagedStackProps<TDescriptor, TNavigation>,
44
43
  ): ManagedStackResult<TDescriptor> {
45
44
  const { flags } = useStackCoreContext();
46
- const { state, handleCloseRoute, closingRouteKeys } = useLocalRoutes(props);
45
+ const { state, handleCloseRoute, requestDismiss } =
46
+ useManagedStackState(props);
47
47
  const navigatorKey = props.state.key;
48
48
 
49
- const processed = useProcessedRoutes(state.routes, state.descriptors);
50
- const { optimisticFocusedIndex } = useStackDerived(processed.animationMaps);
51
- const closingRouteMap = useClosingRouteMap(
52
- processed.routeKeys,
53
- processed.animationMaps,
49
+ const animationMaps = useMemo(
50
+ () => state.routeKeys.map((routeKey) => AnimationStore.getBag(routeKey)),
51
+ [state.routeKeys],
54
52
  );
53
+ const { optimisticFocusedIndex } = useStackDerived(animationMaps);
55
54
 
56
55
  const focusedIndex = props.state.index;
57
56
 
58
- // Common stack context (consumed by useStack())
59
57
  const stackContextValue = useMemo<StackContextValue>(
60
58
  () => ({
61
59
  flags,
62
60
  navigatorKey,
63
- routeKeys: processed.routeKeys,
61
+ routeKeys: state.routeKeys,
64
62
  routes: state.routes as Route<string>[],
65
- scenes: processed.scenes as BaseStackScene[],
63
+ scenes: state.scenes as BaseStackScene[],
66
64
  optimisticFocusedIndex,
65
+ focusedIndex,
66
+ requestDismiss,
67
67
  }),
68
68
  [
69
69
  flags,
70
70
  navigatorKey,
71
- processed.routeKeys,
71
+ state.routeKeys,
72
72
  state.routes,
73
- processed.scenes,
73
+ state.scenes,
74
74
  optimisticFocusedIndex,
75
+ focusedIndex,
76
+ requestDismiss,
75
77
  ],
76
78
  );
77
79
 
78
- // Managed-specific context (consumed by useManagedStackContext())
79
80
  const managedContextValue = useMemo<ManagedStackContextValue>(
80
81
  () => ({
81
- activeScreensLimit: processed.activeScreensLimit,
82
- closingRouteKeysShared: closingRouteKeys.shared,
83
82
  handleCloseRoute,
84
- backdropBehaviors: processed.backdropBehaviors,
85
83
  }),
86
- [
87
- processed.activeScreensLimit,
88
- closingRouteKeys.shared,
89
- handleCloseRoute,
90
- processed.backdropBehaviors,
91
- ],
84
+ [handleCloseRoute],
92
85
  );
93
86
 
94
- // Combined props for render children (stack-view components)
95
87
  const renderProps = useMemo<ManagedStackRenderProps<TDescriptor>>(
96
88
  () => ({
97
- descriptors: state.descriptors,
98
- scenes: processed.scenes,
89
+ scenes: state.scenes,
99
90
  focusedIndex,
100
- closingRouteMap,
101
- shouldShowFloatOverlay: processed.shouldShowFloatOverlay,
91
+ shouldShowFloatOverlay: state.shouldShowFloatOverlay,
102
92
  }),
103
- [
104
- state.descriptors,
105
- processed.scenes,
106
- focusedIndex,
107
- closingRouteMap,
108
- processed.shouldShowFloatOverlay,
109
- ],
93
+ [state.scenes, focusedIndex, state.shouldShowFloatOverlay],
110
94
  );
111
95
 
112
96
  return { stackContextValue, managedContextValue, renderProps };
@@ -125,11 +109,11 @@ function withManagedStack<
125
109
  useManagedStackValue<TDescriptor, TNavigation>(props);
126
110
 
127
111
  return (
128
- <StackContext.Provider value={stackContextValue}>
112
+ <StackProvider value={stackContextValue}>
129
113
  <ManagedStackContext.Provider value={managedContextValue}>
130
114
  <Component {...renderProps} />
131
115
  </ManagedStackContext.Provider>
132
- </StackContext.Provider>
116
+ </StackProvider>
133
117
  );
134
118
  };
135
119
  }
@@ -78,6 +78,33 @@ export type BoundsNavigationZoomOptions = {
78
78
  * animates above it.
79
79
  */
80
80
  backgroundScale?: number;
81
+ /**
82
+ * Maximum dynamic gesture sensitivity applied by zoom.
83
+ *
84
+ * Zoom lowers gesture sensitivity as the drag gets deeper so the content
85
+ * handoff stays stable. This value controls the starting/highest sensitivity
86
+ * in that curve.
87
+ *
88
+ * @default 0.8
89
+ */
90
+ maxSensitivity?: number;
91
+ /**
92
+ * Velocity-driven depth applied to the dismiss scale handoff.
93
+ *
94
+ * Higher values make fast releases orbit farther around the final scale. Set
95
+ * to `0` to remove the velocity depth effect.
96
+ *
97
+ * @default 0.5
98
+ */
99
+ velocityDepth?: number;
100
+ /**
101
+ * Whether gesture displacement should drive transition progress or remain as
102
+ * freeform gesture values. Zoom defaults to `"freeform"` so drag can move the
103
+ * content without owning the whole screen progress.
104
+ *
105
+ * @default "freeform"
106
+ */
107
+ gestureProgressMode?: GestureProgressMode;
81
108
  /**
82
109
  * Horizontal gesture drag scaling curve, applied when the active dismiss
83
110
  * direction is horizontal.
@@ -34,6 +34,7 @@ export type {
34
34
  export type { OverlayProps } from "./overlay.types";
35
35
  export type {
36
36
  GestureTracking,
37
+ InactiveBehavior,
37
38
  Layout,
38
39
  ScreenKey,
39
40
  ScreenTransitionConfig,
@@ -46,4 +47,6 @@ export type {
46
47
  BaseStackScene,
47
48
  BaseStackState,
48
49
  DescriptorMap,
50
+ StackDescriptorSource,
51
+ StackSceneActivity,
49
52
  } from "./stack.types";
@@ -1,4 +1,3 @@
1
- import type { SharedValue } from "react-native-reanimated";
2
1
  import type { StackContextValue } from "../../hooks/navigation/use-stack";
3
2
  import type {
4
3
  BaseStackDescriptor,
@@ -6,6 +5,7 @@ import type {
6
5
  BaseStackRoute,
7
6
  BaseStackScene,
8
7
  BaseStackState,
8
+ StackDescriptorSource,
9
9
  } from "../stack.types";
10
10
 
11
11
  /**
@@ -18,8 +18,11 @@ export interface ManagedStackProps<
18
18
  > {
19
19
  state: BaseStackState<TDescriptor["route"]>;
20
20
  navigation: TNavigation;
21
- descriptors: Record<string, TDescriptor>;
22
- describe: (route: TDescriptor["route"], placeholder: boolean) => TDescriptor;
21
+ descriptors: Record<string, StackDescriptorSource<TDescriptor>>;
22
+ describe: (
23
+ route: TDescriptor["route"],
24
+ placeholder: boolean,
25
+ ) => StackDescriptorSource<TDescriptor>;
23
26
  }
24
27
 
25
28
  /**
@@ -27,10 +30,7 @@ export interface ManagedStackProps<
27
30
  * Shared fields (routes, scenes, etc.) live in StackContext.
28
31
  */
29
32
  export interface ManagedStackContextValue {
30
- activeScreensLimit: number;
31
- closingRouteKeysShared: SharedValue<string[]>;
32
33
  handleCloseRoute: (payload: { route: BaseStackRoute }) => void;
33
- backdropBehaviors: string[];
34
34
  }
35
35
 
36
36
  /**
@@ -40,10 +40,8 @@ export interface ManagedStackContextValue {
40
40
  export interface ManagedStackRenderProps<
41
41
  TDescriptor extends BaseStackDescriptor = BaseStackDescriptor,
42
42
  > {
43
- descriptors: Record<string, TDescriptor>;
44
43
  scenes: BaseStackScene<TDescriptor>[];
45
44
  focusedIndex: number;
46
- closingRouteMap: React.RefObject<Readonly<Record<string, true>>>;
47
45
  shouldShowFloatOverlay: boolean;
48
46
  }
49
47