react-native-screen-transitions 4.0.0-alpha.9 → 4.1.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 (586) hide show
  1. package/README.md +5 -10
  2. package/lib/commonjs/adapters/with-screen-transitions/stack-layout.js +1 -3
  3. package/lib/commonjs/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  4. package/lib/commonjs/components/blank-stack-host.js +21 -0
  5. package/lib/commonjs/components/blank-stack-host.js.map +1 -0
  6. package/lib/commonjs/components/blank-stack-runtime.js +33 -0
  7. package/lib/commonjs/components/blank-stack-runtime.js.map +1 -0
  8. package/lib/commonjs/components/blank-stack-scene.js +31 -0
  9. package/lib/commonjs/components/blank-stack-scene.js.map +1 -0
  10. package/lib/commonjs/components/blank-stack-view.js +23 -0
  11. package/lib/commonjs/components/blank-stack-view.js.map +1 -0
  12. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js +53 -1
  13. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js.map +1 -1
  14. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +43 -8
  15. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  16. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +2 -3
  17. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  18. package/lib/commonjs/components/boundary/utils/source-signals.js +6 -4
  19. package/lib/commonjs/components/boundary/utils/source-signals.js.map +1 -1
  20. package/lib/commonjs/components/overlay/helpers/get-active-overlay.js +3 -24
  21. package/lib/commonjs/components/overlay/helpers/get-active-overlay.js.map +1 -1
  22. package/lib/commonjs/components/overlay/helpers/retain-ready-overlay-resources.js +4 -3
  23. package/lib/commonjs/components/overlay/helpers/retain-ready-overlay-resources.js.map +1 -1
  24. package/lib/commonjs/components/overlay/helpers/run-overlay-slot-interpolator.js +2 -4
  25. package/lib/commonjs/components/overlay/helpers/run-overlay-slot-interpolator.js.map +1 -1
  26. package/lib/commonjs/components/overlay/hooks/use-overlay-slot.js +2 -18
  27. package/lib/commonjs/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  28. package/lib/commonjs/components/overlay/variations/float-overlay.js +0 -2
  29. package/lib/commonjs/components/overlay/variations/float-overlay.js.map +1 -1
  30. package/lib/commonjs/components/overlay/variations/overlay-host.js +18 -16
  31. package/lib/commonjs/components/overlay/variations/overlay-host.js.map +1 -1
  32. package/lib/commonjs/components/screen-container/layers/content.js +10 -5
  33. package/lib/commonjs/components/screen-container/layers/content.js.map +1 -1
  34. package/lib/commonjs/components/screen-container/layers/surface.js +50 -0
  35. package/lib/commonjs/components/screen-container/layers/surface.js.map +1 -0
  36. package/lib/commonjs/components/screen-lifecycle/index.js +2 -2
  37. package/lib/commonjs/components/screen-lifecycle/index.js.map +1 -1
  38. package/lib/commonjs/components/stack-view.js +7 -29
  39. package/lib/commonjs/components/stack-view.js.map +1 -1
  40. package/lib/commonjs/configs/index.js +1 -4
  41. package/lib/commonjs/configs/index.js.map +1 -1
  42. package/lib/commonjs/configs/presets.js +1 -384
  43. package/lib/commonjs/configs/presets.js.map +1 -1
  44. package/lib/commonjs/custom-navigator.js +41 -0
  45. package/lib/commonjs/custom-navigator.js.map +1 -0
  46. package/lib/commonjs/hooks/navigation/use-blank-stack-state.js +26 -0
  47. package/lib/commonjs/hooks/navigation/use-blank-stack-state.js.map +1 -0
  48. package/lib/commonjs/hooks/navigation/use-navigation-helpers.js +2 -2
  49. package/lib/commonjs/hooks/navigation/use-navigation-helpers.js.map +1 -1
  50. package/lib/commonjs/hooks/navigation/use-screen-state.js +1 -1
  51. package/lib/commonjs/hooks/navigation/use-screen-state.js.map +1 -1
  52. package/lib/commonjs/navigators/create-blank-stack-navigator.js +7 -67
  53. package/lib/commonjs/navigators/create-blank-stack-navigator.js.map +1 -1
  54. package/lib/commonjs/navigators/expo-router/index.js +1 -18
  55. package/lib/commonjs/navigators/expo-router/index.js.map +1 -1
  56. package/lib/commonjs/navigators/react-navigation/index.js +1 -3
  57. package/lib/commonjs/navigators/react-navigation/index.js.map +1 -1
  58. package/lib/commonjs/providers/screen/animation/animation.provider.js +17 -25
  59. package/lib/commonjs/providers/screen/animation/animation.provider.js.map +1 -1
  60. package/lib/commonjs/providers/screen/animation/helpers/pipeline.js +19 -36
  61. package/lib/commonjs/providers/screen/animation/helpers/pipeline.js.map +1 -1
  62. package/lib/commonjs/providers/screen/animation/use-screen-animation.js +16 -19
  63. package/lib/commonjs/providers/screen/animation/use-screen-animation.js.map +1 -1
  64. package/lib/commonjs/providers/screen/descriptors/descriptors.provider.js +31 -64
  65. package/lib/commonjs/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  66. package/lib/commonjs/providers/screen/descriptors/index.js +6 -0
  67. package/lib/commonjs/providers/screen/descriptors/index.js.map +1 -1
  68. package/lib/commonjs/providers/screen/gestures/gestures.provider.js +14 -25
  69. package/lib/commonjs/providers/screen/gestures/gestures.provider.js.map +1 -1
  70. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -4
  71. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  72. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture.js +6 -7
  73. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  74. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-coordinator.js +149 -0
  75. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-coordinator.js.map +1 -0
  76. package/lib/commonjs/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js +15 -0
  77. package/lib/commonjs/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js.map +1 -0
  78. package/lib/commonjs/providers/screen/gestures/ownership/use-register-gesture-ownership.js +52 -0
  79. package/lib/commonjs/providers/screen/gestures/ownership/use-register-gesture-ownership.js.map +1 -0
  80. package/lib/commonjs/providers/screen/gestures/pan/activation/pan-activation-decision.js +4 -9
  81. package/lib/commonjs/providers/screen/gestures/pan/activation/pan-activation-decision.js.map +1 -1
  82. package/lib/commonjs/providers/screen/gestures/pan/activation/use-pan-activation.js +3 -3
  83. package/lib/commonjs/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  84. package/lib/commonjs/providers/screen/gestures/pan/use-build-pan-gesture.js +2 -2
  85. package/lib/commonjs/providers/screen/gestures/pan/use-build-pan-gesture.js.map +1 -1
  86. package/lib/commonjs/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +13 -11
  87. package/lib/commonjs/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  88. package/lib/commonjs/providers/screen/gestures/shared/policy.js +4 -9
  89. package/lib/commonjs/providers/screen/gestures/shared/policy.js.map +1 -1
  90. package/lib/commonjs/providers/screen/gestures/types.js +2 -2
  91. package/lib/commonjs/providers/screen/gestures/types.js.map +1 -1
  92. package/lib/commonjs/providers/screen/screen-composer.js +10 -13
  93. package/lib/commonjs/providers/screen/screen-composer.js.map +1 -1
  94. package/lib/commonjs/providers/screen/styles/constants.js +4 -0
  95. package/lib/commonjs/providers/screen/styles/constants.js.map +1 -1
  96. package/lib/commonjs/providers/screen/styles/helpers/create-interpolator-scope.js +3 -15
  97. package/lib/commonjs/providers/screen/styles/helpers/create-interpolator-scope.js.map +1 -1
  98. package/lib/commonjs/providers/screen/styles/hooks/slot-resolvers.js +1 -9
  99. package/lib/commonjs/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
  100. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js +4 -25
  101. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  102. package/lib/commonjs/providers/screen/styles/slot.provider.js +3 -1
  103. package/lib/commonjs/providers/screen/styles/slot.provider.js.map +1 -1
  104. package/lib/commonjs/providers/screen/topology/helpers/create-screen-topology.js +176 -0
  105. package/lib/commonjs/providers/screen/topology/helpers/create-screen-topology.js.map +1 -0
  106. package/lib/commonjs/providers/screen/topology/hooks/use-resolved-transition-key.js +17 -0
  107. package/lib/commonjs/providers/screen/topology/hooks/use-resolved-transition-key.js.map +1 -0
  108. package/lib/commonjs/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.js +1 -1
  109. package/lib/commonjs/providers/screen/topology/hooks/use-screen-relationships.js.map +1 -0
  110. package/lib/commonjs/{factories/screen-topology → providers/screen/topology}/index.js +16 -15
  111. package/lib/commonjs/providers/screen/topology/index.js.map +1 -0
  112. package/lib/commonjs/providers/screen/topology/topology.provider.js +56 -0
  113. package/lib/commonjs/providers/screen/topology/topology.provider.js.map +1 -0
  114. package/lib/commonjs/providers/screen/topology/types.js.map +1 -0
  115. package/lib/commonjs/providers/screen/use-current-screen-relationships.js +2 -2
  116. package/lib/commonjs/providers/screen/use-current-screen-relationships.js.map +1 -1
  117. package/lib/commonjs/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js +10 -4
  118. package/lib/commonjs/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js.map +1 -1
  119. package/lib/commonjs/providers/stack/blank-stack-state/helpers/derive-blank-stack-state.js +4 -3
  120. package/lib/commonjs/providers/stack/blank-stack-state/helpers/derive-blank-stack-state.js.map +1 -1
  121. package/lib/commonjs/providers/stack/blank-stack-state/helpers/reconcile-blank-stack-routes.js.map +1 -1
  122. package/lib/commonjs/providers/stack/blank-stack-state/helpers/state-equality.js +9 -2
  123. package/lib/commonjs/providers/stack/blank-stack-state/helpers/state-equality.js.map +1 -1
  124. package/lib/commonjs/providers/stack/stack-transition/index.js +20 -0
  125. package/lib/commonjs/providers/stack/stack-transition/index.js.map +1 -0
  126. package/lib/commonjs/providers/stack/stack-transition/stack-transition-controller.js +197 -0
  127. package/lib/commonjs/providers/stack/stack-transition/stack-transition-controller.js.map +1 -0
  128. package/lib/commonjs/providers/stack/stack-transition/stack-transition.provider.js +92 -0
  129. package/lib/commonjs/providers/stack/stack-transition/stack-transition.provider.js.map +1 -0
  130. package/lib/commonjs/providers/stack/stack-transition/use-stack-transition.js +46 -0
  131. package/lib/commonjs/providers/stack/stack-transition/use-stack-transition.js.map +1 -0
  132. package/lib/commonjs/types/ownership.types.js +2 -25
  133. package/lib/commonjs/types/ownership.types.js.map +1 -1
  134. package/lib/commonjs/utils/create-provider.js +14 -3
  135. package/lib/commonjs/utils/create-provider.js.map +1 -1
  136. package/lib/module/adapters/with-screen-transitions/stack-layout.js +1 -3
  137. package/lib/module/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  138. package/lib/module/components/blank-stack-host.js +17 -0
  139. package/lib/module/components/blank-stack-host.js.map +1 -0
  140. package/lib/module/components/blank-stack-runtime.js +29 -0
  141. package/lib/module/components/blank-stack-runtime.js.map +1 -0
  142. package/lib/module/components/blank-stack-scene.js +27 -0
  143. package/lib/module/components/blank-stack-scene.js.map +1 -0
  144. package/lib/module/components/blank-stack-view.js +19 -0
  145. package/lib/module/components/blank-stack-view.js.map +1 -0
  146. package/lib/module/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js +50 -0
  147. package/lib/module/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js.map +1 -1
  148. package/lib/module/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +44 -9
  149. package/lib/module/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  150. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +2 -3
  151. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  152. package/lib/module/components/boundary/utils/source-signals.js +6 -4
  153. package/lib/module/components/boundary/utils/source-signals.js.map +1 -1
  154. package/lib/module/components/overlay/helpers/get-active-overlay.js +3 -24
  155. package/lib/module/components/overlay/helpers/get-active-overlay.js.map +1 -1
  156. package/lib/module/components/overlay/helpers/retain-ready-overlay-resources.js +4 -3
  157. package/lib/module/components/overlay/helpers/retain-ready-overlay-resources.js.map +1 -1
  158. package/lib/module/components/overlay/helpers/run-overlay-slot-interpolator.js +2 -4
  159. package/lib/module/components/overlay/helpers/run-overlay-slot-interpolator.js.map +1 -1
  160. package/lib/module/components/overlay/hooks/use-overlay-slot.js +2 -18
  161. package/lib/module/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  162. package/lib/module/components/overlay/variations/float-overlay.js +0 -2
  163. package/lib/module/components/overlay/variations/float-overlay.js.map +1 -1
  164. package/lib/module/components/overlay/variations/overlay-host.js +19 -17
  165. package/lib/module/components/overlay/variations/overlay-host.js.map +1 -1
  166. package/lib/module/components/screen-container/layers/content.js +10 -5
  167. package/lib/module/components/screen-container/layers/content.js.map +1 -1
  168. package/lib/module/components/screen-container/layers/surface.js +45 -0
  169. package/lib/module/components/screen-container/layers/surface.js.map +1 -0
  170. package/lib/module/components/screen-lifecycle/index.js +2 -2
  171. package/lib/module/components/screen-lifecycle/index.js.map +1 -1
  172. package/lib/module/components/stack-view.js +7 -29
  173. package/lib/module/components/stack-view.js.map +1 -1
  174. package/lib/module/configs/index.js +2 -5
  175. package/lib/module/configs/index.js.map +1 -1
  176. package/lib/module/configs/presets.js +0 -380
  177. package/lib/module/configs/presets.js.map +1 -1
  178. package/lib/module/custom-navigator.js +8 -0
  179. package/lib/module/custom-navigator.js.map +1 -0
  180. package/lib/module/hooks/navigation/use-blank-stack-state.js +21 -0
  181. package/lib/module/hooks/navigation/use-blank-stack-state.js.map +1 -0
  182. package/lib/module/hooks/navigation/use-navigation-helpers.js +2 -2
  183. package/lib/module/hooks/navigation/use-navigation-helpers.js.map +1 -1
  184. package/lib/module/hooks/navigation/use-screen-state.js +1 -1
  185. package/lib/module/hooks/navigation/use-screen-state.js.map +1 -1
  186. package/lib/module/navigators/create-blank-stack-navigator.js +7 -66
  187. package/lib/module/navigators/create-blank-stack-navigator.js.map +1 -1
  188. package/lib/module/navigators/expo-router/index.js +1 -18
  189. package/lib/module/navigators/expo-router/index.js.map +1 -1
  190. package/lib/module/navigators/react-navigation/index.js +1 -3
  191. package/lib/module/navigators/react-navigation/index.js.map +1 -1
  192. package/lib/module/providers/screen/animation/animation.provider.js +15 -24
  193. package/lib/module/providers/screen/animation/animation.provider.js.map +1 -1
  194. package/lib/module/providers/screen/animation/helpers/pipeline.js +19 -36
  195. package/lib/module/providers/screen/animation/helpers/pipeline.js.map +1 -1
  196. package/lib/module/providers/screen/animation/use-screen-animation.js +17 -20
  197. package/lib/module/providers/screen/animation/use-screen-animation.js.map +1 -1
  198. package/lib/module/providers/screen/descriptors/descriptors.provider.js +31 -66
  199. package/lib/module/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  200. package/lib/module/providers/screen/descriptors/index.js +1 -1
  201. package/lib/module/providers/screen/descriptors/index.js.map +1 -1
  202. package/lib/module/providers/screen/gestures/gestures.provider.js +16 -27
  203. package/lib/module/providers/screen/gestures/gestures.provider.js.map +1 -1
  204. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -4
  205. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  206. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture.js +6 -7
  207. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  208. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-coordinator.js +144 -0
  209. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-coordinator.js.map +1 -0
  210. package/lib/module/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js +10 -0
  211. package/lib/module/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js.map +1 -0
  212. package/lib/module/providers/screen/gestures/ownership/use-register-gesture-ownership.js +47 -0
  213. package/lib/module/providers/screen/gestures/ownership/use-register-gesture-ownership.js.map +1 -0
  214. package/lib/module/providers/screen/gestures/pan/activation/pan-activation-decision.js +4 -9
  215. package/lib/module/providers/screen/gestures/pan/activation/pan-activation-decision.js.map +1 -1
  216. package/lib/module/providers/screen/gestures/pan/activation/use-pan-activation.js +3 -3
  217. package/lib/module/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  218. package/lib/module/providers/screen/gestures/pan/use-build-pan-gesture.js +2 -2
  219. package/lib/module/providers/screen/gestures/pan/use-build-pan-gesture.js.map +1 -1
  220. package/lib/module/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +13 -11
  221. package/lib/module/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  222. package/lib/module/providers/screen/gestures/shared/policy.js +4 -9
  223. package/lib/module/providers/screen/gestures/shared/policy.js.map +1 -1
  224. package/lib/module/providers/screen/gestures/types.js +1 -1
  225. package/lib/module/providers/screen/gestures/types.js.map +1 -1
  226. package/lib/module/providers/screen/screen-composer.js +10 -13
  227. package/lib/module/providers/screen/screen-composer.js.map +1 -1
  228. package/lib/module/providers/screen/styles/constants.js +4 -0
  229. package/lib/module/providers/screen/styles/constants.js.map +1 -1
  230. package/lib/module/providers/screen/styles/helpers/create-interpolator-scope.js +3 -15
  231. package/lib/module/providers/screen/styles/helpers/create-interpolator-scope.js.map +1 -1
  232. package/lib/module/providers/screen/styles/hooks/slot-resolvers.js +2 -10
  233. package/lib/module/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
  234. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js +4 -25
  235. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  236. package/lib/module/providers/screen/styles/slot.provider.js +1 -0
  237. package/lib/module/providers/screen/styles/slot.provider.js.map +1 -1
  238. package/lib/module/providers/screen/topology/helpers/create-screen-topology.js +171 -0
  239. package/lib/module/providers/screen/topology/helpers/create-screen-topology.js.map +1 -0
  240. package/lib/module/providers/screen/topology/hooks/use-resolved-transition-key.js +12 -0
  241. package/lib/module/providers/screen/topology/hooks/use-resolved-transition-key.js.map +1 -0
  242. package/lib/module/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.js +1 -1
  243. package/lib/module/providers/screen/topology/hooks/use-screen-relationships.js.map +1 -0
  244. package/lib/module/providers/screen/topology/index.js +7 -0
  245. package/lib/module/providers/screen/topology/index.js.map +1 -0
  246. package/lib/module/providers/screen/topology/topology.provider.js +50 -0
  247. package/lib/module/providers/screen/topology/topology.provider.js.map +1 -0
  248. package/lib/module/providers/screen/topology/types.js.map +1 -0
  249. package/lib/module/providers/screen/use-current-screen-relationships.js +1 -1
  250. package/lib/module/providers/screen/use-current-screen-relationships.js.map +1 -1
  251. package/lib/module/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js +11 -5
  252. package/lib/module/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js.map +1 -1
  253. package/lib/module/providers/stack/blank-stack-state/helpers/derive-blank-stack-state.js +5 -4
  254. package/lib/module/providers/stack/blank-stack-state/helpers/derive-blank-stack-state.js.map +1 -1
  255. package/lib/module/providers/stack/blank-stack-state/helpers/reconcile-blank-stack-routes.js.map +1 -1
  256. package/lib/module/providers/stack/blank-stack-state/helpers/state-equality.js +7 -1
  257. package/lib/module/providers/stack/blank-stack-state/helpers/state-equality.js.map +1 -1
  258. package/lib/module/providers/stack/stack-transition/index.js +5 -0
  259. package/lib/module/providers/stack/stack-transition/index.js.map +1 -0
  260. package/lib/module/providers/stack/stack-transition/stack-transition-controller.js +189 -0
  261. package/lib/module/providers/stack/stack-transition/stack-transition-controller.js.map +1 -0
  262. package/lib/module/providers/stack/stack-transition/stack-transition.provider.js +85 -0
  263. package/lib/module/providers/stack/stack-transition/stack-transition.provider.js.map +1 -0
  264. package/lib/module/providers/stack/stack-transition/use-stack-transition.js +41 -0
  265. package/lib/module/providers/stack/stack-transition/use-stack-transition.js.map +1 -0
  266. package/lib/module/types/animation.types.js +10 -0
  267. package/lib/module/types/animation.types.js.map +1 -1
  268. package/lib/module/types/ownership.types.js +1 -24
  269. package/lib/module/types/ownership.types.js.map +1 -1
  270. package/lib/module/utils/create-provider.js +14 -3
  271. package/lib/module/utils/create-provider.js.map +1 -1
  272. package/lib/typescript/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -1
  273. package/lib/typescript/components/blank-stack-host.d.ts +9 -0
  274. package/lib/typescript/components/blank-stack-host.d.ts.map +1 -0
  275. package/lib/typescript/components/blank-stack-runtime.d.ts +8 -0
  276. package/lib/typescript/components/blank-stack-runtime.d.ts.map +1 -0
  277. package/lib/typescript/components/blank-stack-scene.d.ts +5 -0
  278. package/lib/typescript/components/blank-stack-scene.d.ts.map +1 -0
  279. package/lib/typescript/components/blank-stack-view.d.ts +2 -0
  280. package/lib/typescript/components/blank-stack-view.d.ts.map +1 -0
  281. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.d.ts +20 -1
  282. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.d.ts.map +1 -1
  283. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts.map +1 -1
  284. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts.map +1 -1
  285. package/lib/typescript/components/boundary/utils/source-signals.d.ts.map +1 -1
  286. package/lib/typescript/components/overlay/helpers/get-active-overlay.d.ts +2 -8
  287. package/lib/typescript/components/overlay/helpers/get-active-overlay.d.ts.map +1 -1
  288. package/lib/typescript/components/overlay/helpers/retain-ready-overlay-resources.d.ts +2 -1
  289. package/lib/typescript/components/overlay/helpers/retain-ready-overlay-resources.d.ts.map +1 -1
  290. package/lib/typescript/components/overlay/helpers/run-overlay-slot-interpolator.d.ts +2 -3
  291. package/lib/typescript/components/overlay/helpers/run-overlay-slot-interpolator.d.ts.map +1 -1
  292. package/lib/typescript/components/overlay/hooks/use-overlay-slot.d.ts.map +1 -1
  293. package/lib/typescript/components/overlay/variations/float-overlay.d.ts.map +1 -1
  294. package/lib/typescript/components/overlay/variations/overlay-host.d.ts +2 -3
  295. package/lib/typescript/components/overlay/variations/overlay-host.d.ts.map +1 -1
  296. package/lib/typescript/components/screen-container/layers/content.d.ts.map +1 -1
  297. package/lib/typescript/components/screen-container/layers/surface.d.ts +7 -0
  298. package/lib/typescript/components/screen-container/layers/surface.d.ts.map +1 -0
  299. package/lib/typescript/components/stack-view.d.ts +1 -1
  300. package/lib/typescript/components/stack-view.d.ts.map +1 -1
  301. package/lib/typescript/configs/index.d.ts +0 -9
  302. package/lib/typescript/configs/index.d.ts.map +1 -1
  303. package/lib/typescript/configs/presets.d.ts +0 -9
  304. package/lib/typescript/configs/presets.d.ts.map +1 -1
  305. package/lib/typescript/custom-navigator.d.ts +8 -0
  306. package/lib/typescript/custom-navigator.d.ts.map +1 -0
  307. package/lib/typescript/hooks/navigation/use-blank-stack-state.d.ts +8 -0
  308. package/lib/typescript/hooks/navigation/use-blank-stack-state.d.ts.map +1 -0
  309. package/lib/typescript/hooks/navigation/use-navigation-helpers.d.ts.map +1 -1
  310. package/lib/typescript/index.d.ts +1 -10
  311. package/lib/typescript/index.d.ts.map +1 -1
  312. package/lib/typescript/navigators/create-blank-stack-navigator.d.ts +2 -4
  313. package/lib/typescript/navigators/create-blank-stack-navigator.d.ts.map +1 -1
  314. package/lib/typescript/navigators/expo-router/index.d.ts +3 -3
  315. package/lib/typescript/navigators/expo-router/index.d.ts.map +1 -1
  316. package/lib/typescript/navigators/react-navigation/index.d.ts +1 -1
  317. package/lib/typescript/navigators/react-navigation/index.d.ts.map +1 -1
  318. package/lib/typescript/providers/screen/animation/animation.provider.d.ts +12 -6
  319. package/lib/typescript/providers/screen/animation/animation.provider.d.ts.map +1 -1
  320. package/lib/typescript/providers/screen/animation/helpers/pipeline.d.ts +2 -4
  321. package/lib/typescript/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  322. package/lib/typescript/providers/screen/animation/types.d.ts +0 -9
  323. package/lib/typescript/providers/screen/animation/types.d.ts.map +1 -1
  324. package/lib/typescript/providers/screen/animation/use-screen-animation.d.ts.map +1 -1
  325. package/lib/typescript/providers/screen/descriptors/descriptors.provider.d.ts +9 -11
  326. package/lib/typescript/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  327. package/lib/typescript/providers/screen/descriptors/index.d.ts +1 -1
  328. package/lib/typescript/providers/screen/descriptors/index.d.ts.map +1 -1
  329. package/lib/typescript/providers/screen/gestures/gestures.provider.d.ts +9 -12
  330. package/lib/typescript/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
  331. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts +2 -2
  332. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts.map +1 -1
  333. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture.d.ts +3 -2
  334. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture.d.ts.map +1 -1
  335. package/lib/typescript/providers/screen/gestures/index.d.ts +1 -1
  336. package/lib/typescript/providers/screen/gestures/index.d.ts.map +1 -1
  337. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-coordinator.d.ts +26 -0
  338. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-coordinator.d.ts.map +1 -0
  339. package/lib/typescript/providers/screen/gestures/ownership/use-gesture-scroll-coordination.d.ts +3 -0
  340. package/lib/typescript/providers/screen/gestures/ownership/use-gesture-scroll-coordination.d.ts.map +1 -0
  341. package/lib/typescript/providers/screen/gestures/ownership/use-register-gesture-ownership.d.ts +9 -0
  342. package/lib/typescript/providers/screen/gestures/ownership/use-register-gesture-ownership.d.ts.map +1 -0
  343. package/lib/typescript/providers/screen/gestures/pan/activation/pan-activation-decision.d.ts +4 -4
  344. package/lib/typescript/providers/screen/gestures/pan/activation/pan-activation-decision.d.ts.map +1 -1
  345. package/lib/typescript/providers/screen/gestures/pan/activation/use-pan-activation.d.ts +3 -3
  346. package/lib/typescript/providers/screen/gestures/pan/activation/use-pan-activation.d.ts.map +1 -1
  347. package/lib/typescript/providers/screen/gestures/pan/use-build-pan-gesture.d.ts +3 -3
  348. package/lib/typescript/providers/screen/gestures/pan/use-build-pan-gesture.d.ts.map +1 -1
  349. package/lib/typescript/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.d.ts.map +1 -1
  350. package/lib/typescript/providers/screen/gestures/shared/policy.d.ts +2 -3
  351. package/lib/typescript/providers/screen/gestures/shared/policy.d.ts.map +1 -1
  352. package/lib/typescript/providers/screen/gestures/types.d.ts +4 -18
  353. package/lib/typescript/providers/screen/gestures/types.d.ts.map +1 -1
  354. package/lib/typescript/providers/screen/screen-composer.d.ts +2 -6
  355. package/lib/typescript/providers/screen/screen-composer.d.ts.map +1 -1
  356. package/lib/typescript/providers/screen/styles/constants.d.ts.map +1 -1
  357. package/lib/typescript/providers/screen/styles/helpers/create-interpolator-scope.d.ts +2 -3
  358. package/lib/typescript/providers/screen/styles/helpers/create-interpolator-scope.d.ts.map +1 -1
  359. package/lib/typescript/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -1
  360. package/lib/typescript/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  361. package/lib/typescript/providers/screen/styles/slot.provider.d.ts +11 -2
  362. package/lib/typescript/providers/screen/styles/slot.provider.d.ts.map +1 -1
  363. package/lib/typescript/{factories/screen-topology → providers/screen/topology/helpers}/create-screen-topology.d.ts +1 -1
  364. package/lib/typescript/providers/screen/topology/helpers/create-screen-topology.d.ts.map +1 -0
  365. package/lib/typescript/providers/screen/topology/hooks/use-resolved-transition-key.d.ts +3 -0
  366. package/lib/typescript/providers/screen/topology/hooks/use-resolved-transition-key.d.ts.map +1 -0
  367. package/lib/typescript/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.d.ts +1 -0
  368. package/lib/typescript/providers/screen/topology/hooks/use-screen-relationships.d.ts.map +1 -0
  369. package/lib/typescript/providers/screen/topology/index.d.ts +6 -0
  370. package/lib/typescript/providers/screen/topology/index.d.ts.map +1 -0
  371. package/lib/typescript/providers/screen/topology/topology.provider.d.ts +13 -0
  372. package/lib/typescript/providers/screen/topology/topology.provider.d.ts.map +1 -0
  373. package/lib/typescript/{factories/screen-topology → providers/screen/topology}/types.d.ts +7 -1
  374. package/lib/typescript/providers/screen/topology/types.d.ts.map +1 -0
  375. package/lib/typescript/providers/screen/use-current-screen-relationships.d.ts +1 -0
  376. package/lib/typescript/providers/screen/use-current-screen-relationships.d.ts.map +1 -1
  377. package/lib/typescript/providers/stack/blank-stack-state/helpers/build-blank-stack-state.d.ts +3 -3
  378. package/lib/typescript/providers/stack/blank-stack-state/helpers/build-blank-stack-state.d.ts.map +1 -1
  379. package/lib/typescript/providers/stack/blank-stack-state/helpers/derive-blank-stack-state.d.ts.map +1 -1
  380. package/lib/typescript/providers/stack/blank-stack-state/helpers/reconcile-blank-stack-routes.d.ts +3 -2
  381. package/lib/typescript/providers/stack/blank-stack-state/helpers/reconcile-blank-stack-routes.d.ts.map +1 -1
  382. package/lib/typescript/providers/stack/blank-stack-state/helpers/state-equality.d.ts +4 -4
  383. package/lib/typescript/providers/stack/blank-stack-state/helpers/state-equality.d.ts.map +1 -1
  384. package/lib/typescript/providers/stack/blank-stack-state/helpers/types.d.ts +6 -5
  385. package/lib/typescript/providers/stack/blank-stack-state/helpers/types.d.ts.map +1 -1
  386. package/lib/typescript/providers/stack/blank-stack.provider.d.ts +3 -1
  387. package/lib/typescript/providers/stack/blank-stack.provider.d.ts.map +1 -1
  388. package/lib/typescript/providers/stack/stack-transition/index.d.ts +3 -0
  389. package/lib/typescript/providers/stack/stack-transition/index.d.ts.map +1 -0
  390. package/lib/typescript/providers/stack/stack-transition/stack-transition-controller.d.ts +48 -0
  391. package/lib/typescript/providers/stack/stack-transition/stack-transition-controller.d.ts.map +1 -0
  392. package/lib/typescript/providers/stack/stack-transition/stack-transition.provider.d.ts +14 -0
  393. package/lib/typescript/providers/stack/stack-transition/stack-transition.provider.d.ts.map +1 -0
  394. package/lib/typescript/providers/stack/stack-transition/use-stack-transition.d.ts +12 -0
  395. package/lib/typescript/providers/stack/stack-transition/use-stack-transition.d.ts.map +1 -0
  396. package/lib/typescript/types/animation.types.d.ts +16 -22
  397. package/lib/typescript/types/animation.types.d.ts.map +1 -1
  398. package/lib/typescript/types/blank-stack.types.d.ts +2 -23
  399. package/lib/typescript/types/blank-stack.types.d.ts.map +1 -1
  400. package/lib/typescript/types/bounds.types.d.ts +1 -1
  401. package/lib/typescript/types/bounds.types.d.ts.map +1 -1
  402. package/lib/typescript/types/index.d.ts +2 -2
  403. package/lib/typescript/types/index.d.ts.map +1 -1
  404. package/lib/typescript/types/ownership.types.d.ts +1 -18
  405. package/lib/typescript/types/ownership.types.d.ts.map +1 -1
  406. package/lib/typescript/types/providers/blank-stack-provider.types.d.ts +8 -6
  407. package/lib/typescript/types/providers/blank-stack-provider.types.d.ts.map +1 -1
  408. package/lib/typescript/types/screen.types.d.ts +40 -0
  409. package/lib/typescript/types/screen.types.d.ts.map +1 -1
  410. package/lib/typescript/utils/create-provider.d.ts +4 -1
  411. package/lib/typescript/utils/create-provider.d.ts.map +1 -1
  412. package/package.json +9 -8
  413. package/src/adapters/with-screen-transitions/stack-layout.tsx +1 -9
  414. package/src/components/blank-stack-host.tsx +21 -0
  415. package/src/components/blank-stack-runtime.tsx +37 -0
  416. package/src/components/blank-stack-scene.tsx +30 -0
  417. package/src/components/blank-stack-view.tsx +19 -0
  418. package/src/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.ts +89 -0
  419. package/src/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.ts +97 -14
  420. package/src/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.ts +2 -6
  421. package/src/components/boundary/utils/source-signals.ts +6 -4
  422. package/src/components/overlay/helpers/get-active-overlay.ts +4 -36
  423. package/src/components/overlay/helpers/retain-ready-overlay-resources.ts +10 -1
  424. package/src/components/overlay/helpers/run-overlay-slot-interpolator.ts +0 -4
  425. package/src/components/overlay/hooks/use-overlay-slot.ts +1 -30
  426. package/src/components/overlay/variations/float-overlay.tsx +9 -12
  427. package/src/components/overlay/variations/overlay-host.tsx +24 -23
  428. package/src/components/screen-container/layers/content.tsx +12 -7
  429. package/src/components/screen-container/layers/surface.tsx +65 -0
  430. package/src/components/screen-lifecycle/index.tsx +2 -2
  431. package/src/components/stack-view.tsx +8 -39
  432. package/src/configs/index.ts +0 -6
  433. package/src/configs/presets.ts +0 -447
  434. package/src/custom-navigator.ts +25 -0
  435. package/src/hooks/navigation/use-blank-stack-state.ts +24 -0
  436. package/src/hooks/navigation/use-navigation-helpers.ts +4 -2
  437. package/src/hooks/navigation/use-screen-state.ts +1 -1
  438. package/src/index.ts +3 -2
  439. package/src/navigators/create-blank-stack-navigator.tsx +16 -124
  440. package/src/navigators/expo-router/index.tsx +0 -23
  441. package/src/navigators/react-navigation/index.tsx +0 -3
  442. package/src/providers/screen/animation/animation.provider.tsx +32 -66
  443. package/src/providers/screen/animation/helpers/pipeline.ts +14 -26
  444. package/src/providers/screen/animation/types.ts +0 -11
  445. package/src/providers/screen/animation/use-screen-animation.tsx +40 -20
  446. package/src/providers/screen/descriptors/descriptors.provider.tsx +43 -99
  447. package/src/providers/screen/descriptors/index.tsx +1 -0
  448. package/src/providers/screen/gestures/gestures.provider.tsx +14 -55
  449. package/src/providers/screen/gestures/hooks/use-screen-gesture-config.ts +3 -6
  450. package/src/providers/screen/gestures/hooks/use-screen-gesture.ts +13 -13
  451. package/src/providers/screen/gestures/index.tsx +0 -2
  452. package/src/providers/screen/gestures/ownership/gesture-ownership-coordinator.ts +252 -0
  453. package/src/providers/screen/gestures/ownership/use-gesture-scroll-coordination.ts +23 -0
  454. package/src/providers/screen/gestures/ownership/use-register-gesture-ownership.ts +73 -0
  455. package/src/providers/screen/gestures/pan/activation/pan-activation-decision.ts +6 -20
  456. package/src/providers/screen/gestures/pan/activation/use-pan-activation.ts +5 -5
  457. package/src/providers/screen/gestures/pan/use-build-pan-gesture.ts +4 -4
  458. package/src/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.ts +9 -12
  459. package/src/providers/screen/gestures/shared/policy.ts +0 -8
  460. package/src/providers/screen/gestures/types.ts +4 -19
  461. package/src/providers/screen/screen-composer.tsx +18 -29
  462. package/src/providers/screen/styles/constants.ts +2 -0
  463. package/src/providers/screen/styles/helpers/create-interpolator-scope.ts +2 -21
  464. package/src/providers/screen/styles/hooks/slot-resolvers.tsx +2 -17
  465. package/src/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +0 -29
  466. package/src/providers/screen/styles/slot.provider.tsx +2 -0
  467. package/src/{factories/screen-topology → providers/screen/topology/helpers}/create-screen-topology.ts +97 -53
  468. package/src/providers/screen/topology/hooks/use-resolved-transition-key.ts +29 -0
  469. package/src/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.ts +1 -1
  470. package/src/providers/screen/topology/index.ts +16 -0
  471. package/src/providers/screen/topology/topology.provider.tsx +72 -0
  472. package/src/{factories/screen-topology → providers/screen/topology}/types.ts +7 -1
  473. package/src/providers/screen/use-current-screen-relationships.ts +1 -1
  474. package/src/providers/stack/blank-stack-state/helpers/build-blank-stack-state.ts +31 -12
  475. package/src/providers/stack/blank-stack-state/helpers/derive-blank-stack-state.ts +11 -3
  476. package/src/providers/stack/blank-stack-state/helpers/reconcile-blank-stack-routes.ts +2 -2
  477. package/src/providers/stack/blank-stack-state/helpers/state-equality.ts +25 -11
  478. package/src/providers/stack/blank-stack-state/helpers/types.ts +9 -4
  479. package/src/providers/stack/stack-transition/index.ts +5 -0
  480. package/src/providers/stack/stack-transition/stack-transition-controller.ts +341 -0
  481. package/src/providers/stack/stack-transition/stack-transition.provider.tsx +120 -0
  482. package/src/providers/stack/stack-transition/use-stack-transition.ts +77 -0
  483. package/src/types/animation.types.ts +16 -28
  484. package/src/types/blank-stack.types.ts +1 -29
  485. package/src/types/bounds.types.ts +1 -4
  486. package/src/types/index.ts +3 -2
  487. package/src/types/ownership.types.ts +1 -26
  488. package/src/types/providers/blank-stack-provider.types.ts +14 -11
  489. package/src/types/screen.types.ts +46 -0
  490. package/src/utils/create-provider.tsx +22 -4
  491. package/lib/commonjs/components/boundary/portal/utils/teleport-control.js +0 -16
  492. package/lib/commonjs/components/boundary/portal/utils/teleport-control.js.map +0 -1
  493. package/lib/commonjs/factories/screen-topology/create-screen-topology.js +0 -147
  494. package/lib/commonjs/factories/screen-topology/create-screen-topology.js.map +0 -1
  495. package/lib/commonjs/factories/screen-topology/index.js.map +0 -1
  496. package/lib/commonjs/factories/screen-topology/types.js.map +0 -1
  497. package/lib/commonjs/factories/screen-topology/use-screen-relationships.js.map +0 -1
  498. package/lib/commonjs/factories/screen-topology/worklet.js +0 -55
  499. package/lib/commonjs/factories/screen-topology/worklet.js.map +0 -1
  500. package/lib/commonjs/providers/navigation/navigation-host.provider.js +0 -56
  501. package/lib/commonjs/providers/navigation/navigation-host.provider.js.map +0 -1
  502. package/lib/commonjs/providers/navigation/react-navigation-host.js +0 -23
  503. package/lib/commonjs/providers/navigation/react-navigation-host.js.map +0 -1
  504. package/lib/commonjs/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +0 -62
  505. package/lib/commonjs/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +0 -1
  506. package/lib/commonjs/providers/screen/animation/helpers/read-screen-animation-revisions.js +0 -16
  507. package/lib/commonjs/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +0 -1
  508. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-bridge.js +0 -128
  509. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +0 -1
  510. package/lib/commonjs/providers/screen/gestures/ownership/resolve-ownership.js +0 -71
  511. package/lib/commonjs/providers/screen/gestures/ownership/resolve-ownership.js.map +0 -1
  512. package/lib/commonjs/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +0 -54
  513. package/lib/commonjs/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +0 -1
  514. package/lib/commonjs/providers/screen/styles/helpers/collect-interpolator-shared-values.js +0 -50
  515. package/lib/commonjs/providers/screen/styles/helpers/collect-interpolator-shared-values.js.map +0 -1
  516. package/lib/commonjs/utils/resolve-chain-target.js +0 -29
  517. package/lib/commonjs/utils/resolve-chain-target.js.map +0 -1
  518. package/lib/module/components/boundary/portal/utils/teleport-control.js +0 -11
  519. package/lib/module/components/boundary/portal/utils/teleport-control.js.map +0 -1
  520. package/lib/module/factories/screen-topology/create-screen-topology.js +0 -142
  521. package/lib/module/factories/screen-topology/create-screen-topology.js.map +0 -1
  522. package/lib/module/factories/screen-topology/index.js +0 -6
  523. package/lib/module/factories/screen-topology/index.js.map +0 -1
  524. package/lib/module/factories/screen-topology/types.js.map +0 -1
  525. package/lib/module/factories/screen-topology/use-screen-relationships.js.map +0 -1
  526. package/lib/module/factories/screen-topology/worklet.js +0 -48
  527. package/lib/module/factories/screen-topology/worklet.js.map +0 -1
  528. package/lib/module/providers/navigation/navigation-host.provider.js +0 -50
  529. package/lib/module/providers/navigation/navigation-host.provider.js.map +0 -1
  530. package/lib/module/providers/navigation/react-navigation-host.js +0 -19
  531. package/lib/module/providers/navigation/react-navigation-host.js.map +0 -1
  532. package/lib/module/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +0 -56
  533. package/lib/module/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +0 -1
  534. package/lib/module/providers/screen/animation/helpers/read-screen-animation-revisions.js +0 -11
  535. package/lib/module/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +0 -1
  536. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-bridge.js +0 -124
  537. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +0 -1
  538. package/lib/module/providers/screen/gestures/ownership/resolve-ownership.js +0 -67
  539. package/lib/module/providers/screen/gestures/ownership/resolve-ownership.js.map +0 -1
  540. package/lib/module/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +0 -50
  541. package/lib/module/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +0 -1
  542. package/lib/module/providers/screen/styles/helpers/collect-interpolator-shared-values.js +0 -45
  543. package/lib/module/providers/screen/styles/helpers/collect-interpolator-shared-values.js.map +0 -1
  544. package/lib/module/utils/resolve-chain-target.js +0 -25
  545. package/lib/module/utils/resolve-chain-target.js.map +0 -1
  546. package/lib/typescript/components/boundary/portal/utils/teleport-control.d.ts +0 -3
  547. package/lib/typescript/components/boundary/portal/utils/teleport-control.d.ts.map +0 -1
  548. package/lib/typescript/factories/screen-topology/create-screen-topology.d.ts.map +0 -1
  549. package/lib/typescript/factories/screen-topology/index.d.ts +0 -5
  550. package/lib/typescript/factories/screen-topology/index.d.ts.map +0 -1
  551. package/lib/typescript/factories/screen-topology/types.d.ts.map +0 -1
  552. package/lib/typescript/factories/screen-topology/use-screen-relationships.d.ts.map +0 -1
  553. package/lib/typescript/factories/screen-topology/worklet.d.ts +0 -5
  554. package/lib/typescript/factories/screen-topology/worklet.d.ts.map +0 -1
  555. package/lib/typescript/providers/navigation/navigation-host.provider.d.ts +0 -21
  556. package/lib/typescript/providers/navigation/navigation-host.provider.d.ts.map +0 -1
  557. package/lib/typescript/providers/navigation/react-navigation-host.d.ts +0 -3
  558. package/lib/typescript/providers/navigation/react-navigation-host.d.ts.map +0 -1
  559. package/lib/typescript/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts +0 -9
  560. package/lib/typescript/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts.map +0 -1
  561. package/lib/typescript/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts +0 -6
  562. package/lib/typescript/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts.map +0 -1
  563. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts +0 -3
  564. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts.map +0 -1
  565. package/lib/typescript/providers/screen/gestures/ownership/resolve-ownership.d.ts +0 -32
  566. package/lib/typescript/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +0 -1
  567. package/lib/typescript/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts +0 -11
  568. package/lib/typescript/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts.map +0 -1
  569. package/lib/typescript/providers/screen/styles/helpers/collect-interpolator-shared-values.d.ts +0 -4
  570. package/lib/typescript/providers/screen/styles/helpers/collect-interpolator-shared-values.d.ts.map +0 -1
  571. package/lib/typescript/utils/resolve-chain-target.d.ts +0 -11
  572. package/lib/typescript/utils/resolve-chain-target.d.ts.map +0 -1
  573. package/src/components/boundary/portal/utils/teleport-control.ts +0 -13
  574. package/src/factories/screen-topology/index.ts +0 -16
  575. package/src/factories/screen-topology/worklet.ts +0 -60
  576. package/src/providers/navigation/navigation-host.provider.tsx +0 -75
  577. package/src/providers/navigation/react-navigation-host.tsx +0 -24
  578. package/src/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +0 -96
  579. package/src/providers/screen/animation/helpers/read-screen-animation-revisions.ts +0 -15
  580. package/src/providers/screen/gestures/ownership/gesture-ownership-bridge.tsx +0 -173
  581. package/src/providers/screen/gestures/ownership/resolve-ownership.ts +0 -90
  582. package/src/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.ts +0 -88
  583. package/src/providers/screen/styles/helpers/collect-interpolator-shared-values.ts +0 -75
  584. package/src/utils/resolve-chain-target.ts +0 -33
  585. /package/lib/commonjs/{factories/screen-topology → providers/screen/topology}/types.js +0 -0
  586. /package/lib/module/{factories/screen-topology → providers/screen/topology}/types.js +0 -0
