react-native-screen-transitions 3.6.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 (368) 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/create-provider.js +99 -10
  81. package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
  82. package/lib/commonjs/shared/utils/navigation/resolve-scene-neighbors.js +8 -5
  83. package/lib/commonjs/shared/utils/navigation/resolve-scene-neighbors.js.map +1 -1
  84. package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js +23 -6
  85. package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
  86. package/lib/commonjs/shared/utils/visibility-block-offset.js +13 -0
  87. package/lib/commonjs/shared/utils/visibility-block-offset.js.map +1 -0
  88. package/lib/module/blank-stack/components/stack-view.js +36 -40
  89. package/lib/module/blank-stack/components/stack-view.js.map +1 -1
  90. package/lib/module/blank-stack/navigators/create-blank-stack-navigator.js +7 -14
  91. package/lib/module/blank-stack/navigators/create-blank-stack-navigator.js.map +1 -1
  92. package/lib/module/component-stack/components/stack-view.js +4 -11
  93. package/lib/module/component-stack/components/stack-view.js.map +1 -1
  94. package/lib/module/component-stack/navigators/create-component-stack-navigator.js +1 -1
  95. package/lib/module/native-stack/navigators/createNativeStackNavigator.js +6 -0
  96. package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  97. package/lib/module/shared/adapters/with-screen-transitions/context.js +23 -0
  98. package/lib/module/shared/adapters/with-screen-transitions/context.js.map +1 -0
  99. package/lib/module/shared/adapters/with-screen-transitions/index.js +66 -0
  100. package/lib/module/shared/adapters/with-screen-transitions/index.js.map +1 -0
  101. package/lib/module/shared/adapters/with-screen-transitions/options.js +98 -0
  102. package/lib/module/shared/adapters/with-screen-transitions/options.js.map +1 -0
  103. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js +138 -0
  104. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -0
  105. package/lib/module/shared/adapters/with-screen-transitions/types.js +4 -0
  106. package/lib/module/shared/adapters/with-screen-transitions/types.js.map +1 -0
  107. package/lib/module/shared/components/activity/helpers.js +5 -0
  108. package/lib/module/shared/components/activity/helpers.js.map +1 -0
  109. package/lib/module/shared/components/activity/index.js +5 -0
  110. package/lib/module/shared/components/activity/index.js.map +1 -0
  111. package/lib/module/shared/components/activity/variants/activity-container.js +24 -0
  112. package/lib/module/shared/components/activity/variants/activity-container.js.map +1 -0
  113. package/lib/module/shared/components/activity/variants/activity-screen.js +103 -0
  114. package/lib/module/shared/components/activity/variants/activity-screen.js.map +1 -0
  115. package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js +11 -5
  116. package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js.map +1 -1
  117. package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js +11 -0
  118. package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js.map +1 -1
  119. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -17
  120. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  121. package/lib/module/shared/components/screen-lifecycle/index.js +1 -1
  122. package/lib/module/shared/components/screen-lifecycle/index.js.map +1 -1
  123. package/lib/module/shared/hooks/navigation/use-navigation-helpers.js +11 -5
  124. package/lib/module/shared/hooks/navigation/use-navigation-helpers.js.map +1 -1
  125. package/lib/module/shared/hooks/navigation/use-stack.js +63 -6
  126. package/lib/module/shared/hooks/navigation/use-stack.js.map +1 -1
  127. package/lib/module/shared/index.js +3 -0
  128. package/lib/module/shared/index.js.map +1 -1
  129. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js +17 -29
  130. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  131. package/lib/module/shared/providers/screen/descriptors/index.js +1 -1
  132. package/lib/module/shared/providers/screen/descriptors/index.js.map +1 -1
  133. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js +2 -1
  134. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  135. package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +2 -2
  136. package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
  137. package/lib/module/shared/providers/screen/gestures/pan/pan-lifecycle.js +5 -2
  138. package/lib/module/shared/providers/screen/gestures/pan/pan-lifecycle.js.map +1 -1
  139. package/lib/module/shared/providers/screen/gestures/pan/use-pan-behavior.js +4 -3
  140. package/lib/module/shared/providers/screen/gestures/pan/use-pan-behavior.js.map +1 -1
  141. package/lib/module/shared/providers/screen/gestures/pinch/pinch-lifecycle.js +5 -2
  142. package/lib/module/shared/providers/screen/gestures/pinch/pinch-lifecycle.js.map +1 -1
  143. package/lib/module/shared/providers/screen/gestures/pinch/use-pinch-behavior.js +4 -3
  144. package/lib/module/shared/providers/screen/gestures/pinch/use-pinch-behavior.js.map +1 -1
  145. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +16 -1
  146. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  147. package/lib/module/shared/providers/stack/direct.provider.js +5 -4
  148. package/lib/module/shared/providers/stack/direct.provider.js.map +1 -1
  149. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +194 -0
  150. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -0
  151. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js +57 -0
  152. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js.map +1 -0
  153. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js +69 -0
  154. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js.map +1 -0
  155. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js +118 -0
  156. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js.map +1 -0
  157. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/types.js +4 -0
  158. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/types.js.map +1 -0
  159. package/lib/module/shared/providers/stack/helpers/managed-stack-state/index.js +19 -0
  160. package/lib/module/shared/providers/stack/helpers/managed-stack-state/index.js.map +1 -0
  161. package/lib/module/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js +126 -0
  162. package/lib/module/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js.map +1 -0
  163. package/lib/module/shared/providers/stack/managed.provider.js +19 -30
  164. package/lib/module/shared/providers/stack/managed.provider.js.map +1 -1
  165. package/lib/module/shared/types/stack.types.js.map +1 -1
  166. package/lib/module/shared/utils/create-provider.js +100 -11
  167. package/lib/module/shared/utils/create-provider.js.map +1 -1
  168. package/lib/module/shared/utils/navigation/resolve-scene-neighbors.js +8 -5
  169. package/lib/module/shared/utils/navigation/resolve-scene-neighbors.js.map +1 -1
  170. package/lib/module/shared/utils/navigation/sync-routes-with-removed.js +23 -6
  171. package/lib/module/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
  172. package/lib/module/shared/utils/visibility-block-offset.js +8 -0
  173. package/lib/module/shared/utils/visibility-block-offset.js.map +1 -0
  174. package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
  175. package/lib/typescript/blank-stack/index.d.ts +1 -1
  176. package/lib/typescript/blank-stack/index.d.ts.map +1 -1
  177. package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts +4 -6
  178. package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts.map +1 -1
  179. package/lib/typescript/blank-stack/types.d.ts +41 -29
  180. package/lib/typescript/blank-stack/types.d.ts.map +1 -1
  181. package/lib/typescript/component-stack/components/stack-view.d.ts.map +1 -1
  182. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts +1 -1
  183. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +5 -0
  184. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -1
  185. package/lib/typescript/native-stack/types.d.ts +25 -0
  186. package/lib/typescript/native-stack/types.d.ts.map +1 -1
  187. package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts +15 -0
  188. package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts.map +1 -0
  189. package/lib/typescript/shared/adapters/with-screen-transitions/index.d.ts +11 -0
  190. package/lib/typescript/shared/adapters/with-screen-transitions/index.d.ts.map +1 -0
  191. package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts +16 -0
  192. package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts.map +1 -0
  193. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts +12 -0
  194. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -0
  195. package/lib/typescript/shared/adapters/with-screen-transitions/types.d.ts +24 -0
  196. package/lib/typescript/shared/adapters/with-screen-transitions/types.d.ts.map +1 -0
  197. package/lib/typescript/shared/components/activity/helpers.d.ts +4 -0
  198. package/lib/typescript/shared/components/activity/helpers.d.ts.map +1 -0
  199. package/lib/typescript/shared/components/activity/index.d.ts +3 -0
  200. package/lib/typescript/shared/components/activity/index.d.ts.map +1 -0
  201. package/lib/typescript/shared/components/activity/variants/activity-container.d.ts +6 -0
  202. package/lib/typescript/shared/components/activity/variants/activity-container.d.ts.map +1 -0
  203. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts +13 -0
  204. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -0
  205. package/lib/typescript/shared/components/create-boundary-component/hooks/use-measurer.d.ts.map +1 -1
  206. package/lib/typescript/shared/components/create-boundary-component/index.d.ts +2 -2
  207. package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts +1 -0
  208. package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts.map +1 -1
  209. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts +1 -2
  210. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts.map +1 -1
  211. package/lib/typescript/shared/hooks/navigation/use-navigation-helpers.d.ts +1 -0
  212. package/lib/typescript/shared/hooks/navigation/use-navigation-helpers.d.ts.map +1 -1
  213. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +13 -1
  214. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
  215. package/lib/typescript/shared/index.d.ts +15 -11
  216. package/lib/typescript/shared/index.d.ts.map +1 -1
  217. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts +11 -3
  218. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  219. package/lib/typescript/shared/providers/screen/descriptors/index.d.ts +1 -1
  220. package/lib/typescript/shared/providers/screen/descriptors/index.d.ts.map +1 -1
  221. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +1 -1
  222. package/lib/typescript/shared/providers/screen/gestures/pan/pan-lifecycle.d.ts +1 -1
  223. package/lib/typescript/shared/providers/screen/gestures/pan/pan-lifecycle.d.ts.map +1 -1
  224. package/lib/typescript/shared/providers/screen/gestures/pan/use-pan-behavior.d.ts.map +1 -1
  225. package/lib/typescript/shared/providers/screen/gestures/pinch/pinch-lifecycle.d.ts +1 -1
  226. package/lib/typescript/shared/providers/screen/gestures/pinch/pinch-lifecycle.d.ts.map +1 -1
  227. package/lib/typescript/shared/providers/screen/gestures/pinch/use-pinch-behavior.d.ts.map +1 -1
  228. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +3 -1
  229. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
  230. package/lib/typescript/shared/providers/stack/direct.provider.d.ts.map +1 -1
  231. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts +13 -0
  232. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts.map +1 -0
  233. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.d.ts +12 -0
  234. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.d.ts.map +1 -0
  235. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.d.ts +11 -0
  236. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.d.ts.map +1 -0
  237. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.d.ts +12 -0
  238. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.d.ts.map +1 -0
  239. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts +40 -0
  240. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts.map +1 -0
  241. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/index.d.ts +12 -0
  242. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/index.d.ts.map +1 -0
  243. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.d.ts +13 -0
  244. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.d.ts.map +1 -0
  245. package/lib/typescript/shared/providers/stack/managed.provider.d.ts.map +1 -1
  246. package/lib/typescript/shared/types/index.d.ts +2 -2
  247. package/lib/typescript/shared/types/index.d.ts.map +1 -1
  248. package/lib/typescript/shared/types/providers/managed-stack.types.d.ts +3 -9
  249. package/lib/typescript/shared/types/providers/managed-stack.types.d.ts.map +1 -1
  250. package/lib/typescript/shared/types/screen.types.d.ts +24 -0
  251. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  252. package/lib/typescript/shared/types/stack.types.d.ts +7 -0
  253. package/lib/typescript/shared/types/stack.types.d.ts.map +1 -1
  254. package/lib/typescript/shared/utils/create-provider.d.ts +17 -3
  255. package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
  256. package/lib/typescript/shared/utils/navigation/resolve-scene-neighbors.d.ts +2 -1
  257. package/lib/typescript/shared/utils/navigation/resolve-scene-neighbors.d.ts.map +1 -1
  258. package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts +2 -1
  259. package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts.map +1 -1
  260. package/lib/typescript/shared/utils/visibility-block-offset.d.ts +2 -0
  261. package/lib/typescript/shared/utils/visibility-block-offset.d.ts.map +1 -0
  262. package/package.json +11 -1
  263. package/src/blank-stack/components/stack-view.tsx +54 -48
  264. package/src/blank-stack/index.ts +1 -0
  265. package/src/blank-stack/navigators/create-blank-stack-navigator.tsx +7 -15
  266. package/src/blank-stack/types.ts +44 -29
  267. package/src/component-stack/components/stack-view.tsx +4 -11
  268. package/src/component-stack/navigators/create-component-stack-navigator.tsx +1 -1
  269. package/src/native-stack/navigators/createNativeStackNavigator.tsx +5 -0
  270. package/src/native-stack/types.ts +25 -0
  271. package/src/shared/adapters/with-screen-transitions/context.tsx +42 -0
  272. package/src/shared/adapters/with-screen-transitions/index.tsx +155 -0
  273. package/src/shared/adapters/with-screen-transitions/options.ts +172 -0
  274. package/src/shared/adapters/with-screen-transitions/stack-layout.tsx +233 -0
  275. package/src/shared/adapters/with-screen-transitions/types.ts +28 -0
  276. package/src/shared/components/activity/helpers.ts +8 -0
  277. package/src/shared/components/activity/index.tsx +2 -0
  278. package/src/shared/components/activity/variants/activity-container.tsx +25 -0
  279. package/src/shared/components/activity/variants/activity-screen.tsx +133 -0
  280. package/src/shared/components/create-boundary-component/hooks/use-measurer.ts +23 -4
  281. package/src/shared/components/create-boundary-component/utils/measured-bounds.ts +15 -0
  282. package/src/shared/components/screen-lifecycle/hooks/use-close-transition-intent.ts +9 -26
  283. package/src/shared/components/screen-lifecycle/index.tsx +1 -1
  284. package/src/shared/hooks/navigation/use-navigation-helpers.ts +9 -3
  285. package/src/shared/hooks/navigation/use-stack.tsx +115 -6
  286. package/src/shared/index.ts +9 -0
  287. package/src/shared/providers/screen/descriptors/descriptors.provider.tsx +31 -31
  288. package/src/shared/providers/screen/descriptors/index.tsx +1 -0
  289. package/src/shared/providers/screen/gestures/ownership/resolve-ownership.ts +2 -1
  290. package/src/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.ts +2 -2
  291. package/src/shared/providers/screen/gestures/pan/pan-lifecycle.ts +7 -2
  292. package/src/shared/providers/screen/gestures/pan/use-pan-behavior.ts +10 -2
  293. package/src/shared/providers/screen/gestures/pinch/pinch-lifecycle.ts +7 -2
  294. package/src/shared/providers/screen/gestures/pinch/use-pinch-behavior.ts +8 -3
  295. package/src/shared/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +17 -1
  296. package/src/shared/providers/stack/direct.provider.tsx +13 -4
  297. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.ts +368 -0
  298. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.ts +129 -0
  299. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.ts +139 -0
  300. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.ts +198 -0
  301. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/types.ts +57 -0
  302. package/src/shared/providers/stack/helpers/managed-stack-state/index.ts +40 -0
  303. package/src/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.ts +160 -0
  304. package/src/shared/providers/stack/managed.provider.tsx +23 -39
  305. package/src/shared/types/index.ts +3 -0
  306. package/src/shared/types/providers/managed-stack.types.ts +6 -8
  307. package/src/shared/types/screen.types.ts +25 -0
  308. package/src/shared/types/stack.types.ts +11 -0
  309. package/src/shared/utils/create-provider.tsx +183 -8
  310. package/src/shared/utils/navigation/resolve-scene-neighbors.ts +9 -4
  311. package/src/shared/utils/navigation/sync-routes-with-removed.ts +38 -7
  312. package/src/shared/utils/visibility-block-offset.ts +4 -0
  313. package/lib/commonjs/blank-stack/components/stack-view.native.js +0 -64
  314. package/lib/commonjs/blank-stack/components/stack-view.native.js.map +0 -1
  315. package/lib/commonjs/shared/components/native-screen-container.js +0 -42
  316. package/lib/commonjs/shared/components/native-screen-container.js.map +0 -1
  317. package/lib/commonjs/shared/components/native-screen.js +0 -125
  318. package/lib/commonjs/shared/components/native-screen.js.map +0 -1
  319. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js +0 -51
  320. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js.map +0 -1
  321. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js +0 -15
  322. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js.map +0 -1
  323. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js +0 -14
  324. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js.map +0 -1
  325. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js +0 -13
  326. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js.map +0 -1
  327. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/index.js +0 -101
  328. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/index.js.map +0 -1
  329. package/lib/module/blank-stack/components/stack-view.native.js +0 -60
  330. package/lib/module/blank-stack/components/stack-view.native.js.map +0 -1
  331. package/lib/module/shared/components/native-screen-container.js +0 -37
  332. package/lib/module/shared/components/native-screen-container.js.map +0 -1
  333. package/lib/module/shared/components/native-screen.js +0 -119
  334. package/lib/module/shared/components/native-screen.js.map +0 -1
  335. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js +0 -47
  336. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js.map +0 -1
  337. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js +0 -10
  338. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js.map +0 -1
  339. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js +0 -9
  340. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js.map +0 -1
  341. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js +0 -8
  342. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js.map +0 -1
  343. package/lib/module/shared/providers/stack/helpers/use-local-routes/index.js +0 -95
  344. package/lib/module/shared/providers/stack/helpers/use-local-routes/index.js.map +0 -1
  345. package/lib/typescript/blank-stack/components/stack-view.native.d.ts +0 -3
  346. package/lib/typescript/blank-stack/components/stack-view.native.d.ts.map +0 -1
  347. package/lib/typescript/shared/components/native-screen-container.d.ts +0 -6
  348. package/lib/typescript/shared/components/native-screen-container.d.ts.map +0 -1
  349. package/lib/typescript/shared/components/native-screen.d.ts +0 -12
  350. package/lib/typescript/shared/components/native-screen.d.ts.map +0 -1
  351. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.d.ts +0 -10
  352. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.d.ts.map +0 -1
  353. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.d.ts +0 -2
  354. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.d.ts.map +0 -1
  355. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.d.ts +0 -3
  356. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.d.ts.map +0 -1
  357. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.d.ts +0 -3
  358. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.d.ts.map +0 -1
  359. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/index.d.ts +0 -19
  360. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/index.d.ts.map +0 -1
  361. package/src/blank-stack/components/stack-view.native.tsx +0 -74
  362. package/src/shared/components/native-screen-container.tsx +0 -33
  363. package/src/shared/components/native-screen.tsx +0 -176
  364. package/src/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.ts +0 -65
  365. package/src/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.ts +0 -15
  366. package/src/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.ts +0 -12
  367. package/src/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.ts +0 -11
  368. package/src/shared/providers/stack/helpers/use-local-routes/index.ts +0 -147
