react-native-screen-transitions 4.0.0 → 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 (411) hide show
  1. package/lib/commonjs/adapters/with-screen-transitions/stack-layout.js +1 -3
  2. package/lib/commonjs/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  3. package/lib/commonjs/components/blank-stack-host.js +21 -0
  4. package/lib/commonjs/components/blank-stack-host.js.map +1 -0
  5. package/lib/commonjs/components/blank-stack-runtime.js +33 -0
  6. package/lib/commonjs/components/blank-stack-runtime.js.map +1 -0
  7. package/lib/commonjs/components/blank-stack-scene.js +31 -0
  8. package/lib/commonjs/components/blank-stack-scene.js.map +1 -0
  9. package/lib/commonjs/components/blank-stack-view.js +23 -0
  10. package/lib/commonjs/components/blank-stack-view.js.map +1 -0
  11. package/lib/commonjs/components/overlay/helpers/run-overlay-slot-interpolator.js +2 -4
  12. package/lib/commonjs/components/overlay/helpers/run-overlay-slot-interpolator.js.map +1 -1
  13. package/lib/commonjs/components/overlay/hooks/use-overlay-slot.js +1 -16
  14. package/lib/commonjs/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  15. package/lib/commonjs/components/overlay/variations/overlay-host.js +0 -1
  16. package/lib/commonjs/components/overlay/variations/overlay-host.js.map +1 -1
  17. package/lib/commonjs/components/screen-lifecycle/index.js +2 -2
  18. package/lib/commonjs/components/screen-lifecycle/index.js.map +1 -1
  19. package/lib/commonjs/custom-navigator.js +41 -0
  20. package/lib/commonjs/custom-navigator.js.map +1 -0
  21. package/lib/commonjs/hooks/navigation/use-blank-stack-state.js +26 -0
  22. package/lib/commonjs/hooks/navigation/use-blank-stack-state.js.map +1 -0
  23. package/lib/commonjs/hooks/navigation/use-navigation-helpers.js +2 -2
  24. package/lib/commonjs/hooks/navigation/use-navigation-helpers.js.map +1 -1
  25. package/lib/commonjs/hooks/navigation/use-screen-state.js +1 -1
  26. package/lib/commonjs/hooks/navigation/use-screen-state.js.map +1 -1
  27. package/lib/commonjs/providers/screen/animation/animation.provider.js +11 -24
  28. package/lib/commonjs/providers/screen/animation/animation.provider.js.map +1 -1
  29. package/lib/commonjs/providers/screen/animation/helpers/pipeline.js +19 -36
  30. package/lib/commonjs/providers/screen/animation/helpers/pipeline.js.map +1 -1
  31. package/lib/commonjs/providers/screen/animation/use-screen-animation.js +16 -12
  32. package/lib/commonjs/providers/screen/animation/use-screen-animation.js.map +1 -1
  33. package/lib/commonjs/providers/screen/descriptors/descriptors.provider.js +31 -64
  34. package/lib/commonjs/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  35. package/lib/commonjs/providers/screen/descriptors/index.js +6 -0
  36. package/lib/commonjs/providers/screen/descriptors/index.js.map +1 -1
  37. package/lib/commonjs/providers/screen/gestures/gestures.provider.js +14 -25
  38. package/lib/commonjs/providers/screen/gestures/gestures.provider.js.map +1 -1
  39. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -4
  40. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  41. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture.js +6 -7
  42. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  43. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-coordinator.js +149 -0
  44. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-coordinator.js.map +1 -0
  45. package/lib/commonjs/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js +15 -0
  46. package/lib/commonjs/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js.map +1 -0
  47. package/lib/commonjs/providers/screen/gestures/ownership/use-register-gesture-ownership.js +52 -0
  48. package/lib/commonjs/providers/screen/gestures/ownership/use-register-gesture-ownership.js.map +1 -0
  49. package/lib/commonjs/providers/screen/gestures/pan/activation/pan-activation-decision.js +4 -9
  50. package/lib/commonjs/providers/screen/gestures/pan/activation/pan-activation-decision.js.map +1 -1
  51. package/lib/commonjs/providers/screen/gestures/pan/activation/use-pan-activation.js +3 -3
  52. package/lib/commonjs/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  53. package/lib/commonjs/providers/screen/gestures/pan/use-build-pan-gesture.js +2 -2
  54. package/lib/commonjs/providers/screen/gestures/pan/use-build-pan-gesture.js.map +1 -1
  55. package/lib/commonjs/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +13 -11
  56. package/lib/commonjs/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  57. package/lib/commonjs/providers/screen/gestures/shared/policy.js +4 -9
  58. package/lib/commonjs/providers/screen/gestures/shared/policy.js.map +1 -1
  59. package/lib/commonjs/providers/screen/gestures/types.js +2 -2
  60. package/lib/commonjs/providers/screen/gestures/types.js.map +1 -1
  61. package/lib/commonjs/providers/screen/screen-composer.js +10 -13
  62. package/lib/commonjs/providers/screen/screen-composer.js.map +1 -1
  63. package/lib/commonjs/providers/screen/styles/helpers/create-interpolator-scope.js +3 -15
  64. package/lib/commonjs/providers/screen/styles/helpers/create-interpolator-scope.js.map +1 -1
  65. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js +4 -25
  66. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  67. package/lib/commonjs/providers/screen/topology/helpers/create-screen-topology.js +176 -0
  68. package/lib/commonjs/providers/screen/topology/helpers/create-screen-topology.js.map +1 -0
  69. package/lib/commonjs/providers/screen/topology/hooks/use-resolved-transition-key.js +17 -0
  70. package/lib/commonjs/providers/screen/topology/hooks/use-resolved-transition-key.js.map +1 -0
  71. package/lib/commonjs/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.js +1 -1
  72. package/lib/commonjs/providers/screen/topology/hooks/use-screen-relationships.js.map +1 -0
  73. package/lib/commonjs/{factories/screen-topology → providers/screen/topology}/index.js +16 -15
  74. package/lib/commonjs/providers/screen/topology/index.js.map +1 -0
  75. package/lib/commonjs/providers/screen/topology/topology.provider.js +56 -0
  76. package/lib/commonjs/providers/screen/topology/topology.provider.js.map +1 -0
  77. package/lib/commonjs/providers/screen/topology/types.js.map +1 -0
  78. package/lib/commonjs/providers/screen/use-current-screen-relationships.js +2 -2
  79. package/lib/commonjs/providers/screen/use-current-screen-relationships.js.map +1 -1
  80. package/lib/commonjs/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js +1 -1
  81. package/lib/commonjs/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js.map +1 -1
  82. package/lib/commonjs/providers/stack/blank-stack-state/helpers/state-equality.js +1 -1
  83. package/lib/commonjs/providers/stack/blank-stack-state/helpers/state-equality.js.map +1 -1
  84. package/lib/commonjs/providers/stack/stack-transition/index.js +20 -0
  85. package/lib/commonjs/providers/stack/stack-transition/index.js.map +1 -0
  86. package/lib/commonjs/providers/stack/stack-transition/stack-transition-controller.js +197 -0
  87. package/lib/commonjs/providers/stack/stack-transition/stack-transition-controller.js.map +1 -0
  88. package/lib/commonjs/providers/stack/stack-transition/stack-transition.provider.js +92 -0
  89. package/lib/commonjs/providers/stack/stack-transition/stack-transition.provider.js.map +1 -0
  90. package/lib/commonjs/providers/stack/stack-transition/use-stack-transition.js +46 -0
  91. package/lib/commonjs/providers/stack/stack-transition/use-stack-transition.js.map +1 -0
  92. package/lib/commonjs/types/ownership.types.js +2 -25
  93. package/lib/commonjs/types/ownership.types.js.map +1 -1
  94. package/lib/module/adapters/with-screen-transitions/stack-layout.js +1 -3
  95. package/lib/module/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  96. package/lib/module/components/blank-stack-host.js +17 -0
  97. package/lib/module/components/blank-stack-host.js.map +1 -0
  98. package/lib/module/components/blank-stack-runtime.js +29 -0
  99. package/lib/module/components/blank-stack-runtime.js.map +1 -0
  100. package/lib/module/components/blank-stack-scene.js +27 -0
  101. package/lib/module/components/blank-stack-scene.js.map +1 -0
  102. package/lib/module/components/blank-stack-view.js +19 -0
  103. package/lib/module/components/blank-stack-view.js.map +1 -0
  104. package/lib/module/components/overlay/helpers/run-overlay-slot-interpolator.js +2 -4
  105. package/lib/module/components/overlay/helpers/run-overlay-slot-interpolator.js.map +1 -1
  106. package/lib/module/components/overlay/hooks/use-overlay-slot.js +1 -16
  107. package/lib/module/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  108. package/lib/module/components/overlay/variations/overlay-host.js +0 -1
  109. package/lib/module/components/overlay/variations/overlay-host.js.map +1 -1
  110. package/lib/module/components/screen-lifecycle/index.js +2 -2
  111. package/lib/module/components/screen-lifecycle/index.js.map +1 -1
  112. package/lib/module/custom-navigator.js +8 -0
  113. package/lib/module/custom-navigator.js.map +1 -0
  114. package/lib/module/hooks/navigation/use-blank-stack-state.js +21 -0
  115. package/lib/module/hooks/navigation/use-blank-stack-state.js.map +1 -0
  116. package/lib/module/hooks/navigation/use-navigation-helpers.js +2 -2
  117. package/lib/module/hooks/navigation/use-navigation-helpers.js.map +1 -1
  118. package/lib/module/hooks/navigation/use-screen-state.js +1 -1
  119. package/lib/module/hooks/navigation/use-screen-state.js.map +1 -1
  120. package/lib/module/providers/screen/animation/animation.provider.js +11 -24
  121. package/lib/module/providers/screen/animation/animation.provider.js.map +1 -1
  122. package/lib/module/providers/screen/animation/helpers/pipeline.js +19 -36
  123. package/lib/module/providers/screen/animation/helpers/pipeline.js.map +1 -1
  124. package/lib/module/providers/screen/animation/use-screen-animation.js +17 -13
  125. package/lib/module/providers/screen/animation/use-screen-animation.js.map +1 -1
  126. package/lib/module/providers/screen/descriptors/descriptors.provider.js +31 -66
  127. package/lib/module/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  128. package/lib/module/providers/screen/descriptors/index.js +1 -1
  129. package/lib/module/providers/screen/descriptors/index.js.map +1 -1
  130. package/lib/module/providers/screen/gestures/gestures.provider.js +16 -27
  131. package/lib/module/providers/screen/gestures/gestures.provider.js.map +1 -1
  132. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -4
  133. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  134. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture.js +6 -7
  135. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  136. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-coordinator.js +144 -0
  137. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-coordinator.js.map +1 -0
  138. package/lib/module/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js +10 -0
  139. package/lib/module/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js.map +1 -0
  140. package/lib/module/providers/screen/gestures/ownership/use-register-gesture-ownership.js +47 -0
  141. package/lib/module/providers/screen/gestures/ownership/use-register-gesture-ownership.js.map +1 -0
  142. package/lib/module/providers/screen/gestures/pan/activation/pan-activation-decision.js +4 -9
  143. package/lib/module/providers/screen/gestures/pan/activation/pan-activation-decision.js.map +1 -1
  144. package/lib/module/providers/screen/gestures/pan/activation/use-pan-activation.js +3 -3
  145. package/lib/module/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  146. package/lib/module/providers/screen/gestures/pan/use-build-pan-gesture.js +2 -2
  147. package/lib/module/providers/screen/gestures/pan/use-build-pan-gesture.js.map +1 -1
  148. package/lib/module/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +13 -11
  149. package/lib/module/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  150. package/lib/module/providers/screen/gestures/shared/policy.js +4 -9
  151. package/lib/module/providers/screen/gestures/shared/policy.js.map +1 -1
  152. package/lib/module/providers/screen/gestures/types.js +1 -1
  153. package/lib/module/providers/screen/gestures/types.js.map +1 -1
  154. package/lib/module/providers/screen/screen-composer.js +10 -13
  155. package/lib/module/providers/screen/screen-composer.js.map +1 -1
  156. package/lib/module/providers/screen/styles/helpers/create-interpolator-scope.js +3 -15
  157. package/lib/module/providers/screen/styles/helpers/create-interpolator-scope.js.map +1 -1
  158. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js +4 -25
  159. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  160. package/lib/module/providers/screen/topology/helpers/create-screen-topology.js +171 -0
  161. package/lib/module/providers/screen/topology/helpers/create-screen-topology.js.map +1 -0
  162. package/lib/module/providers/screen/topology/hooks/use-resolved-transition-key.js +12 -0
  163. package/lib/module/providers/screen/topology/hooks/use-resolved-transition-key.js.map +1 -0
  164. package/lib/module/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.js +1 -1
  165. package/lib/module/providers/screen/topology/hooks/use-screen-relationships.js.map +1 -0
  166. package/lib/module/providers/screen/topology/index.js +7 -0
  167. package/lib/module/providers/screen/topology/index.js.map +1 -0
  168. package/lib/module/providers/screen/topology/topology.provider.js +50 -0
  169. package/lib/module/providers/screen/topology/topology.provider.js.map +1 -0
  170. package/lib/module/providers/screen/topology/types.js.map +1 -0
  171. package/lib/module/providers/screen/use-current-screen-relationships.js +1 -1
  172. package/lib/module/providers/screen/use-current-screen-relationships.js.map +1 -1
  173. package/lib/module/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js +1 -1
  174. package/lib/module/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js.map +1 -1
  175. package/lib/module/providers/stack/blank-stack-state/helpers/state-equality.js +1 -1
  176. package/lib/module/providers/stack/blank-stack-state/helpers/state-equality.js.map +1 -1
  177. package/lib/module/providers/stack/stack-transition/index.js +5 -0
  178. package/lib/module/providers/stack/stack-transition/index.js.map +1 -0
  179. package/lib/module/providers/stack/stack-transition/stack-transition-controller.js +189 -0
  180. package/lib/module/providers/stack/stack-transition/stack-transition-controller.js.map +1 -0
  181. package/lib/module/providers/stack/stack-transition/stack-transition.provider.js +85 -0
  182. package/lib/module/providers/stack/stack-transition/stack-transition.provider.js.map +1 -0
  183. package/lib/module/providers/stack/stack-transition/use-stack-transition.js +41 -0
  184. package/lib/module/providers/stack/stack-transition/use-stack-transition.js.map +1 -0
  185. package/lib/module/types/animation.types.js.map +1 -1
  186. package/lib/module/types/ownership.types.js +1 -24
  187. package/lib/module/types/ownership.types.js.map +1 -1
  188. package/lib/typescript/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -1
  189. package/lib/typescript/components/blank-stack-host.d.ts +9 -0
  190. package/lib/typescript/components/blank-stack-host.d.ts.map +1 -0
  191. package/lib/typescript/components/blank-stack-runtime.d.ts +8 -0
  192. package/lib/typescript/components/blank-stack-runtime.d.ts.map +1 -0
  193. package/lib/typescript/components/blank-stack-scene.d.ts +5 -0
  194. package/lib/typescript/components/blank-stack-scene.d.ts.map +1 -0
  195. package/lib/typescript/components/blank-stack-view.d.ts +2 -0
  196. package/lib/typescript/components/blank-stack-view.d.ts.map +1 -0
  197. package/lib/typescript/components/overlay/helpers/run-overlay-slot-interpolator.d.ts +2 -3
  198. package/lib/typescript/components/overlay/helpers/run-overlay-slot-interpolator.d.ts.map +1 -1
  199. package/lib/typescript/components/overlay/hooks/use-overlay-slot.d.ts.map +1 -1
  200. package/lib/typescript/custom-navigator.d.ts +8 -0
  201. package/lib/typescript/custom-navigator.d.ts.map +1 -0
  202. package/lib/typescript/hooks/navigation/use-blank-stack-state.d.ts +8 -0
  203. package/lib/typescript/hooks/navigation/use-blank-stack-state.d.ts.map +1 -0
  204. package/lib/typescript/hooks/navigation/use-navigation-helpers.d.ts.map +1 -1
  205. package/lib/typescript/index.d.ts +1 -1
  206. package/lib/typescript/index.d.ts.map +1 -1
  207. package/lib/typescript/providers/screen/animation/animation.provider.d.ts +2 -5
  208. package/lib/typescript/providers/screen/animation/animation.provider.d.ts.map +1 -1
  209. package/lib/typescript/providers/screen/animation/helpers/pipeline.d.ts +2 -4
  210. package/lib/typescript/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  211. package/lib/typescript/providers/screen/animation/types.d.ts +0 -9
  212. package/lib/typescript/providers/screen/animation/types.d.ts.map +1 -1
  213. package/lib/typescript/providers/screen/animation/use-screen-animation.d.ts.map +1 -1
  214. package/lib/typescript/providers/screen/descriptors/descriptors.provider.d.ts +9 -11
  215. package/lib/typescript/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  216. package/lib/typescript/providers/screen/descriptors/index.d.ts +1 -1
  217. package/lib/typescript/providers/screen/descriptors/index.d.ts.map +1 -1
  218. package/lib/typescript/providers/screen/gestures/gestures.provider.d.ts +9 -12
  219. package/lib/typescript/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
  220. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts +2 -2
  221. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts.map +1 -1
  222. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture.d.ts +3 -2
  223. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture.d.ts.map +1 -1
  224. package/lib/typescript/providers/screen/gestures/index.d.ts +1 -1
  225. package/lib/typescript/providers/screen/gestures/index.d.ts.map +1 -1
  226. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-coordinator.d.ts +26 -0
  227. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-coordinator.d.ts.map +1 -0
  228. package/lib/typescript/providers/screen/gestures/ownership/use-gesture-scroll-coordination.d.ts +3 -0
  229. package/lib/typescript/providers/screen/gestures/ownership/use-gesture-scroll-coordination.d.ts.map +1 -0
  230. package/lib/typescript/providers/screen/gestures/ownership/use-register-gesture-ownership.d.ts +9 -0
  231. package/lib/typescript/providers/screen/gestures/ownership/use-register-gesture-ownership.d.ts.map +1 -0
  232. package/lib/typescript/providers/screen/gestures/pan/activation/pan-activation-decision.d.ts +4 -4
  233. package/lib/typescript/providers/screen/gestures/pan/activation/pan-activation-decision.d.ts.map +1 -1
  234. package/lib/typescript/providers/screen/gestures/pan/activation/use-pan-activation.d.ts +3 -3
  235. package/lib/typescript/providers/screen/gestures/pan/activation/use-pan-activation.d.ts.map +1 -1
  236. package/lib/typescript/providers/screen/gestures/pan/use-build-pan-gesture.d.ts +3 -3
  237. package/lib/typescript/providers/screen/gestures/pan/use-build-pan-gesture.d.ts.map +1 -1
  238. package/lib/typescript/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.d.ts.map +1 -1
  239. package/lib/typescript/providers/screen/gestures/shared/policy.d.ts +2 -3
  240. package/lib/typescript/providers/screen/gestures/shared/policy.d.ts.map +1 -1
  241. package/lib/typescript/providers/screen/gestures/types.d.ts +4 -18
  242. package/lib/typescript/providers/screen/gestures/types.d.ts.map +1 -1
  243. package/lib/typescript/providers/screen/screen-composer.d.ts +2 -6
  244. package/lib/typescript/providers/screen/screen-composer.d.ts.map +1 -1
  245. package/lib/typescript/providers/screen/styles/helpers/create-interpolator-scope.d.ts +2 -3
  246. package/lib/typescript/providers/screen/styles/helpers/create-interpolator-scope.d.ts.map +1 -1
  247. package/lib/typescript/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  248. package/lib/typescript/{factories/screen-topology → providers/screen/topology/helpers}/create-screen-topology.d.ts +1 -1
  249. package/lib/typescript/providers/screen/topology/helpers/create-screen-topology.d.ts.map +1 -0
  250. package/lib/typescript/providers/screen/topology/hooks/use-resolved-transition-key.d.ts +3 -0
  251. package/lib/typescript/providers/screen/topology/hooks/use-resolved-transition-key.d.ts.map +1 -0
  252. package/lib/typescript/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.d.ts +1 -0
  253. package/lib/typescript/providers/screen/topology/hooks/use-screen-relationships.d.ts.map +1 -0
  254. package/lib/typescript/providers/screen/topology/index.d.ts +6 -0
  255. package/lib/typescript/providers/screen/topology/index.d.ts.map +1 -0
  256. package/lib/typescript/providers/screen/topology/topology.provider.d.ts +13 -0
  257. package/lib/typescript/providers/screen/topology/topology.provider.d.ts.map +1 -0
  258. package/lib/typescript/{factories/screen-topology → providers/screen/topology}/types.d.ts +7 -1
  259. package/lib/typescript/providers/screen/topology/types.d.ts.map +1 -0
  260. package/lib/typescript/providers/screen/use-current-screen-relationships.d.ts +1 -0
  261. package/lib/typescript/providers/screen/use-current-screen-relationships.d.ts.map +1 -1
  262. package/lib/typescript/providers/stack/blank-stack-state/helpers/build-blank-stack-state.d.ts.map +1 -1
  263. package/lib/typescript/providers/stack/blank-stack-state/helpers/state-equality.d.ts.map +1 -1
  264. package/lib/typescript/providers/stack/stack-transition/index.d.ts +3 -0
  265. package/lib/typescript/providers/stack/stack-transition/index.d.ts.map +1 -0
  266. package/lib/typescript/providers/stack/stack-transition/stack-transition-controller.d.ts +48 -0
  267. package/lib/typescript/providers/stack/stack-transition/stack-transition-controller.d.ts.map +1 -0
  268. package/lib/typescript/providers/stack/stack-transition/stack-transition.provider.d.ts +14 -0
  269. package/lib/typescript/providers/stack/stack-transition/stack-transition.provider.d.ts.map +1 -0
  270. package/lib/typescript/providers/stack/stack-transition/use-stack-transition.d.ts +12 -0
  271. package/lib/typescript/providers/stack/stack-transition/use-stack-transition.d.ts.map +1 -0
  272. package/lib/typescript/types/animation.types.d.ts +1 -15
  273. package/lib/typescript/types/animation.types.d.ts.map +1 -1
  274. package/lib/typescript/types/bounds.types.d.ts +1 -1
  275. package/lib/typescript/types/bounds.types.d.ts.map +1 -1
  276. package/lib/typescript/types/index.d.ts +1 -1
  277. package/lib/typescript/types/index.d.ts.map +1 -1
  278. package/lib/typescript/types/ownership.types.d.ts +1 -18
  279. package/lib/typescript/types/ownership.types.d.ts.map +1 -1
  280. package/lib/typescript/types/screen.types.d.ts +9 -0
  281. package/lib/typescript/types/screen.types.d.ts.map +1 -1
  282. package/package.json +7 -1
  283. package/src/adapters/with-screen-transitions/stack-layout.tsx +1 -9
  284. package/src/components/blank-stack-host.tsx +21 -0
  285. package/src/components/blank-stack-runtime.tsx +37 -0
  286. package/src/components/blank-stack-scene.tsx +30 -0
  287. package/src/components/blank-stack-view.tsx +19 -0
  288. package/src/components/overlay/helpers/run-overlay-slot-interpolator.ts +0 -4
  289. package/src/components/overlay/hooks/use-overlay-slot.ts +0 -25
  290. package/src/components/overlay/variations/overlay-host.tsx +0 -1
  291. package/src/components/screen-lifecycle/index.tsx +2 -2
  292. package/src/custom-navigator.ts +25 -0
  293. package/src/hooks/navigation/use-blank-stack-state.ts +24 -0
  294. package/src/hooks/navigation/use-navigation-helpers.ts +4 -2
  295. package/src/hooks/navigation/use-screen-state.ts +1 -1
  296. package/src/index.ts +0 -1
  297. package/src/providers/screen/animation/animation.provider.tsx +13 -53
  298. package/src/providers/screen/animation/helpers/pipeline.ts +14 -26
  299. package/src/providers/screen/animation/types.ts +0 -11
  300. package/src/providers/screen/animation/use-screen-animation.tsx +42 -10
  301. package/src/providers/screen/descriptors/descriptors.provider.tsx +43 -99
  302. package/src/providers/screen/descriptors/index.tsx +1 -0
  303. package/src/providers/screen/gestures/gestures.provider.tsx +14 -55
  304. package/src/providers/screen/gestures/hooks/use-screen-gesture-config.ts +3 -6
  305. package/src/providers/screen/gestures/hooks/use-screen-gesture.ts +13 -13
  306. package/src/providers/screen/gestures/index.tsx +0 -2
  307. package/src/providers/screen/gestures/ownership/gesture-ownership-coordinator.ts +252 -0
  308. package/src/providers/screen/gestures/ownership/use-gesture-scroll-coordination.ts +23 -0
  309. package/src/providers/screen/gestures/ownership/use-register-gesture-ownership.ts +73 -0
  310. package/src/providers/screen/gestures/pan/activation/pan-activation-decision.ts +6 -20
  311. package/src/providers/screen/gestures/pan/activation/use-pan-activation.ts +5 -5
  312. package/src/providers/screen/gestures/pan/use-build-pan-gesture.ts +4 -4
  313. package/src/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.ts +9 -12
  314. package/src/providers/screen/gestures/shared/policy.ts +0 -8
  315. package/src/providers/screen/gestures/types.ts +4 -19
  316. package/src/providers/screen/screen-composer.tsx +18 -29
  317. package/src/providers/screen/styles/helpers/create-interpolator-scope.ts +2 -21
  318. package/src/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +0 -29
  319. package/src/{factories/screen-topology → providers/screen/topology/helpers}/create-screen-topology.ts +97 -53
  320. package/src/providers/screen/topology/hooks/use-resolved-transition-key.ts +29 -0
  321. package/src/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.ts +1 -1
  322. package/src/providers/screen/topology/index.ts +16 -0
  323. package/src/providers/screen/topology/topology.provider.tsx +72 -0
  324. package/src/{factories/screen-topology → providers/screen/topology}/types.ts +7 -1
  325. package/src/providers/screen/use-current-screen-relationships.ts +1 -1
  326. package/src/providers/stack/blank-stack-state/helpers/build-blank-stack-state.ts +1 -0
  327. package/src/providers/stack/blank-stack-state/helpers/state-equality.ts +6 -3
  328. package/src/providers/stack/stack-transition/index.ts +5 -0
  329. package/src/providers/stack/stack-transition/stack-transition-controller.ts +341 -0
  330. package/src/providers/stack/stack-transition/stack-transition.provider.tsx +120 -0
  331. package/src/providers/stack/stack-transition/use-stack-transition.ts +77 -0
  332. package/src/types/animation.types.ts +1 -19
  333. package/src/types/bounds.types.ts +1 -4
  334. package/src/types/index.ts +0 -1
  335. package/src/types/ownership.types.ts +1 -26
  336. package/src/types/screen.types.ts +10 -0
  337. package/lib/commonjs/factories/screen-topology/create-screen-topology.js +0 -147
  338. package/lib/commonjs/factories/screen-topology/create-screen-topology.js.map +0 -1
  339. package/lib/commonjs/factories/screen-topology/index.js.map +0 -1
  340. package/lib/commonjs/factories/screen-topology/types.js.map +0 -1
  341. package/lib/commonjs/factories/screen-topology/use-screen-relationships.js.map +0 -1
  342. package/lib/commonjs/factories/screen-topology/worklet.js +0 -55
  343. package/lib/commonjs/factories/screen-topology/worklet.js.map +0 -1
  344. package/lib/commonjs/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +0 -62
  345. package/lib/commonjs/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +0 -1
  346. package/lib/commonjs/providers/screen/animation/helpers/read-screen-animation-revisions.js +0 -16
  347. package/lib/commonjs/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +0 -1
  348. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-bridge.js +0 -128
  349. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +0 -1
  350. package/lib/commonjs/providers/screen/gestures/ownership/resolve-ownership.js +0 -71
  351. package/lib/commonjs/providers/screen/gestures/ownership/resolve-ownership.js.map +0 -1
  352. package/lib/commonjs/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +0 -54
  353. package/lib/commonjs/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +0 -1
  354. package/lib/commonjs/providers/screen/styles/helpers/collect-interpolator-shared-values.js +0 -50
  355. package/lib/commonjs/providers/screen/styles/helpers/collect-interpolator-shared-values.js.map +0 -1
  356. package/lib/commonjs/utils/resolve-chain-target.js +0 -29
  357. package/lib/commonjs/utils/resolve-chain-target.js.map +0 -1
  358. package/lib/module/factories/screen-topology/create-screen-topology.js +0 -142
  359. package/lib/module/factories/screen-topology/create-screen-topology.js.map +0 -1
  360. package/lib/module/factories/screen-topology/index.js +0 -6
  361. package/lib/module/factories/screen-topology/index.js.map +0 -1
  362. package/lib/module/factories/screen-topology/types.js.map +0 -1
  363. package/lib/module/factories/screen-topology/use-screen-relationships.js.map +0 -1
  364. package/lib/module/factories/screen-topology/worklet.js +0 -48
  365. package/lib/module/factories/screen-topology/worklet.js.map +0 -1
  366. package/lib/module/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +0 -56
  367. package/lib/module/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +0 -1
  368. package/lib/module/providers/screen/animation/helpers/read-screen-animation-revisions.js +0 -11
  369. package/lib/module/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +0 -1
  370. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-bridge.js +0 -124
  371. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +0 -1
  372. package/lib/module/providers/screen/gestures/ownership/resolve-ownership.js +0 -67
  373. package/lib/module/providers/screen/gestures/ownership/resolve-ownership.js.map +0 -1
  374. package/lib/module/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +0 -50
  375. package/lib/module/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +0 -1
  376. package/lib/module/providers/screen/styles/helpers/collect-interpolator-shared-values.js +0 -45
  377. package/lib/module/providers/screen/styles/helpers/collect-interpolator-shared-values.js.map +0 -1
  378. package/lib/module/utils/resolve-chain-target.js +0 -25
  379. package/lib/module/utils/resolve-chain-target.js.map +0 -1
  380. package/lib/typescript/factories/screen-topology/create-screen-topology.d.ts.map +0 -1
  381. package/lib/typescript/factories/screen-topology/index.d.ts +0 -5
  382. package/lib/typescript/factories/screen-topology/index.d.ts.map +0 -1
  383. package/lib/typescript/factories/screen-topology/types.d.ts.map +0 -1
  384. package/lib/typescript/factories/screen-topology/use-screen-relationships.d.ts.map +0 -1
  385. package/lib/typescript/factories/screen-topology/worklet.d.ts +0 -5
  386. package/lib/typescript/factories/screen-topology/worklet.d.ts.map +0 -1
  387. package/lib/typescript/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts +0 -9
  388. package/lib/typescript/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts.map +0 -1
  389. package/lib/typescript/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts +0 -6
  390. package/lib/typescript/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts.map +0 -1
  391. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts +0 -3
  392. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts.map +0 -1
  393. package/lib/typescript/providers/screen/gestures/ownership/resolve-ownership.d.ts +0 -32
  394. package/lib/typescript/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +0 -1
  395. package/lib/typescript/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts +0 -11
  396. package/lib/typescript/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts.map +0 -1
  397. package/lib/typescript/providers/screen/styles/helpers/collect-interpolator-shared-values.d.ts +0 -4
  398. package/lib/typescript/providers/screen/styles/helpers/collect-interpolator-shared-values.d.ts.map +0 -1
  399. package/lib/typescript/utils/resolve-chain-target.d.ts +0 -11
  400. package/lib/typescript/utils/resolve-chain-target.d.ts.map +0 -1
  401. package/src/factories/screen-topology/index.ts +0 -16
  402. package/src/factories/screen-topology/worklet.ts +0 -60
  403. package/src/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +0 -96
  404. package/src/providers/screen/animation/helpers/read-screen-animation-revisions.ts +0 -15
  405. package/src/providers/screen/gestures/ownership/gesture-ownership-bridge.tsx +0 -173
  406. package/src/providers/screen/gestures/ownership/resolve-ownership.ts +0 -90
  407. package/src/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.ts +0 -88
  408. package/src/providers/screen/styles/helpers/collect-interpolator-shared-values.ts +0 -75
  409. package/src/utils/resolve-chain-target.ts +0 -33
  410. /package/lib/commonjs/{factories/screen-topology → providers/screen/topology}/types.js +0 -0
  411. /package/lib/module/{factories/screen-topology → providers/screen/topology}/types.js +0 -0