@@ -18,6 +18,7 @@ type Props = { children: ReactNode };
18
18
  export type ScreenSlotName =
19
19
  | "overlay"
20
20
  | "content"
21
+ | "surface"
21
22
  | "backdrop"
22
23
  | typeof NAVIGATION_MASK_CONTAINER_STYLE_ID
23
24
  | typeof NAVIGATION_MASK_ELEMENT_STYLE_ID;
@@ -33,6 +34,7 @@ const createScreenSlotProvider = createProvider("ScreenSlot", {
33
34
  })<Props, ScreenSlotContextValue>;
34
35
 
35
36
  export const {
37
+ StoreProvider: ScreenSlotStoreProvider,
36
38
  ScreenSlotProvider,
37
39
  useOptionalScreenSlotStore,
38
40
  useScreenSlotStore,
@@ -3,28 +3,35 @@ import type {
3
3
  ScreenRelationships,
4
4
  ScreenTopology,
5
5
  ScreenTopologyRegistration,
6
- } from "./types";
6
+ } from "../types";
7
7
 
8
8
  type ScreenNode = {
9
+ registered: boolean;
10
+ navigatorKey: string | null;
9
11
  parentScreenKey: string | null;
10
12
  activeChildScreenKeys: string[];
13
+ transitionKey: string | null;
11
14
  };