@@ -0,0 +1,139 @@
1
+ import type {
2
+ BaseStackDescriptor,
3
+ RouteWithKey,
4
+ StackDescriptorSource,
5
+ } from "../../../../../types/stack.types";
6
+ import type { ManagedDescriptorSources } from "./types";
7
+
8
+ export const areDescriptorsEqual = <
9
+ DescriptorMap extends Record<string, unknown>,
10
+ >(
11
+ a: DescriptorMap,
12
+ b: DescriptorMap,
13
+ ): boolean => {
14
+ if (a === b) return true;
15
+
16
+ const aKeys = Object.keys(a);
17
+ const bKeys = Object.keys(b);
18
+
19
+ if (aKeys.length !== bKeys.length) return false;
20
+
21
+ return aKeys.every((key) => a[key] === b[key]);
22
+ };
23
+
24
+ export const setsAreEqual = <T>(
25
+ left: ReadonlySet<T>,
26
+ right: ReadonlySet<T>,
27
+ ) => {
28
+ if (left.size !== right.size) {
29
+ return false;
30
+ }
31
+
32
+ for (const value of left) {
33
+ if (!right.has(value)) {
34
+ return false;
35
+ }
36
+ }
37
+
38
+ return true;
39
+ };
40
+
41
+ export const getRouteChildState = (route: RouteWithKey): unknown => {
42
+ if (!route || typeof route !== "object") {
43
+ return undefined;
44
+ }
45
+
46
+ const childStateSymbol = Object.getOwnPropertySymbols(route).find(
47
+ (symbol) => symbol.description === "CHILD_STATE",
48
+ );
49
+
50
+ if (childStateSymbol && childStateSymbol in route) {
51
+ return (route as unknown as Record<symbol, unknown>)[childStateSymbol];
52
+ }
53
+
54
+ return (route as { state?: unknown }).state;
55
+ };
56
+
57
+ export const getRouteChildStateMap = <Route extends RouteWithKey>(
58
+ routes: Route[],
59
+ ): Record<string, unknown> => {
60
+ const childStates: Record<string, unknown> = {};
61
+
62
+ for (const route of routes) {
63
+ childStates[route.key] = getRouteChildState(route);
64
+ }
65
+
66
+ return childStates;
67
+ };
68
+
69
+ export const areRouteChildStateMapsEqual = (
70
+ previous: Record<string, unknown>,
71
+ next: Record<string, unknown>,
72
+ ): boolean => {
73
+ if (previous === next) return true;
74
+
75
+ const previousKeys = Object.keys(previous);
76
+ const nextKeys = Object.keys(next);
77
+
78
+ if (previousKeys.length !== nextKeys.length) return false;
79
+
80
+ return previousKeys.every((key) => Object.is(previous[key], next[key]));
81
+ };
82
+
83
+ export const areRecordsShallowEqual = (
84
+ a: Record<string, unknown>,
85
+ b: Record<string, unknown>,
86
+ ): boolean => {
87
+ if (a === b) return true;
88
+
89
+ const aKeys = Object.keys(a);
90
+ const bKeys = Object.keys(b);
91
+
92
+ if (aKeys.length !== bKeys.length) return false;
93
+
94
+ return aKeys.every((key) => Object.is(a[key], b[key]));
95
+ };
96
+
97
+ export const areDescriptorSourcesEquivalent = <
98
+ TDescriptor extends BaseStackDescriptor,
99
+ >(
100
+ previous: StackDescriptorSource<TDescriptor>,
101
+ next: StackDescriptorSource<TDescriptor>,
102
+ ): boolean => {
103
+ return (
104
+ previous.navigation === next.navigation &&
105
+ areRecordsShallowEqual(
106
+ previous.route as unknown as Record<string, unknown>,
107
+ next.route as unknown as Record<string, unknown>,
108
+ ) &&
109
+ areRecordsShallowEqual(
110
+ previous.options as unknown as Record<string, unknown>,
111
+ next.options as unknown as Record<string, unknown>,
112
+ )
113
+ );
114
+ };
115
+
116
+ export const areDescriptorSourceMapsEquivalent = <
117
+ TDescriptor extends BaseStackDescriptor,
118
+ >(
119
+ previous: ManagedDescriptorSources<TDescriptor>,
120
+ next: ManagedDescriptorSources<TDescriptor>,
121
+ ): boolean => {
122
+ if (previous === next) return true;
123
+
124
+ const previousKeys = Object.keys(previous);
125
+ const nextKeys = Object.keys(next);
126
+
127
+ if (previousKeys.length !== nextKeys.length) return false;
128
+
129
+ return previousKeys.every((key) => {
130
+ const previousDescriptor = previous[key];
131
+ const nextDescriptor = next[key];
132
+
133
+ if (!previousDescriptor || !nextDescriptor) {
134
+ return false;
135
+ }
136
+
137
+ return areDescriptorSourcesEquivalent(previousDescriptor, nextDescriptor);
138
+ });
139
+ };
@@ -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
+ };