@@ -0,0 +1,252 @@
1
+ import type { SharedValue } from "react-native-reanimated";
2
+ import type {
3
+ ClaimedDirections,
4
+ Direction,
5
+ } from "../../../../types/ownership.types";
6
+ import { DIRECTIONS } from "../../../../types/ownership.types";
7
+ import { screenTopology } from "../../topology";
8
+ import type { ScreenTopology } from "../../topology/types";
9
+ import type {
10
+ GestureOwnerMap,
11
+ PanGesture,
12
+ PinchGesture,
13
+ ScreenGestureSource,
14
+ ScrollGestureAxis,
15
+ ScrollGestureState,
16
+ } from "../types";
17
+
18
+ export type GestureOwnershipRegistration = {
19
+ screenKey: string;
20
+ source: ScreenGestureSource;
21
+ claimedDirections: ClaimedDirections;
22
+ effectiveClaimedDirections: ClaimedDirections;
23
+ owners: SharedValue<GestureOwnerMap>;
24
+ };
25
+
26
+ export type ScrollGestureCoordination = {
27
+ panGestures: PanGesture[];
28
+ pinchGestures: PinchGesture[];
29
+ scrollStates: SharedValue<ScrollGestureState | null>[];
30
+ ownerRouteKeys: string[];
31
+ };
32
+
33
+ export type GestureOwnershipCoordinator = {
34
+ register(registration: GestureOwnershipRegistration): void;
35
+ unregister(screenKey: string): void;
36
+ getScrollCoordination(
37
+ screenKey: string,
38
+ axis: ScrollGestureAxis,
39
+ ): ScrollGestureCoordination;
40
+ subscribe(screenKey: string, listener: () => void): () => void;
41
+ };
42
+
43
+ const EMPTY_SCROLL_COORDINATION: ScrollGestureCoordination = {
44
+ panGestures: [],
45
+ pinchGestures: [],
46
+ scrollStates: [],
47
+ ownerRouteKeys: [],
48
+ };
49
+
50
+ const createEmptyOwners = (): GestureOwnerMap => ({
51
+ vertical: null,
52
+ "vertical-inverted": null,
53
+ horizontal: null,
54
+ "horizontal-inverted": null,
55
+ });
56
+
57
+ const areOwnersEqual = (left: GestureOwnerMap, right: GestureOwnerMap) =>
58
+ DIRECTIONS.every((direction) => left[direction] === right[direction]);
59
+
60
+ const areArraysEqual = <T>(left: readonly T[], right: readonly T[]) =>
61
+ left.length === right.length &&
62
+ left.every((value, index) => value === right[index]);
63
+
64
+ const areScrollCoordinationsEqual = (
65
+ left: ScrollGestureCoordination,
66
+ right: ScrollGestureCoordination,
67
+ ) =>
68
+ areArraysEqual(left.panGestures, right.panGestures) &&
69
+ areArraysEqual(left.pinchGestures, right.pinchGestures) &&
70
+ areArraysEqual(left.scrollStates, right.scrollStates) &&
71
+ areArraysEqual(left.ownerRouteKeys, right.ownerRouteKeys);
72
+
73
+ const getAxisDirections = (
74
+ axis: ScrollGestureAxis,
75
+ ): readonly [Direction, Direction] =>
76
+ axis === "vertical"
77
+ ? ["vertical", "vertical-inverted"]
78
+ : ["horizontal", "horizontal-inverted"];
79
+
80
+ export const createGestureOwnershipCoordinator = (
81
+ topology: ScreenTopology,
82
+ ): GestureOwnershipCoordinator => {
83
+ const registrations = new Map<string, GestureOwnershipRegistration>();
84
+ const scrollCache = new Map<
85
+ string,
86
+ Record<ScrollGestureAxis, ScrollGestureCoordination>
87
+ >();
88
+ const listenersByScreenKey = new Map<string, Set<() => void>>();
89
+
90
+ const getNearestAncestorOwner = (screenKey: string, direction: Direction) => {
91
+ const visited = new Set<string>();
92
+ let candidate: string | null = screenKey;
93
+
94
+ while (candidate && !visited.has(candidate)) {
95
+ visited.add(candidate);
96
+ if (registrations.get(candidate)?.claimedDirections[direction]) {
97
+ return candidate;
98
+ }
99
+ candidate = topology.getRelationships(candidate).parentScreenKey;
100
+ }
101
+
102
+ return null;
103
+ };
104
+
105
+ const getDeepestActiveOwner = (screenKey: string, direction: Direction) => {
106
+ const visited = new Set<string>();
107
+ let candidate: string | null = screenKey;
108
+ let owner: string | null = null;
109
+ let isOrigin = true;
110
+
111
+ while (candidate && !visited.has(candidate)) {
112
+ visited.add(candidate);
113
+ const registration = registrations.get(candidate);
114
+ const claims = isOrigin
115
+ ? registration?.claimedDirections
116
+ : registration?.effectiveClaimedDirections;
117
+ if (claims?.[direction]) owner = candidate;
118
+
119
+ candidate = topology.getRelationships(candidate).activeChildScreenKey;
120
+ isOrigin = false;
121
+ }
122
+
123
+ return owner;
124
+ };
125
+
126
+ const resolveOwners = (screenKey: string): GestureOwnerMap => {
127
+ const owners = createEmptyOwners();
128
+ for (const direction of DIRECTIONS) {
129
+ owners[direction] =
130
+ getDeepestActiveOwner(screenKey, direction) ??
131
+ getNearestAncestorOwner(screenKey, direction);
132
+ }
133
+ return owners;
134
+ };
135
+
136
+ const resolveScrollCoordination = (
137
+ screenKey: string,
138
+ axis: ScrollGestureAxis,
139
+ ): ScrollGestureCoordination => {
140
+ const ownerKeys: string[] = [];
141
+ for (const direction of getAxisDirections(axis)) {
142
+ const ownerKey = getNearestAncestorOwner(screenKey, direction);
143
+ if (ownerKey && !ownerKeys.includes(ownerKey)) ownerKeys.push(ownerKey);
144
+ }
145
+
146
+ const panGestures: PanGesture[] = [];
147
+ const scrollStates: SharedValue<ScrollGestureState | null>[] = [];
148
+ for (const ownerKey of ownerKeys) {
149
+ const source = registrations.get(ownerKey)?.source;
150
+ if (!source) continue;
151
+ panGestures.push(source.panGesture);
152
+ scrollStates.push(source.scrollState);
153
+ }
154
+
155
+ const pinchGestures: PinchGesture[] = [];
156
+ const visited = new Set<string>();
157
+ let candidate: string | null = screenKey;
158
+ while (candidate && !visited.has(candidate)) {
159
+ visited.add(candidate);
160
+ const pinchGesture = registrations.get(candidate)?.source.pinchGesture;
161
+ if (pinchGesture && !pinchGestures.includes(pinchGesture)) {
162
+ pinchGestures.push(pinchGesture);
163
+ }
164
+ candidate = topology.getRelationships(candidate).parentScreenKey;
165
+ }
166
+
167
+ return {
168
+ panGestures,
169
+ pinchGestures,
170
+ scrollStates,
171
+ ownerRouteKeys: ownerKeys,
172
+ };
173
+ };
174
+
175
+ const notify = (screenKey: string) => {
176
+ for (const listener of listenersByScreenKey.get(screenKey) ?? []) {
177
+ listener();
178
+ }
179
+ };
180
+
181
+ const recompute = () => {
182
+ for (const [screenKey, registration] of registrations) {
183
+ const nextOwners = resolveOwners(screenKey);
184
+ if (!areOwnersEqual(registration.owners.get(), nextOwners)) {
185
+ registration.owners.set(nextOwners);
186
+ }
187
+
188
+ const previousScroll = scrollCache.get(screenKey);
189
+ const nextScroll = {
190
+ vertical: resolveScrollCoordination(screenKey, "vertical"),
191
+ horizontal: resolveScrollCoordination(screenKey, "horizontal"),
192
+ };
193
+ const vertical =
194
+ previousScroll &&
195
+ areScrollCoordinationsEqual(
196
+ previousScroll.vertical,
197
+ nextScroll.vertical,
198
+ )
199
+ ? previousScroll.vertical
200
+ : nextScroll.vertical;
201
+ const horizontal =
202
+ previousScroll &&
203
+ areScrollCoordinationsEqual(
204
+ previousScroll.horizontal,
205
+ nextScroll.horizontal,
206
+ )
207
+ ? previousScroll.horizontal
208
+ : nextScroll.horizontal;
209
+ if (
210
+ !previousScroll ||
211
+ vertical !== previousScroll.vertical ||
212
+ horizontal !== previousScroll.horizontal
213
+ ) {
214
+ scrollCache.set(screenKey, { vertical, horizontal });
215
+ notify(screenKey);
216
+ }
217
+ }
218
+ };
219
+
220
+ topology.subscribeResolution(recompute);
221
+
222
+ return {
223
+ register: (registration) => {
224
+ registrations.set(registration.screenKey, registration);
225
+ recompute();
226
+ },
227
+ unregister: (screenKey) => {
228
+ if (!registrations.has(screenKey)) return;
229
+
230
+ registrations.delete(screenKey);
231
+ scrollCache.delete(screenKey);
232
+ recompute();
233
+ notify(screenKey);
234
+ },
235
+ getScrollCoordination: (screenKey, axis) =>
236
+ scrollCache.get(screenKey)?.[axis] ?? EMPTY_SCROLL_COORDINATION,
237
+ subscribe: (screenKey, listener) => {
238
+ const listeners =
239
+ listenersByScreenKey.get(screenKey) ?? new Set<() => void>();
240
+ listeners.add(listener);
241
+ listenersByScreenKey.set(screenKey, listeners);
242
+
243
+ return () => {
244
+ listeners.delete(listener);
245
+ if (listeners.size === 0) listenersByScreenKey.delete(screenKey);
246
+ };
247
+ },
248
+ };
249
+ };
250
+
251
+ export const gestureOwnershipCoordinator =
252
+ createGestureOwnershipCoordinator(screenTopology);
@@ -0,0 +1,23 @@
1
+ import { useCallback, useSyncExternalStore } from "react";
2
+ import type { ScrollGestureAxis } from "../types";
3
+ import { gestureOwnershipCoordinator } from "./gesture-ownership-coordinator";
4
+
5
+ export const useGestureScrollCoordination = (
6
+ screenKey: string | null,
7
+ axis: ScrollGestureAxis,
8
+ ) => {
9
+ const subscribe = useCallback(
10
+ (listener: () => void) =>
11
+ screenKey
12
+ ? gestureOwnershipCoordinator.subscribe(screenKey, listener)
13
+ : () => {},
14
+ [screenKey],
15
+ );
16
+ const getSnapshot = useCallback(
17
+ () =>
18
+ gestureOwnershipCoordinator.getScrollCoordination(screenKey ?? "", axis),
19
+ [axis, screenKey],
20
+ );
21
+
22
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
23
+ };
@@ -0,0 +1,73 @@
1
+ import { useLayoutEffect, useMemo } from "react";
2
+ import type { SharedValue } from "react-native-reanimated";
3
+ import {
4
+ type ClaimedDirections,
5
+ NO_CLAIMS,
6
+ } from "../../../../types/ownership.types";
7
+ import { useBlankStackStore } from "../../../stack/blank-stack.provider";
8
+ import { type BaseDescriptor, useDescriptorsStore } from "../../descriptors";
9
+ import { resolveScreenGestureConfig } from "../shared/policy";
10
+ import type { GestureOwnerMap, ScreenGestureSource } from "../types";
11
+ import { gestureOwnershipCoordinator } from "./gesture-ownership-coordinator";
12
+ import { resolveShadowingClaimDirections } from "./shadowing-claims";
13
+
14
+ const getDescriptorIsFirstKey = (descriptor: BaseDescriptor): boolean => {
15
+ const routes = descriptor.navigation.getState()?.routes ?? [];
16
+ return routes.findIndex((route) => route.key === descriptor.route.key) === 0;
17
+ };
18
+
19
+ const getDescriptorClaimedDirections = (
20
+ descriptor: BaseDescriptor | undefined,
21
+ ): ClaimedDirections => {
22
+ if (!descriptor) return NO_CLAIMS;
23
+
24
+ return resolveScreenGestureConfig({
25
+ options: descriptor.options,
26
+ isFirstKey: getDescriptorIsFirstKey(descriptor),
27
+ }).participation.claimedDirections;
28
+ };
29
+
30
+ export const useRegisterGestureOwnership = ({
31
+ claimedDirections,
32
+ owners,
33
+ source,
34
+ }: {
35
+ claimedDirections: ClaimedDirections;
36
+ owners: SharedValue<GestureOwnerMap>;
37
+ source: ScreenGestureSource;
38
+ }) => {
39
+ const previous = useDescriptorsStore((store) => store.descriptors.previous);
40
+ const isClosing = useBlankStackStore(
41
+ (store) => store.scenesByKey[source.routeKey]?.activity === "closing",
42
+ );
43
+ const previousClaimedDirections = useMemo(
44
+ () => getDescriptorClaimedDirections(previous),
45
+ [previous],
46
+ );
47
+ const effectiveClaimedDirections = useMemo(
48
+ () =>
49
+ resolveShadowingClaimDirections({
50
+ isCurrentScreenClosing: isClosing,
51
+ currentClaimedDirections: claimedDirections,
52
+ previousClaimedDirections,
53
+ }),
54
+ [claimedDirections, isClosing, previousClaimedDirections],
55
+ );
56
+
57
+ useLayoutEffect(() => {
58
+ gestureOwnershipCoordinator.register({
59
+ screenKey: source.routeKey,
60
+ source,
61
+ claimedDirections,
62
+ effectiveClaimedDirections,
63
+ owners,
64
+ });
65
+ }, [claimedDirections, effectiveClaimedDirections, owners, source]);
66
+
67
+ useLayoutEffect(
68
+ () => () => {
69
+ gestureOwnershipCoordinator.unregister(source.routeKey);
70
+ },
71
+ [source.routeKey],
72
+ );
73
+ };
@@ -5,12 +5,11 @@ import {
5
5
  type ScrollGestureState,
6
6
  } from "../../../../../types/gesture.types";