12
15
 
13
16
  const EMPTY_RELATIONSHIPS: ScreenRelationships = {
14
17
  parentScreenKey: null,
15
18
  activeChildScreenKey: null,
19
+ activeChildNavigatorKey: null,
16
20
  };
17
21
 
18
22
  const areRelationshipsEqual = (
19
23
  left: ScreenRelationships,
20
24
  right: ScreenRelationships,
21
- ): boolean =>
25
+ ) =>
22
26
  left.parentScreenKey === right.parentScreenKey &&
23
- left.activeChildScreenKey === right.activeChildScreenKey;
27
+ left.activeChildScreenKey === right.activeChildScreenKey &&
28
+ left.activeChildNavigatorKey === right.activeChildNavigatorKey;
24
29
 
25
30
  export const createScreenTopology = (): ScreenTopology => {
26
31
  const nodes = new Map<string, ScreenNode>();
32
+ const screenKeyByTransitionKey = new Map<string, string>();
27
33
  const listenersByScreenKey = new Map<string, Set<() => void>>();
34
+ const resolutionListeners = new Set<() => void>();
28
35
  const relationshipCache = new Map<string, ScreenRelationships>();
29
36
 
30
37
  const getNode = (screenKey: string) => nodes.get(screenKey);
@@ -33,8 +40,11 @@ export const createScreenTopology = (): ScreenTopology => {
33
40
  if (existing) return existing;
34
41
 
35
42
  const node: ScreenNode = {
43
+ registered: false,
44
+ navigatorKey: null,
36
45
  parentScreenKey: null,
37
46
  activeChildScreenKeys: [],
47
+ transitionKey: null,
38
48
  };
39
49
  nodes.set(screenKey, node);
40
50
  return node;
@@ -44,6 +54,7 @@ export const createScreenTopology = (): ScreenTopology => {
44
54
  const node = getNode(screenKey);
45
55
  if (
46
56
  node &&
57
+ !node.registered &&
47
58
  !node.parentScreenKey &&
48
59
  node.activeChildScreenKeys.length === 0
49
60
  ) {
@@ -53,27 +64,30 @@ export const createScreenTopology = (): ScreenTopology => {
53
64
 
54
65
  const getParent = (screenKey: string) =>
55
66
  getNode(screenKey)?.parentScreenKey ?? null;
56
-
57
67
  const getActiveChild = (screenKey: string) => {
58
- const activeChildScreenKeys = getNode(screenKey)?.activeChildScreenKeys;
59
- return activeChildScreenKeys?.[activeChildScreenKeys.length - 1] ?? null;
68
+ const children = getNode(screenKey)?.activeChildScreenKeys;
69
+ return children?.[children.length - 1] ?? null;
60
70
  };
61
71
 
62
72
  const materializeRelationships = (screenKey: string): ScreenRelationships => {
63
73
  const parentScreenKey = getParent(screenKey);
64
74
  const activeChildScreenKey = getActiveChild(screenKey);
75
+ const activeChildNavigatorKey = activeChildScreenKey
76
+ ? (getNode(activeChildScreenKey)?.navigatorKey ?? null)
77
+ : null;
65
78
 
66
- if (!parentScreenKey && !activeChildScreenKey) {
67
- return EMPTY_RELATIONSHIPS;
68
- }
79
+ if (!parentScreenKey && !activeChildScreenKey) return EMPTY_RELATIONSHIPS;
69
80
 
70
- return { parentScreenKey, activeChildScreenKey };
81
+ return {
82
+ parentScreenKey,
83
+ activeChildScreenKey,
84
+ activeChildNavigatorKey,
85
+ };
71
86
  };
72
87
 
73
88
  const getRelationships = (screenKey: string) => {
74
89
  const cached = relationshipCache.get(screenKey);
75
90
  if (cached) return cached;
76
-
77
91
  const relationships = materializeRelationships(screenKey);
78
92
  relationshipCache.set(screenKey, relationships);
79
93
  return relationships;
@@ -93,83 +107,110 @@ export const createScreenTopology = (): ScreenTopology => {
93
107
  }
94
108
 
95
109
  for (const [screenKey, previous] of previousRelationships) {
96
- const listeners = listenersByScreenKey.get(screenKey);
97
- if (!listeners) continue;
98
-
99
110
  const next = getRelationships(screenKey);
100
111
  if (areRelationshipsEqual(previous, next)) {
101
112
  relationshipCache.set(screenKey, previous);
102
113
  continue;
103
114
  }
104
-
105
- for (const listener of listeners) listener();
115
+ for (const listener of listenersByScreenKey.get(screenKey) ?? []) {
116
+ listener();
117
+ }
106
118
  }
119
+
120
+ for (const listener of resolutionListeners) listener();
107
121
  };
108
122
 
109
123
  const register = ({
110
124
  screenKey,
125
+ navigatorKey,
111
126
  parentScreenKey,
127
+ transitionKey,
112
128
  }: ScreenTopologyRegistration) => {
129
+ const transitionKeyOwner = transitionKey
130
+ ? screenKeyByTransitionKey.get(transitionKey)
131
+ : undefined;
132
+ if (transitionKeyOwner && transitionKeyOwner !== screenKey) {
133
+ throw new Error(
134
+ `Transition key "${transitionKey}" is already registered by screen "${transitionKeyOwner}".`,
135
+ );
136
+ }
137
+
113
138
  mutate(new Set([screenKey]), () => {
114
- ensureNode(screenKey).parentScreenKey = parentScreenKey ?? null;
139
+ const node = ensureNode(screenKey);
140
+ if (
141
+ node.transitionKey &&
142
+ node.transitionKey !== transitionKey &&
143
+ screenKeyByTransitionKey.get(node.transitionKey) === screenKey
144
+ ) {
145
+ screenKeyByTransitionKey.delete(node.transitionKey);
146
+ }
147
+
148
+ node.registered = true;
149
+ node.navigatorKey = navigatorKey ?? null;
150
+ node.parentScreenKey = parentScreenKey ?? null;
151
+ node.transitionKey = transitionKey ?? null;
152
+ if (transitionKey) screenKeyByTransitionKey.set(transitionKey, screenKey);
115
153
  });
116
154
  };
117
155
 
118
156
  const unregister = (screenKey: string) => {
119
157
  const node = getNode(screenKey);
120
158
  if (!node) return;
121
-
122
159
  const affectedScreenKeys = new Set([screenKey]);
123
- if (node.parentScreenKey) {
124
- affectedScreenKeys.add(node.parentScreenKey);
125
- }
160
+ if (node.parentScreenKey) affectedScreenKeys.add(node.parentScreenKey);
126
161
 
127
162
  mutate(affectedScreenKeys, () => {
163
+ if (
164
+ node.transitionKey &&
165
+ screenKeyByTransitionKey.get(node.transitionKey) === screenKey
166
+ ) {
167
+ screenKeyByTransitionKey.delete(node.transitionKey);
168
+ }
169
+
128
170
  if (node.parentScreenKey) {
129
171
  const parent = getNode(node.parentScreenKey);
130
172
  if (parent) {
131
173
  parent.activeChildScreenKeys = parent.activeChildScreenKeys.filter(
132
- (activeScreenKey) => activeScreenKey !== screenKey,
174
+ (childScreenKey) => childScreenKey !== screenKey,
133
175
  );
134
176
  }
135
177
  removeNodeIfEmpty(node.parentScreenKey);
136
178
  }
137
-
138
179
  nodes.delete(screenKey);
139
180
  });
140
181
  };
141
182
 
142
- const activate = (registration: ActiveScreenRegistration) => {
143
- if (getParent(registration.screenKey) !== registration.parentScreenKey) {
183
+ const activate = ({
184
+ screenKey,
185
+ parentScreenKey,
186
+ }: ActiveScreenRegistration) => {
187
+ if (getParent(screenKey) !== parentScreenKey) {
144
188
  throw new Error(
145
189
  "Screen topology can only activate a direct containment child.",
146
190
  );
147
191
  }
148
192
 
149
- const affectedScreenKeys = new Set([registration.parentScreenKey]);
150
- mutate(affectedScreenKeys, () => {
151
- const parent = ensureNode(registration.parentScreenKey);
152
- parent.activeChildScreenKeys = [
153
- ...parent.activeChildScreenKeys.filter(
154
- (screenKey) => screenKey !== registration.screenKey,
155
- ),
156
- registration.screenKey,
157
- ];
193
+ mutate(new Set([parentScreenKey]), () => {
194
+ const parent = ensureNode(parentScreenKey);
195
+ // A closing screen remains the active owner until it unmounts.
196
+ if (parent.activeChildScreenKeys.includes(screenKey)) return;
197
+ parent.activeChildScreenKeys.push(screenKey);
158
198
  });
199
+ };
159
200
 
160
- return () => {
161
- const parent = getNode(registration.parentScreenKey);
162
- if (!parent?.activeChildScreenKeys.includes(registration.screenKey)) {
163
- return;
164
- }
201
+ const resolve = (screenKey: string, depth: number) => {
202
+ if (!Number.isInteger(depth)) return null;
165
203
 
166
- mutate(affectedScreenKeys, () => {
167
- parent.activeChildScreenKeys = parent.activeChildScreenKeys.filter(
168
- (screenKey) => screenKey !== registration.screenKey,
169
- );
170
- removeNodeIfEmpty(registration.parentScreenKey);
171
- });
172
- };
204
+ let resolvedScreenKey: string | null = screenKey;
205
+ for (let step = 0; step < Math.abs(depth); step += 1) {
206
+ resolvedScreenKey =
207
+ depth < 0
208
+ ? getParent(resolvedScreenKey)
209
+ : getActiveChild(resolvedScreenKey);
210
+ if (!resolvedScreenKey) return null;
211
+ }
212
+
213
+ return getNode(resolvedScreenKey)?.registered ? resolvedScreenKey : null;
173
214
  };
174
215
 
175
216
  return {
@@ -177,22 +218,25 @@ export const createScreenTopology = (): ScreenTopology => {
177
218
  unregister,
178
219
  activate,
179
220
  getRelationships,
221
+ resolve,
222
+ resolveTransitionKey: (key) => {
223
+ const screenKey = screenKeyByTransitionKey.get(key) ?? key;
224
+ return getNode(screenKey)?.registered ? screenKey : null;
225
+ },
180
226
  subscribe: (screenKey, listener) => {
181
227
  const listeners =
182
228
  listenersByScreenKey.get(screenKey) ?? new Set<() => void>();
183
229
  listeners.add(listener);
184
230
  listenersByScreenKey.set(screenKey, listeners);
185
-
186
231
  return () => {
187
232
  listeners.delete(listener);
188
- if (listeners.size === 0) {
189
- listenersByScreenKey.delete(screenKey);
190
- if (!getNode(screenKey)) {
191
- relationshipCache.delete(screenKey);
192
- }
193
- }
233
+ if (listeners.size === 0) listenersByScreenKey.delete(screenKey);
194
234
  };
195
235
  },
236
+ subscribeResolution: (listener) => {
237
+ resolutionListeners.add(listener);
238
+ return () => resolutionListeners.delete(listener);
239
+ },
196
240
  };
197
241
  };
198
242
 
@@ -0,0 +1,29 @@
1
+ import { useCallback, useSyncExternalStore } from "react";
2
+ import type { ScreenTransitionTarget } from "../../../../types/animation.types";
3
+ import { screenTopology } from "../helpers/create-screen-topology";
4
+
5
+ export const useResolvedTransitionKey = (
6
+ screenKey: string | null,
7
+ target?: ScreenTransitionTarget,
8
+ ) => {
9
+ const depth = typeof target === "string" ? null : (target?.depth ?? 0);
10
+ const requiresResolution = typeof target === "string" || depth !== 0;
11
+ const subscribe = useCallback(
12
+ (listener: () => void) =>
13
+ requiresResolution
14
+ ? screenTopology.subscribeResolution(listener)
15
+ : () => {},
16
+ [requiresResolution],
17
+ );
18
+ const getSnapshot = useCallback(
19
+ () =>
20
+ typeof target === "string"
21
+ ? screenTopology.resolveTransitionKey(target)
22
+ : requiresResolution && screenKey
23
+ ? screenTopology.resolve(screenKey, depth ?? 0)
24
+ : screenKey,
25
+ [depth, requiresResolution, screenKey, target],
26
+ );
27
+
28
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
29
+ };
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useSyncExternalStore } from "react";
2
- import { screenTopology } from "./create-screen-topology";
2
+ import { screenTopology } from "../helpers/create-screen-topology";
3
3
 
4
4
  export const useScreenRelationships = (screenKey: string) => {
5
5
  const subscribe = useCallback(
@@ -0,0 +1,16 @@
1
+ export {
2
+ createScreenTopology,
3
+ screenTopology,
4
+ } from "./helpers/create-screen-topology";
5
+ export { useResolvedTransitionKey } from "./hooks/use-resolved-transition-key";
6
+ export { useScreenRelationships } from "./hooks/use-screen-relationships";
7
+ export {
8
+ ScreenTopologyProvider,
9
+ useScreenTopologyStore,
10
+ } from "./topology.provider";
11
+ export type {
12
+ ActiveScreenRegistration,
13
+ ScreenRelationships,
14
+ ScreenTopology,
15
+ ScreenTopologyRegistration,
16
+ } from "./types";
@@ -0,0 +1,72 @@
1
+ import { type ReactNode, useLayoutEffect, useMemo } from "react";
2
+ import createProvider from "../../../utils/create-provider";
3
+ import { useBlankStackStore } from "../../stack/blank-stack.provider";
4
+ import { useDescriptorsStore } from "../descriptors";
5
+ import { screenTopology } from "./helpers/create-screen-topology";
6
+
7
+ type Props = {
8
+ children: ReactNode;
9
+ };
10
+
11
+ type ScreenTopologyContextValue = {
12
+ screenKey: string;
13
+ };
14
+
15
+ const {
16
+ ScreenTopologyProvider,
17
+ useOptionalScreenTopologyStore,
18
+ useScreenTopologyStore,
19
+ } = createProvider("ScreenTopology")<Props, ScreenTopologyContextValue>(
20
+ ({ children }) => {
21
+ const screenKey = useDescriptorsStore(
22
+ (store) => store.derivations.currentScreenKey,
23
+ );
24
+ const transitionKey = useDescriptorsStore(
25
+ (store) => store.options.transitionKey,
26
+ );
27
+ const parentScreenKey = useOptionalScreenTopologyStore(
28
+ (store) => store?.screenKey,
29
+ );
30
+ const navigatorKey = useBlankStackStore((store) => store.navigatorKey);
31
+ const isActiveScreen = useBlankStackStore((store) => {
32
+ const focusedScene = store.scenes[store.focusedIndex];
33
+ return (
34
+ focusedScene?.route.key === screenKey &&
35
+ focusedScene.activity === "active"
36
+ );
37
+ });
38
+ useLayoutEffect(() => {
39
+ screenTopology.register({
40
+ screenKey,
41
+ navigatorKey,
42
+ parentScreenKey,
43
+ transitionKey,
44
+ });
45
+ }, [screenKey, navigatorKey, parentScreenKey, transitionKey]);
46
+
47
+ useLayoutEffect(() => {
48
+ if (!isActiveScreen || !parentScreenKey) return;
49
+
50
+ screenTopology.activate({
51
+ screenKey,
52
+ parentScreenKey,
53
+ });
54
+ }, [isActiveScreen, parentScreenKey, screenKey]);
55
+
56
+ useLayoutEffect(
57
+ () => () => {
58
+ screenTopology.unregister(screenKey);
59
+ },
60
+ [screenKey],
61
+ );
62
+
63
+ const value = useMemo(() => ({ screenKey }), [screenKey]);
64
+
65
+ return {
66
+ value,
67
+ children,
68
+ };
69
+ },
70
+ );
71
+
72
+ export { ScreenTopologyProvider, useScreenTopologyStore };
@@ -1,6 +1,8 @@
1
1
  export type ScreenTopologyRegistration = {
2
2
  screenKey: string;
3
+ navigatorKey?: string;
3
4
  parentScreenKey?: string;
5
+ transitionKey?: string;
4
6
  };
5
7
 
6
8
  export type ActiveScreenRegistration = {
@@ -11,12 +13,16 @@ export type ActiveScreenRegistration = {
11
13
  export type ScreenRelationships = Readonly<{
12
14
  parentScreenKey: string | null;
13
15
  activeChildScreenKey: string | null;
16
+ activeChildNavigatorKey: string | null;
14
17
  }>;
15
18
 
16
19
  export type ScreenTopology = {
17
20
  register(registration: ScreenTopologyRegistration): void;
18
21
  unregister(screenKey: string): void;
19
- activate(registration: ActiveScreenRegistration): () => void;
22
+ activate(registration: ActiveScreenRegistration): void;
20
23
  getRelationships(screenKey: string): ScreenRelationships;
24
+ resolve(screenKey: string, depth: number): string | null;
25
+ resolveTransitionKey(key: string): string | null;
21
26
  subscribe(screenKey: string, listener: () => void): () => void;
27
+ subscribeResolution(listener: () => void): () => void;
22
28
  };
@@ -1,5 +1,5 @@
1
- import { useScreenRelationships } from "../../factories/screen-topology";
2
1
  import { useDescriptorsStore } from "./descriptors";
2
+ import { useScreenRelationships } from "./topology";
3
3
 
4
4
  export const useCurrentScreenRelationships = () => {
5
5
  const screenKey = useDescriptorsStore(
@@ -1,5 +1,9 @@
1
1
  import type { BlankStackDescriptor } from "../../../../types/blank-stack.types";
2
- import type { BlankStackProviderProps } from "../../../../types/providers/blank-stack-provider.types";
2
+ import type {
3
+ BlankStackDescriptorSource,
4
+ BlankStackDescriptorSources,
5
+ BlankStackProviderProps,
6
+ } from "../../../../types/providers/blank-stack-provider.types";
3
7
  import type {
4
8
  BaseStackScene,
5
9
  StackSceneActivity,
@@ -9,6 +13,7 @@ import { resolveSceneNeighbors } from "./navigation/resolve-scene-neighbors";
9
13
  import {
10
14
  areDescriptorSourcesEquivalent,
11
15
  areDescriptorsEqual,
16
+ areRecordsShallowEqual,
12
17
  areRouteChildStateMapsEqual,
13
18
  getRouteChildState,
14
19
  routeKeyListsAreEqual,
@@ -24,7 +29,7 @@ import type {
24
29
  type BuildBlankStackStateParams = {
25
30
  props: BlankStackProviderProps;
26
31
  routes: BlankStackRoutes;
27
- descriptors: BlankStackDescriptors;
32
+ descriptors: BlankStackDescriptorSources;
28
33
  closingRouteKeys: ReadonlySet<string>;
29
34
  previousState?: LocalRoutesState;
30
35
  };
@@ -35,9 +40,9 @@ const resolveStableDescriptorSource = ({
35
40
  previousState,
36
41
  }: {
37
42
  routeKey: string;
38
- sourceDescriptor: BlankStackDescriptor;
43
+ sourceDescriptor: BlankStackDescriptorSource;
39
44
  previousState?: LocalRoutesState;
40
- }): BlankStackDescriptor => {
45
+ }): BlankStackDescriptorSource => {
41
46
  const previousSourceDescriptor = previousState?.sourceDescriptors[routeKey];
42
47
 
43
48
  if (
@@ -125,6 +130,7 @@ const getSceneActivityWindow = ({
125
130
  };
126
131
 
127
132
  const buildBaseScenes = ({
133
+ props,
128
134
  routes,
129
135
  descriptors,
130
136
  closingRouteKeys,
@@ -136,7 +142,7 @@ const buildBaseScenes = ({
136
142
  const routeKeys: string[] = [];
137
143
  const scenes: BaseStackScene<BlankStackDescriptor>[] = [];
138
144
  const routeChildStates: Record<string, unknown> = {};
139
- const sourceDescriptors: BlankStackDescriptors = {};
145
+ const sourceDescriptors: BlankStackDescriptorSources = {};
140
146
  const blankStackDescriptors: BlankStackDescriptors = {};
141
147
  let shouldShowFloatOverlay = false;
142
148
 
@@ -169,14 +175,29 @@ const buildBaseScenes = ({
169
175
  });
170
176
 
171
177
  const previousDescriptor = previousState?.descriptors[route.key];
178
+ const descriptorRoute =
179
+ previousDescriptor &&
180
+ childStateUnchanged &&
181
+ areRecordsShallowEqual(
182
+ previousDescriptor.route as unknown as Record<string, unknown>,
183
+ route as unknown as Record<string, unknown>,
184
+ )
185
+ ? previousDescriptor.route
186
+ : route;
172
187
  const descriptor =
173
188
  previousDescriptor &&
174
189
  childStateUnchanged &&
175
- previousDescriptor.route === sourceDescriptor.route &&
176
- previousDescriptor.navigation === sourceDescriptor.navigation &&
190
+ previousDescriptor.route === descriptorRoute &&
191
+ previousDescriptor.navigation === props.navigation &&
192
+ previousDescriptor.render === sourceDescriptor.render &&
177
193
  previousDescriptor.options === sourceDescriptor.options
178
194
  ? previousDescriptor
179
- : sourceDescriptor;
195
+ : ({
196
+ route: descriptorRoute,
197
+ navigation: props.navigation,
198
+ options: sourceDescriptor.options,
199
+ render: sourceDescriptor.render,
200
+ } as BlankStackDescriptor);
180
201
 
181
202
  routeKeys.push(route.key);
182
203
  routeChildStates[route.key] = routeChildState;
@@ -206,12 +227,10 @@ const buildBaseScenes = ({
206
227
 
207
228
  const withSceneRelationships = ({
208
229
  scenes,
209
- sourceDescriptors,
210
230
  closingRouteKeys,
211
231
  previousState,
212
232
  }: {
213
233
  scenes: BaseStackScene<BlankStackDescriptor>[];
214
- sourceDescriptors: BlankStackDescriptors;
215
234
  closingRouteKeys: ReadonlySet<string>;
216
235
  previousState?: LocalRoutesState;
217
236
  }): BaseStackScene<BlankStackDescriptor>[] => {
@@ -231,7 +250,7 @@ const withSceneRelationships = ({
231
250
 
232
251
  const relationshipScenes = scenes.map((scene) => ({
233
252
  route: scene.route,
234
- descriptor: sourceDescriptors[scene.route.key] ?? scene.descriptor,
253
+ descriptor: scene.descriptor,
235
254
  }));
236
255
 
237
256
  const nextScenes = scenes.map((scene, sceneIndex) => {
@@ -296,7 +315,6 @@ export const buildBlankStackState = (
296
315
 
297
316
  const scenes = withSceneRelationships({
298
317
  scenes: baseScenes,
299
- sourceDescriptors,
300
318
  closingRouteKeys: params.closingRouteKeys,
301
319
  previousState: params.previousState,
302
320
  });
@@ -305,6 +323,7 @@ export const buildBlankStackState = (
305
323
 
306
324
  return {
307
325
  routes: params.routes,
326
+ navigation: params.props.navigation,
308
327
  descriptors:
309
328
  params.previousState &&
310
329
  areDescriptorsEqual(
@@ -7,7 +7,7 @@ import {
7
7
  areDescriptorsEqual,
8
8
  areRouteChildStateMapsEqual,
9
9
  getRouteChildStateMap,
10
- routesHaveSameKeys,
10
+ routesAreShallowlyEqual,
11
11
  setsAreEqual,
12
12
  } from "./state-equality";
13
13
  import type { BlankStackRoutes, LocalRoutesState } from "./types";
@@ -39,6 +39,7 @@ export const deriveBlankStackState = ({
39
39
  const nextDescriptors = props.descriptors;
40
40
  const nextRouteChildStates = getRouteChildStateMap(nextRoutesSnapshot);
41
41
  const nextFocusedRouteKey = nextRoutesSnapshot[props.state.index]?.key;
42
+ const navigationUnchanged = current.navigation === props.navigation;
42
43
  const focusedRouteUnchanged = current.focusedRouteKey === nextFocusedRouteKey;
43
44
  const closingRouteKeysUnchanged = setsAreEqual(
44
45
  current.closingRouteKeys,
@@ -50,6 +51,7 @@ export const deriveBlankStackState = ({
50
51
  );
51
52
 
52
53
  const alreadyAligned =
54
+ navigationUnchanged &&
53
55
  focusedRouteUnchanged &&
54
56
  closingRouteKeysUnchanged &&
55
57
  routeChildStatesUnchanged &&
@@ -61,10 +63,11 @@ export const deriveBlankStackState = ({
61
63
  }
62
64
 
63
65
  const logicallyAligned =
66
+ navigationUnchanged &&
64
67
  focusedRouteUnchanged &&
65
68
  closingRouteKeysUnchanged &&
66
69
  routeChildStatesUnchanged &&
67
- routesHaveSameKeys(current.routes, nextRoutesSnapshot) &&
70
+ routesAreShallowlyEqual(current.routes, nextRoutesSnapshot) &&
68
71
  areDescriptorSourceMapsEquivalent(
69
72
  current.sourceDescriptors,
70
73
  nextDescriptors,
@@ -92,7 +95,12 @@ export const deriveBlankStackState = ({
92
95
  closingRouteKeys,
93
96
  );
94
97
 
95
- if (!routesChanged && !descriptorsChanged && !closingRouteKeysChanged) {
98
+ if (
99
+ navigationUnchanged &&
100
+ !routesChanged &&
101
+ !descriptorsChanged &&
102
+ !closingRouteKeysChanged
103
+ ) {
96
104
  return current;
97
105
  }
98
106
 
@@ -1,9 +1,9 @@
1
+ import type { BlankStackDescriptorSources } from "../../../../types/providers/blank-stack-provider.types";
1
2
  import type { RouteWithKey } from "../../../../types/stack.types";
2
3
  import { composeDescriptors } from "./navigation/compose-descriptors";
3
4
  import { syncRoutesWithRemoved } from "./navigation/sync-routes-with-removed";
4
5
  import { routesHaveSameKeys } from "./state-equality";
5
6
  import type {
6
- BlankStackDescriptors,
7
7
  BlankStackRoutes,
8
8
  LocalRoutesState,
9
9
  ReconciledRoutes,
@@ -13,7 +13,7 @@ type ReconcileBlankStackRoutesParams = {
13
13
  current: LocalRoutesState;
14
14
  previousRoutesSnapshot: BlankStackRoutes;
15
15
  nextRoutesSnapshot: BlankStackRoutes;
16
- nextDescriptors: BlankStackDescriptors;
16
+ nextDescriptors: BlankStackDescriptorSources;
17
17
  closingRouteKeys: Set<string>;
18
18
  };
19
19