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
@@ -1,17 +1,11 @@
1
1
  import type { ReactNode } from "react";
2
- import { useLayoutEffect, useMemo } from "react";
3
- import { screenTopology } from "../../../factories/screen-topology";
4
- import { useBlankStackStore } from "../../../providers/stack/blank-stack.provider";
2
+ import { useMemo } from "react";
5
3
  import type { BaseStackDescriptor } from "../../../types/stack.types";
6
4
  import createProvider from "../../../utils/create-provider";
5
+ import { useBlankStackStore } from "../../stack/blank-stack.provider";
7
6
  import type { DescriptorDerivations } from "./helpers/derive-descriptor-derivations";
8
7
  import { deriveDescriptorDerivations } from "./helpers/derive-descriptor-derivations";
9
8
 
10
- /**
11
- * Base descriptor interface - minimal contract for all stack types.
12
- * This allows stack implementations to work with the shared providers without
13
- * tight coupling to React Navigation.
14
- */
15
9
  export type BaseDescriptor = BaseStackDescriptor;
16
10
 
17
11
  export interface DescriptorsContextValue {
@@ -22,7 +16,7 @@ export interface DescriptorsContextValue {
22
16
 
23
17
  export type DescriptorDerivationsContextValue = DescriptorDerivations;
24
18
 
25
- interface DescriptorStoreValue extends DescriptorsContextValue {
19
+ interface DescriptorStoreValue {
26
20
  descriptors: DescriptorsContextValue;
27
21
  derivations: DescriptorDerivationsContextValue;
28
22
  options: BaseDescriptor["options"];
@@ -30,106 +24,56 @@ interface DescriptorStoreValue extends DescriptorsContextValue {
30
24
 
31
25
  type DescriptorsProviderProps = {
32
26
  children: ReactNode;
33
- previous?: BaseDescriptor;
34
- current?: BaseDescriptor;
35
- next?: BaseDescriptor;
36
- routeKey?: string;
27
+ routeKey: string;
37
28
  };
38
29
 
39
- const createDescriptorsProvider = createProvider("Descriptors", {
40
- global: true,
41
- })<DescriptorsProviderProps, DescriptorStoreValue>;
42
-
43
30
  const {
44
31
  DescriptorsProvider,
45
32
  useDescriptorsStore,
46
33
  useOptionalDescriptorsStore,
47
- }: ReturnType<typeof createDescriptorsProvider> = createDescriptorsProvider(
48
- ({ previous, current, next, routeKey, children }) => {
49
- const parentScreenKey = useOptionalDescriptorsStore(
50
- (store) => store?.derivations.currentScreenKey,
51
- );
52
- const blankStackCurrent = useBlankStackStore((store) =>
53
- routeKey ? store.scenesByKey[routeKey]?.descriptor : undefined,
54
- );
55
- const blankStackPrevious = useBlankStackStore((store) =>
56
- routeKey ? store.scenesByKey[routeKey]?.previousDescriptor : undefined,
57
- );
58
- const blankStackNext = useBlankStackStore((store) =>
59
- routeKey ? store.scenesByKey[routeKey]?.nextDescriptor : undefined,
60
- );
61
- const blankStackFocusedScene = useBlankStackStore(
62
- (store) => store.scenes[store.focusedIndex],
63
- );
64
- const resolvedCurrent = current ?? blankStackCurrent;
65
- const resolvedPrevious = previous ?? blankStackPrevious;
66
- const resolvedNext = next ?? blankStackNext;
67
- const currentScreenKey = current?.route.key ?? routeKey;
68
- const focusedScene = blankStackFocusedScene;
69
- const isActiveScreen =
70
- focusedScene?.route.key === currentScreenKey &&
71
- focusedScene?.activity === "active";
72
-
73
- if (!resolvedCurrent) {
74
- throw new Error(
75
- `Descriptors scene "${routeKey ?? "unknown"}" was not found.`,
76
- );
77
- }
78
-
79
- const descriptors = useMemo(
80
- () => ({
81
- previous: resolvedPrevious,
82
- current: resolvedCurrent,
83
- next: resolvedNext,
84
- }),
85
- [resolvedPrevious, resolvedCurrent, resolvedNext],
86
- );
87
-
88
- const derivations = useMemo(
89
- () =>
90
- deriveDescriptorDerivations({
91
- previous: resolvedPrevious,
92
- current: resolvedCurrent,
93
- next: resolvedNext,
94
- }),
95
- [resolvedPrevious, resolvedCurrent, resolvedNext],
96
- );
97
-
98
- useLayoutEffect(() => {
99
- screenTopology.register({
100
- screenKey: derivations.currentScreenKey,
101
- parentScreenKey,
102
- });
34
+ } = createProvider("Descriptors", {
35
+ global: true,
36
+ })<DescriptorsProviderProps, DescriptorStoreValue>(({ routeKey, children }) => {
37
+ const scene = useBlankStackStore((s) => s.scenesByKey[routeKey]);
103
38
 
104
- return () => {
105
- screenTopology.unregister(derivations.currentScreenKey);
106
- };
107
- }, [derivations.currentScreenKey, parentScreenKey]);
39
+ const currentDescriptor = scene.descriptor;
40
+ const previousDescriptor = scene.previousDescriptor;
41
+ const nextDescriptor = scene.nextDescriptor;
42
+ const options = scene.descriptor.options;
108
43
 
109
- useLayoutEffect(() => {
110
- if (!isActiveScreen || !parentScreenKey) {
111
- return;
112
- }
44
+ const descriptors = useMemo(() => {
45
+ return {
46
+ previous: previousDescriptor,
47
+ current: currentDescriptor,
48
+ next: nextDescriptor,
49
+ };
50
+ }, [previousDescriptor, currentDescriptor, nextDescriptor]);
113
51
 
114
- return screenTopology.activate({
115
- screenKey: derivations.currentScreenKey,
116
- parentScreenKey,
117
- });
118
- }, [isActiveScreen, derivations.currentScreenKey, parentScreenKey]);
52
+ const derivations = useMemo(() => {
53
+ return deriveDescriptorDerivations({
54
+ previous: previousDescriptor,
55
+ current: currentDescriptor,
56
+ next: nextDescriptor,
57
+ });
58
+ }, [previousDescriptor, currentDescriptor, nextDescriptor]);
119
59
 
60
+ const value = useMemo(() => {
120
61
  return {
121
- key: derivations.currentScreenKey,
122
- value: {
123
- previous: resolvedPrevious,
124
- current: resolvedCurrent,
125
- next: resolvedNext,
126
- descriptors,
127
- derivations,
128
- options: resolvedCurrent.options,
129
- },
130
- children,
62
+ descriptors,
63
+ derivations,
64
+ options,
131
65
  };
132
- },
133
- );
66
+ }, [descriptors, derivations, options]);
67
+
68
+ return {
69
+ key: routeKey,
70
+ value,
71
+ children,
72
+ };
73
+ });
134
74
 
135
- export { DescriptorsProvider, useDescriptorsStore };
75
+ export {
76
+ DescriptorsProvider,
77
+ useDescriptorsStore,
78
+ useOptionalDescriptorsStore,
79
+ };
@@ -2,4 +2,5 @@ export {
2
2
  type BaseDescriptor,
3
3
  DescriptorsProvider,
4
4
  useDescriptorsStore,
5
+ useOptionalDescriptorsStore,
5
6
  } from "./descriptors.provider";
@@ -1,19 +1,17 @@
1
- import { Fragment, useMemo } from "react";
1
+ import { useMemo } from "react";
2
2
  import { Gesture } from "react-native-gesture-handler";
3
3
  import { useSharedValue } from "react-native-reanimated";
4
4
  import { ScrollStore } from "../../../stores/scroll.store";
5
5
  import createProvider from "../../../utils/create-provider";
6
6
  import { useDescriptorsStore } from "../descriptors";
7
- import { useCurrentScreenRelationships } from "../use-current-screen-relationships";
8
7
  import { useScreenGestureConfig } from "./hooks/use-screen-gesture-config";
9
- import { GestureOwnershipBridge } from "./ownership/gesture-ownership-bridge";
8
+ import { useRegisterGestureOwnership } from "./ownership/use-register-gesture-ownership";
10
9
  import { useBuildPanGesture } from "./pan/use-build-pan-gesture";
11
10
  import { useBuildPinchGesture } from "./pinch/use-build-pinch-gesture";
12
11
  import {
13
- type DirectionClaimMap,
14
12
  type GestureCompositionOwner,
15
13
  type GestureContextType,
16
- NO_DIRECTION_CLAIMS,
14
+ NO_GESTURE_OWNERS,
17
15
  type ScreenGestureSource,
18
16
  } from "./types";
19
17
 
@@ -21,15 +19,9 @@ interface ScreenGestureProviderProps {
21
19
  children: React.ReactNode;
22
20
  }
23
21
 
24
- type ScreenGestureStoreValue = GestureContextType & {
25
- relationshipGestureSources: readonly ScreenGestureSource[];
26
- };
27
-
28
- const EMPTY_GESTURE_SOURCES: readonly ScreenGestureSource[] = [];
29
-
30
22
  const createScreenGestureProvider = createProvider("ScreenGesture", {
31
23
  global: true,
32
- })<ScreenGestureProviderProps, ScreenGestureStoreValue>;
24
+ })<ScreenGestureProviderProps, GestureContextType>;
33
25
 
34
26
  export const {
35
27
  ScreenGestureProvider,
@@ -40,28 +32,15 @@ export const {
40
32
  const currentScreenKey = useDescriptorsStore(
41
33
  (store) => store.derivations.currentScreenKey,
42
34
  );
43
- const isTopMostScreen = useDescriptorsStore(
44
- (store) => store.derivations.isTopMostScreen,
45
- );
46
- const relationships = useCurrentScreenRelationships();
47
- const relationshipAncestorGestures =
48
- useOptionalScreenGestureStore(
49
- relationships.parentScreenKey,
50
- (store) => store.relationshipGestureSources,
51
- ) ?? EMPTY_GESTURE_SOURCES;
52
- const ancestorGestures = isTopMostScreen
53
- ? relationshipAncestorGestures
54
- : EMPTY_GESTURE_SOURCES;
55
- const gestureConfig = useScreenGestureConfig(ancestorGestures);
35
+ const gestureConfig = useScreenGestureConfig();
56
36
  const scrollState = ScrollStore.getValue(currentScreenKey, "coordination");
57
- const childDirectionClaims =
58
- useSharedValue<DirectionClaimMap>(NO_DIRECTION_CLAIMS);
37
+ const gestureOwners = useSharedValue({ ...NO_GESTURE_OWNERS });
59
38
  const gestureCompositionOwner =
60
39
  useSharedValue<GestureCompositionOwner>(null);
61
40
  const panGesture = useBuildPanGesture({
62
41
  scrollState,
63
42
  gestureConfig,
64
- childDirectionClaims,
43
+ gestureOwners,
65
44
  gestureCompositionOwner,
66
45
  });
67
46
  const pinchGesture = useBuildPinchGesture({
@@ -79,8 +58,6 @@ export const {
79
58
  panGesture,
80
59
  pinchGesture,
81
60
  scrollState,
82
- claimedDirections: gestureConfig.participation.claimedDirections,
83
- childDirectionClaims,
84
61
  }),
85
62
  [
86
63
  currentScreenKey,
@@ -88,36 +65,18 @@ export const {
88
65
  panGesture,
89
66
  pinchGesture,
90
67
  scrollState,
91
- gestureConfig.participation.claimedDirections,
92
- childDirectionClaims,
93
68
  ],
94
69
  );
95
- const relationshipGestureSources = useMemo(
96
- () => [source, ...ancestorGestures],
97
- [source, ancestorGestures],
98
- );
99
- const value = useMemo<ScreenGestureStoreValue>(
100
- () => ({
101
- ...source,
102
- ancestorGestures,
103
- relationshipGestureSources,
104
- }),
105
- [source, ancestorGestures, relationshipGestureSources],
106
- );
107
- const content = useMemo(
108
- () => (
109
- <Fragment>
110
- <GestureOwnershipBridge />
111
- {children}
112
- </Fragment>
113
- ),
114
- [children],
115
- );
70
+ useRegisterGestureOwnership({
71
+ claimedDirections: gestureConfig.participation.claimedDirections,
72
+ owners: gestureOwners,
73
+ source,
74
+ });
116
75
 
117
76
  return {
118
77
  key: currentScreenKey,
119
- value,
120
- children: content,
78
+ value: source,
79
+ children,
121
80
  };
122
81
  },
123
82
  );
@@ -1,11 +1,9 @@
1
1
  import { useMemo } from "react";
2
2
  import { useDescriptorsStore } from "../../descriptors";
3
3
  import { resolveScreenGestureConfig } from "../shared/policy";
4
- import type { ScreenGestureConfig, ScreenGestureSource } from "../types";
4
+ import type { ScreenGestureConfig } from "../types";
5
5
 
6
- export function useScreenGestureConfig(
7
- ancestorGestures: readonly ScreenGestureSource[],
8
- ): ScreenGestureConfig {
6
+ export function useScreenGestureConfig(): ScreenGestureConfig {
9
7
  const options = useDescriptorsStore((store) => store.options);
10
8
  const isFirstKey = useDescriptorsStore(
11
9
  (store) => store.derivations.isFirstKey,
@@ -15,8 +13,7 @@ export function useScreenGestureConfig(
15
13
  resolveScreenGestureConfig({
16
14
  options,
17
15
  isFirstKey,
18
- ancestorGestures,
19
16
  }),
20
- [isFirstKey, options, ancestorGestures],
17
+ [isFirstKey, options],
21
18
  );
22
19
  }
@@ -1,10 +1,7 @@
1
- import {
2
- type ChainTarget,
3
- resolveChainTarget,
4
- } from "../../../../utils/resolve-chain-target";
1
+ import { useResolvedTransitionKey } from "../../topology";
5
2
  import { useOptionalScreenGestureStore } from "../gestures.provider";
6
3
 
7
- export type ScreenGestureTarget = ChainTarget;
4
+ export type ScreenGestureTarget = { depth: number };
8
5
 
9
6
  /**
10
7
  * Returns a screen navigation pan gesture.
@@ -20,13 +17,16 @@ export type ScreenGestureTarget = ChainTarget;
20
17
  * ```
21
18
  */
22
19
  export const useScreenGesture = (target?: ScreenGestureTarget) => {
23
- const ctx = useOptionalScreenGestureStore();
24
-
25
- return (
26
- resolveChainTarget({
27
- target,
28
- self: ctx,
29
- ancestors: ctx?.ancestorGestures ?? [],
30
- })?.panGesture ?? null
20
+ const localGesture = useOptionalScreenGestureStore();
21
+ const usesLocalStore = target === undefined || target.depth === 0;
22
+ const screenKey = useResolvedTransitionKey(
23
+ localGesture?.routeKey ?? null,
24
+ target,
25
+ );
26
+ const keyedGesture = useOptionalScreenGestureStore(
27
+ usesLocalStore ? null : screenKey,
28
+ (store) => store.panGesture,
31
29
  );
30
+
31
+ return usesLocalStore ? (localGesture?.panGesture ?? null) : keyedGesture;
32
32
  };
@@ -4,8 +4,6 @@ export {
4
4
  useScreenGestureStore,
5
5
  } from "./gestures.provider";
6
6
  export type {
7
- DirectionClaim,
8
- DirectionClaimMap,
9
7
  GestureContextType,
10
8
  ScrollGestureAxis,
11
9
  ScrollGestureAxisState,
@@ -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
+ };