7
7
  import type { Direction } from "../../../../../types/ownership.types";
8
- import { shouldDeferToChildClaim } from "../../ownership/resolve-ownership";
9
8
  import { getPanSnapAxisConfigForDirection } from "../../shared/directions";
10
9
  import { resolveRuntimeSnapPoints } from "../../shared/snap-points";
11
10
  import type {
12
- DirectionClaimMap,
13
11
  GestureDimensions,
12
+ GestureOwnerMap,
14
13
  PanGestureRuntime,
15
14
  } from "../../types";
16
15
  import {
@@ -23,7 +22,6 @@ export type PanActivationAction = "activate" | "fail" | "wait";
23
22
  export type PanActivationReason =
24
23
  | "ancestor-dismissing"
25
24
  | "already-dragging"
26
- | "child-claim"
27
25
  | "disabled"
28
26
  | "dismissing"
29
27
  | "multi-touch"
@@ -51,7 +49,7 @@ interface ResolvePanActivationMoveDecisionProps {
51
49
  initialTouch: { x: number; y: number };
52
50
  activationState: GestureActivationState;
53
51
  ancestorDismissing: boolean;
54
- childDirectionClaims: DirectionClaimMap;
52
+ gestureOwners: GestureOwnerMap;
55
53
  currentScreenKey: string;
56
54
  scrollState: ScrollGestureState | null;
57
55
  }
@@ -147,9 +145,8 @@ const resolveOffsetFailureDecision = (
147
145
 
148
146
  const resolveDirectionGateDecision = (
149
147
  swipeDirection: Direction | null,
150
- runtime: PanGestureRuntime,
151
148
  offset: OffsetRuleResult,
152
- childDirectionClaims: DirectionClaimMap,
149
+ gestureOwners: GestureOwnerMap,
153
150
  currentScreenKey: string,
154
151
  ): PanActivationDecision | null => {
155
152
  "worklet";
@@ -162,7 +159,7 @@ const resolveDirectionGateDecision = (
162
159
  );
163
160
  }
164
161
 
165
- if (runtime.participation.ownershipStatus[swipeDirection] !== "self") {
162
+ if (gestureOwners[swipeDirection] !== currentScreenKey) {
166
163
  return createDecision(
167
164
  "fail",
168
165
  "ownership",
@@ -171,16 +168,6 @@ const resolveDirectionGateDecision = (
171
168
  );
172
169
  }
173
170
 
174
- const childClaim = childDirectionClaims[swipeDirection];
175
- if (shouldDeferToChildClaim(childClaim, currentScreenKey)) {
176
- return createDecision(
177
- "fail",
178
- "child-claim",
179
- swipeDirection,
180
- offset.nextActivationState,
181
- );
182
- }
183
-
184
171
  if (offset.nextActivationState !== GestureActivationState.PASSED) {
185
172
  return createDecision(
186
173
  "wait",
@@ -389,7 +376,7 @@ export const resolvePanActivationMoveDecision = ({
389
376
  initialTouch,
390
377
  activationState,
391
378
  ancestorDismissing,
392
- childDirectionClaims,
379
+ gestureOwners,
393
380
  currentScreenKey,
394
381
  scrollState,
395
382
  }: ResolvePanActivationMoveDecisionProps): PanActivationDecision => {
@@ -427,9 +414,8 @@ export const resolvePanActivationMoveDecision = ({
427
414
  const swipeDirection = getSwipeDirection(offset);
428
415
  const directionGateDecision = resolveDirectionGateDecision(
429
416
  swipeDirection,
430
- runtime,
431
417
  offset,
432
- childDirectionClaims,
418
+ gestureOwners,
433
419
  currentScreenKey,
434
420
  );
435
421
  if (directionGateDecision) return directionGateDecision;
@@ -12,9 +12,9 @@ import type { ScreenOptionsContextValue } from "../../../options";
12
12
  import { useCurrentScreenRelationships } from "../../../use-current-screen-relationships";
13
13
  import { resolvePanRuntime } from "../../shared/runtime";
14
14
  import type {
15
- DirectionClaimMap,
16
15
  GestureCompositionOwner,
17
16
  GestureDimensions,
17
+ GestureOwnerMap,
18
18
  PanGestureRuntime,
19
19
  ScrollGestureState,
20
20
  } from "../../types";
@@ -22,7 +22,7 @@ import { resolvePanActivationMoveDecision } from "./pan-activation-decision";
22
22
 
23
23
  interface UsePanActivationProps {
24
24
  scrollState: SharedValue<ScrollGestureState | null>;
25
- childDirectionClaims: SharedValue<DirectionClaimMap>;
25
+ gestureOwners: SharedValue<GestureOwnerMap>;
26
26
  runtime: SharedValue<PanGestureRuntime>;
27
27
  screenOptions: ScreenOptionsContextValue;
28
28
  dimensions: GestureDimensions;
@@ -31,7 +31,7 @@ interface UsePanActivationProps {
31
31
 
32
32
  export const usePanActivation = ({
33
33
  scrollState,
34
- childDirectionClaims,
34
+ gestureOwners,
35
35
  runtime,
36
36
  screenOptions,
37
37
  dimensions,
@@ -114,7 +114,7 @@ export const usePanActivation = ({
114
114
  initialTouch: initialTouch.get(),
115
115
  activationState: currentActivationState,
116
116
  ancestorDismissing: Boolean(ancestorDismissing?.get()),
117
- childDirectionClaims: childDirectionClaims.get(),
117
+ gestureOwners: gestureOwners.get(),
118
118
  currentScreenKey,
119
119
  scrollState: scrollState.get(),
120
120
  });
@@ -141,12 +141,12 @@ export const usePanActivation = ({
141
141
  },
142
142
  [
143
143
  ancestorDismissing,
144
- childDirectionClaims,
145
144
  currentScreenKey,
146
145
  dimensions,
147
146
  gestureActivationState,
148
147
  initialTouch,
149
148
  pendingDirection,
149
+ gestureOwners,
150
150
  runtime,
151
151
  screenOptions,
152
152
  scrollState,
@@ -5,8 +5,8 @@ import type { SharedValue } from "react-native-reanimated";
5
5
  import { useScreenOptionsStore } from "../../options";
6
6
  import { useStableRuntimeConfig } from "../hooks/use-stable-runtime-config";
7
7
  import type {
8
- DirectionClaimMap,
9
8
  GestureCompositionOwner,
9
+ GestureOwnerMap,
10
10
  PanGesture,
11
11
  ScreenGestureConfig,
12
12
  ScrollGestureState,
@@ -17,14 +17,14 @@ import { usePanBehavior } from "./behavior/use-pan-behavior";
17
17
  interface UseBuildPanGestureProps {
18
18
  scrollState: SharedValue<ScrollGestureState | null>;
19
19
  gestureConfig: ScreenGestureConfig;
20
- childDirectionClaims: SharedValue<DirectionClaimMap>;
20
+ gestureOwners: SharedValue<GestureOwnerMap>;
21
21
  gestureCompositionOwner: SharedValue<GestureCompositionOwner>;
22
22
  }
23
23
 
24
24
  export const useBuildPanGesture = ({
25
25
  scrollState,
26
26
  gestureConfig,
27
- childDirectionClaims,
27
+ gestureOwners,
28
28
  gestureCompositionOwner,
29
29
  }: UseBuildPanGestureProps): PanGesture => {
30
30
  const dimensions = useWindowDimensions();
@@ -38,7 +38,7 @@ export const useBuildPanGesture = ({
38
38
 
39
39
  const activation = usePanActivation({
40
40
  scrollState,
41
- childDirectionClaims,
41
+ gestureOwners,
42
42
  runtime,
43
43
  screenOptions,
44
44
  dimensions,
@@ -11,6 +11,7 @@ import useStableCallback from "../../../../hooks/use-stable-callback";
11
11
  import { AnimationStore } from "../../../../stores/animation.store";
12
12
  import { ScrollStore } from "../../../../stores/scroll.store";
13
13
  import { useOptionalScreenGestureStore } from "../gestures.provider";
14
+ import { useGestureScrollCoordination } from "../ownership/use-gesture-scroll-coordination";
14
15
  import type {
15
16
  ScrollGestureAxis,
16
17
  ScrollGestureAxisState,
@@ -26,7 +27,6 @@ import {
26
27
  updateScrollGestureAxisState,
27
28
  updateScrollMetadataAxisState,
28
29
  } from "./update-scroll-gesture-state";
29
- import { walkUpScrollGestureCoordination } from "./walk-up-scroll-gesture-coordination";
30
30
 
31
31
  interface ScrollGestureCoordinationProps {
32
32
  onContentSizeChange?: (width: number, height: number) => void;
@@ -90,10 +90,9 @@ export const useScrollGestureCoordination = (
90
90
  ) => {
91
91
  const context = useOptionalScreenGestureStore();
92
92
  const scrollDirection = props.direction ?? "vertical";
93
- const gesturePath = useMemo(
94
- () => (context ? [context, ...context.ancestorGestures] : []),
95
- [context],
96
- );
93
+ const routeKey = context?.routeKey ?? null;
94
+ const { scrollStates, panGestures, pinchGestures, ownerRouteKeys } =
95
+ useGestureScrollCoordination(routeKey, scrollDirection);
97
96
 
98
97
  const metadataOwnerContext = useOptionalScrollMetadataOwnerStore();
99
98
  const metadataOwnerProviderValue =
@@ -104,12 +103,6 @@ export const useScrollGestureCoordination = (
104
103
  );
105
104
  const [writesMetadata, setWritesMetadata] = useState(false);
106
105
 
107
- const { scrollStates, panGestures, pinchGestures, ownerRouteKeys } = useMemo(
108
- () => walkUpScrollGestureCoordination(gesturePath, scrollDirection),
109
- [gesturePath, scrollDirection],
110
- );
111
-
112
- const routeKey = context?.routeKey;
113
106
  const metadataState = useMemo(
114
107
  () => (routeKey ? ScrollStore.getValue(routeKey, "metadata") : null),
115
108
  [routeKey],
@@ -174,7 +167,10 @@ export const useScrollGestureCoordination = (
174
167
  );
175
168
 
176
169
  const nativeGesture = useMemo(() => {
177
- if (panGestures.length === 0 && pinchGestures.length === 0) return null;
170
+ // Ownership registrations disappear while a screen's Activity is paused.
171
+ // Keep its detector mounted through that gap: removing the wrapper remounts
172
+ // scroll children and loses state, including captured boundary measurements.
173
+ if (!routeKey) return null;
178
174
 
179
175
  const setIsTouched = () => {
180
176
  "worklet";
@@ -230,6 +226,7 @@ export const useScrollGestureCoordination = (
230
226
 
231
227
  return gesture;
232
228
  }, [
229
+ routeKey,
233
230
  panGestures,
234
231
  pinchGestures,
235
232
  scrollStates,
@@ -24,13 +24,11 @@ import type {
24
24
  SnapPoint,
25
25
  } from "../../../../types/screen.types";
26
26
  import { computeClaimedDirections } from "../ownership/compute-claimed-directions";
27
- import { resolveOwnership } from "../ownership/resolve-ownership";
28
27
  import type {
29
28
  PanGesturePolicy,
30
29
  PinchGesturePolicy,
31
30
  ScreenGestureConfig,
32
31
  ScreenGestureParticipation,
33
- ScreenGestureSource,
34
32
  } from "../types";
35
33
  import {
36
34
  getGestureDirectionEntries,
@@ -293,11 +291,9 @@ export const resolvePinchPolicy = (
293
291
  const resolveGestureParticipation = ({
294
292
  options,
295
293
  isFirstKey,
296
- ancestorGestures,
297
294
  }: {
298
295
  options: GesturePolicyOptions;
299
296
  isFirstKey: boolean;
300
- ancestorGestures: readonly ScreenGestureSource[];
301
297
  }): ScreenGestureParticipation => {
302
298
  const canDismiss = resolveGestureCanDismiss({
303
299
  isFirstKey,
@@ -325,23 +321,19 @@ const resolveGestureParticipation = ({
325
321
  canTrackGesture,
326
322
  effectiveSnapPoints,
327
323
  claimedDirections,
328
- ownershipStatus: resolveOwnership(claimedDirections, ancestorGestures),
329
324
  };
330
325
  };
331
326
 
332
327
  export const resolveScreenGestureConfig = ({
333
328
  options,
334
329
  isFirstKey,
335
- ancestorGestures,
336
330
  }: {
337
331
  options: ScreenTransitionConfig;
338
332
  isFirstKey: boolean;
339
- ancestorGestures: readonly ScreenGestureSource[];
340
333
  }): ScreenGestureConfig => {
341
334
  const participation = resolveGestureParticipation({
342
335
  options,
343
336
  isFirstKey,
344
- ancestorGestures,
345
337
  });
346
338
  const hasSnapPoints = participation.effectiveSnapPoints.hasSnapPoints;
347
339
 
@@ -25,7 +25,7 @@ import type {
25
25
  } from "../../../types/gesture.types";
26
26
  import type {
27
27
  ClaimedDirections,
28
- DirectionOwnership,
28
+ Direction,
29
29
  } from "../../../types/ownership.types";
30
30
  import type { ScreenTransitionConfig } from "../../../types/screen.types";
31
31
  import type { EffectiveSnapPointsResult } from "./shared/snap-points";
@@ -52,19 +52,9 @@ export type {
52
52
  ScrollMetadataState,
53
53
  };
54
54
 
55
- export type DirectionClaim = {
56
- routeKey: string;
57
- isDismissing: SharedValue<number>;
58
- } | null;
59
-
60
- export type DirectionClaimMap = {
61
- vertical: DirectionClaim;
62
- "vertical-inverted": DirectionClaim;
63
- horizontal: DirectionClaim;
64
- "horizontal-inverted": DirectionClaim;
65
- };
55
+ export type GestureOwnerMap = Record<Direction, string | null>;
66
56
 
67
- export const NO_DIRECTION_CLAIMS: DirectionClaimMap = {
57
+ export const NO_GESTURE_OWNERS: GestureOwnerMap = {
68
58
  vertical: null,
69
59
  "vertical-inverted": null,
70
60
  horizontal: null,
@@ -77,13 +67,9 @@ export interface ScreenGestureSource {
77
67
  panGesture: PanGesture;
78
68
  pinchGesture: PinchGesture;
79
69
  scrollState: SharedValue<ScrollGestureState | null>;
80
- claimedDirections: ClaimedDirections;
81
- childDirectionClaims: SharedValue<DirectionClaimMap>;
82
70
  }
83
71
 
84
- export interface GestureContextType extends ScreenGestureSource {
85
- ancestorGestures: readonly ScreenGestureSource[];
86
- }
72
+ export type GestureContextType = ScreenGestureSource;
87
73
 
88
74
  export interface ScreenGestureParticipation {
89
75
  /** Whether this route is the first route in its stack. First routes never track gestures. */
@@ -94,7 +80,6 @@ export interface ScreenGestureParticipation {
94
80
  canTrackGesture: boolean;
95
81
  effectiveSnapPoints: EffectiveSnapPointsResult;
96
82
  claimedDirections: ClaimedDirections;
97
- ownershipStatus: DirectionOwnership;
98
83
  }
99
84
 
100
85
  export interface ScreenGestureConfig {