react-native-screen-transitions 3.13.0-beta.0 → 3.13.0-beta.1

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 (414) hide show
  1. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js +1 -2
  2. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  3. package/lib/commonjs/shared/components/activity/helpers.js +50 -1
  4. package/lib/commonjs/shared/components/activity/helpers.js.map +1 -1
  5. package/lib/commonjs/shared/components/activity/variants/activity-screen.js +16 -67
  6. package/lib/commonjs/shared/components/activity/variants/activity-screen.js.map +1 -1
  7. package/lib/commonjs/shared/components/boundary/components/boundary-target.js +1 -1
  8. package/lib/commonjs/shared/components/boundary/components/boundary-target.js.map +1 -1
  9. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js +2 -1
  10. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  11. package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +2 -4
  12. package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  13. package/lib/commonjs/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +1 -6
  14. package/lib/commonjs/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  15. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js +6 -6
  16. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js.map +1 -1
  17. package/lib/commonjs/shared/components/overlay/helpers/create-overlay-interpolator-frame.js +9 -2
  18. package/lib/commonjs/shared/components/overlay/helpers/create-overlay-interpolator-frame.js.map +1 -1
  19. package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js +16 -4
  20. package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
  21. package/lib/commonjs/shared/components/overlay/hooks/use-overlay-slot.js +11 -6
  22. package/lib/commonjs/shared/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  23. package/lib/commonjs/shared/components/overlay/variations/overlay-host.js +5 -4
  24. package/lib/commonjs/shared/components/overlay/variations/overlay-host.js.map +1 -1
  25. package/lib/commonjs/shared/components/screen-container/layers/content.js +1 -3
  26. package/lib/commonjs/shared/components/screen-container/layers/content.js.map +1 -1
  27. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -6
  28. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  29. package/lib/commonjs/shared/factories/screen-topology/create-screen-topology.js +147 -0
  30. package/lib/commonjs/shared/factories/screen-topology/create-screen-topology.js.map +1 -0
  31. package/lib/commonjs/shared/factories/screen-topology/index.js +45 -0
  32. package/lib/commonjs/shared/factories/screen-topology/index.js.map +1 -0
  33. package/lib/commonjs/shared/factories/screen-topology/types.js +2 -0
  34. package/lib/commonjs/shared/factories/screen-topology/types.js.map +1 -0
  35. package/lib/commonjs/shared/factories/screen-topology/use-screen-relationships.js +15 -0
  36. package/lib/commonjs/shared/factories/screen-topology/use-screen-relationships.js.map +1 -0
  37. package/lib/commonjs/shared/factories/screen-topology/worklet.js +55 -0
  38. package/lib/commonjs/shared/factories/screen-topology/worklet.js.map +1 -0
  39. package/lib/commonjs/shared/hooks/navigation/use-screen-state.js.map +1 -1
  40. package/lib/commonjs/shared/hooks/navigation/use-stack.js +16 -16
  41. package/lib/commonjs/shared/hooks/navigation/use-stack.js.map +1 -1
  42. package/lib/commonjs/shared/providers/screen/animation/animation.provider.js +26 -98
  43. package/lib/commonjs/shared/providers/screen/animation/animation.provider.js.map +1 -1
  44. package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +6 -52
  45. package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
  46. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js +14 -25
  47. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  48. package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +4 -13
  49. package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -1
  50. package/lib/commonjs/shared/providers/screen/animation/helpers/stack-progress.js +10 -26
  51. package/lib/commonjs/shared/providers/screen/animation/helpers/stack-progress.js.map +1 -1
  52. package/lib/commonjs/shared/providers/screen/animation/helpers/use-build-transition-state.js +0 -1
  53. package/lib/commonjs/shared/providers/screen/animation/helpers/use-build-transition-state.js.map +1 -1
  54. package/lib/commonjs/shared/providers/screen/animation/index.js +6 -0
  55. package/lib/commonjs/shared/providers/screen/animation/index.js.map +1 -1
  56. package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js +8 -7
  57. package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
  58. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js +40 -25
  59. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  60. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js +1 -4
  61. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js.map +1 -1
  62. package/lib/commonjs/shared/providers/screen/gestures/gestures.provider.js +24 -19
  63. package/lib/commonjs/shared/providers/screen/gestures/gestures.provider.js.map +1 -1
  64. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -3
  65. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  66. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture.js +2 -3
  67. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  68. package/lib/commonjs/shared/providers/screen/gestures/index.js +8 -2
  69. package/lib/commonjs/shared/providers/screen/gestures/index.js.map +1 -1
  70. package/lib/commonjs/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js +11 -18
  71. package/lib/commonjs/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +1 -1
  72. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js +5 -7
  73. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  74. package/lib/commonjs/shared/providers/screen/gestures/pan/activation/use-pan-activation.js +4 -1
  75. package/lib/commonjs/shared/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  76. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js +5 -8
  77. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js.map +1 -1
  78. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +5 -4
  79. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  80. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +1 -3
  81. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +1 -1
  82. package/lib/commonjs/shared/providers/screen/gestures/shared/policy.js +4 -4
  83. package/lib/commonjs/shared/providers/screen/gestures/shared/policy.js.map +1 -1
  84. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js +4 -2
  85. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
  86. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +5 -8
  87. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  88. package/lib/commonjs/shared/providers/screen/styles/index.js +8 -2
  89. package/lib/commonjs/shared/providers/screen/styles/index.js.map +1 -1
  90. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js +17 -19
  91. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js.map +1 -1
  92. package/lib/commonjs/shared/providers/screen/use-current-screen-relationships.js +14 -0
  93. package/lib/commonjs/shared/providers/screen/use-current-screen-relationships.js.map +1 -0
  94. package/lib/commonjs/shared/providers/stack/blank-stack.provider.js +13 -5
  95. package/lib/commonjs/shared/providers/stack/blank-stack.provider.js.map +1 -1
  96. package/lib/commonjs/shared/providers/stack/core.provider.js +1 -3
  97. package/lib/commonjs/shared/providers/stack/core.provider.js.map +1 -1
  98. package/lib/commonjs/shared/providers/stack/direct.provider.js +2 -5
  99. package/lib/commonjs/shared/providers/stack/direct.provider.js.map +1 -1
  100. package/lib/commonjs/shared/stores/animation.store.js +0 -2
  101. package/lib/commonjs/shared/stores/animation.store.js.map +1 -1
  102. package/lib/commonjs/shared/stores/bounds/internals/coordinator.js +23 -9
  103. package/lib/commonjs/shared/stores/bounds/internals/coordinator.js.map +1 -1
  104. package/lib/commonjs/shared/stores/bounds/internals/links.js +2 -2
  105. package/lib/commonjs/shared/stores/bounds/internals/links.js.map +1 -1
  106. package/lib/commonjs/shared/stores/bounds/internals/state.js +1 -1
  107. package/lib/commonjs/shared/utils/create-provider.js +51 -100
  108. package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
  109. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js +1 -2
  110. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  111. package/lib/module/shared/components/activity/helpers.js +48 -0
  112. package/lib/module/shared/components/activity/helpers.js.map +1 -1
  113. package/lib/module/shared/components/activity/variants/activity-screen.js +17 -68
  114. package/lib/module/shared/components/activity/variants/activity-screen.js.map +1 -1
  115. package/lib/module/shared/components/boundary/components/boundary-target.js +2 -2
  116. package/lib/module/shared/components/boundary/components/boundary-target.js.map +1 -1
  117. package/lib/module/shared/components/boundary/hooks/use-measurer.js +3 -2
  118. package/lib/module/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  119. package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +3 -5
  120. package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  121. package/lib/module/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +2 -7
  122. package/lib/module/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  123. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js +5 -6
  124. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js.map +1 -1
  125. package/lib/module/shared/components/overlay/helpers/create-overlay-interpolator-frame.js +7 -1
  126. package/lib/module/shared/components/overlay/helpers/create-overlay-interpolator-frame.js.map +1 -1
  127. package/lib/module/shared/components/overlay/helpers/get-active-overlay.js +16 -4
  128. package/lib/module/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
  129. package/lib/module/shared/components/overlay/hooks/use-overlay-slot.js +12 -7
  130. package/lib/module/shared/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  131. package/lib/module/shared/components/overlay/variations/overlay-host.js +7 -6
  132. package/lib/module/shared/components/overlay/variations/overlay-host.js.map +1 -1
  133. package/lib/module/shared/components/screen-container/layers/content.js +2 -3
  134. package/lib/module/shared/components/screen-container/layers/content.js.map +1 -1
  135. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +9 -7
  136. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  137. package/lib/module/shared/factories/screen-topology/create-screen-topology.js +142 -0
  138. package/lib/module/shared/factories/screen-topology/create-screen-topology.js.map +1 -0
  139. package/lib/module/shared/factories/screen-topology/index.js +6 -0
  140. package/lib/module/shared/factories/screen-topology/index.js.map +1 -0
  141. package/lib/module/shared/factories/screen-topology/types.js +2 -0
  142. package/lib/module/shared/factories/screen-topology/types.js.map +1 -0
  143. package/lib/module/shared/factories/screen-topology/use-screen-relationships.js +10 -0
  144. package/lib/module/shared/factories/screen-topology/use-screen-relationships.js.map +1 -0
  145. package/lib/module/shared/factories/screen-topology/worklet.js +48 -0
  146. package/lib/module/shared/factories/screen-topology/worklet.js.map +1 -0
  147. package/lib/module/shared/hooks/navigation/use-screen-state.js.map +1 -1
  148. package/lib/module/shared/hooks/navigation/use-stack.js +17 -18
  149. package/lib/module/shared/hooks/navigation/use-stack.js.map +1 -1
  150. package/lib/module/shared/providers/screen/animation/animation.provider.js +25 -98
  151. package/lib/module/shared/providers/screen/animation/animation.provider.js.map +1 -1
  152. package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +6 -52
  153. package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
  154. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js +16 -27
  155. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  156. package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +4 -13
  157. package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -1
  158. package/lib/module/shared/providers/screen/animation/helpers/stack-progress.js +9 -24
  159. package/lib/module/shared/providers/screen/animation/helpers/stack-progress.js.map +1 -1
  160. package/lib/module/shared/providers/screen/animation/helpers/use-build-transition-state.js +0 -1
  161. package/lib/module/shared/providers/screen/animation/helpers/use-build-transition-state.js.map +1 -1
  162. package/lib/module/shared/providers/screen/animation/index.js +1 -1
  163. package/lib/module/shared/providers/screen/animation/index.js.map +1 -1
  164. package/lib/module/shared/providers/screen/animation/use-screen-animation.js +9 -8
  165. package/lib/module/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
  166. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js +43 -27
  167. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  168. package/lib/module/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js +1 -4
  169. package/lib/module/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js.map +1 -1
  170. package/lib/module/shared/providers/screen/gestures/gestures.provider.js +21 -17
  171. package/lib/module/shared/providers/screen/gestures/gestures.provider.js.map +1 -1
  172. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -3
  173. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  174. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture.js +3 -4
  175. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  176. package/lib/module/shared/providers/screen/gestures/index.js +1 -1
  177. package/lib/module/shared/providers/screen/gestures/index.js.map +1 -1
  178. package/lib/module/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js +13 -20
  179. package/lib/module/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +1 -1
  180. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js +5 -7
  181. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  182. package/lib/module/shared/providers/screen/gestures/pan/activation/use-pan-activation.js +4 -1
  183. package/lib/module/shared/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  184. package/lib/module/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js +4 -8
  185. package/lib/module/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js.map +1 -1
  186. package/lib/module/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +7 -6
  187. package/lib/module/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  188. package/lib/module/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +1 -3
  189. package/lib/module/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +1 -1
  190. package/lib/module/shared/providers/screen/gestures/shared/policy.js +4 -4
  191. package/lib/module/shared/providers/screen/gestures/shared/policy.js.map +1 -1
  192. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js +5 -3
  193. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
  194. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +5 -8
  195. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  196. package/lib/module/shared/providers/screen/styles/index.js +1 -1
  197. package/lib/module/shared/providers/screen/styles/index.js.map +1 -1
  198. package/lib/module/shared/providers/screen/styles/slot.provider.js +14 -16
  199. package/lib/module/shared/providers/screen/styles/slot.provider.js.map +1 -1
  200. package/lib/module/shared/providers/screen/use-current-screen-relationships.js +9 -0
  201. package/lib/module/shared/providers/screen/use-current-screen-relationships.js.map +1 -0
  202. package/lib/module/shared/providers/stack/blank-stack.provider.js +12 -5
  203. package/lib/module/shared/providers/stack/blank-stack.provider.js.map +1 -1
  204. package/lib/module/shared/providers/stack/core.provider.js +1 -3
  205. package/lib/module/shared/providers/stack/core.provider.js.map +1 -1
  206. package/lib/module/shared/providers/stack/direct.provider.js +2 -5
  207. package/lib/module/shared/providers/stack/direct.provider.js.map +1 -1
  208. package/lib/module/shared/stores/animation.store.js +0 -2
  209. package/lib/module/shared/stores/animation.store.js.map +1 -1
  210. package/lib/module/shared/stores/bounds/internals/coordinator.js +18 -4
  211. package/lib/module/shared/stores/bounds/internals/coordinator.js.map +1 -1
  212. package/lib/module/shared/stores/bounds/internals/links.js +1 -1
  213. package/lib/module/shared/stores/bounds/internals/links.js.map +1 -1
  214. package/lib/module/shared/stores/bounds/internals/state.js +1 -1
  215. package/lib/module/shared/utils/create-provider.js +51 -100
  216. package/lib/module/shared/utils/create-provider.js.map +1 -1
  217. package/lib/typescript/native-stack/views/useHeaderConfigProps.d.ts +1 -1
  218. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -1
  219. package/lib/typescript/shared/components/activity/helpers.d.ts +16 -0
  220. package/lib/typescript/shared/components/activity/helpers.d.ts.map +1 -1
  221. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts +2 -4
  222. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -1
  223. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts.map +1 -1
  224. package/lib/typescript/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts.map +1 -1
  225. package/lib/typescript/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts.map +1 -1
  226. package/lib/typescript/shared/components/boundary/portal/components/boundary-portal/hooks/use-placeholder-styles.d.ts +2 -2
  227. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts +3 -0
  228. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts.map +1 -1
  229. package/lib/typescript/shared/components/create-transition-aware-component.d.ts +6 -5
  230. package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
  231. package/lib/typescript/shared/components/overlay/helpers/create-overlay-interpolator-frame.d.ts +1 -0
  232. package/lib/typescript/shared/components/overlay/helpers/create-overlay-interpolator-frame.d.ts.map +1 -1
  233. package/lib/typescript/shared/components/overlay/helpers/get-active-overlay.d.ts.map +1 -1
  234. package/lib/typescript/shared/components/overlay/hooks/use-overlay-slot.d.ts +3 -2
  235. package/lib/typescript/shared/components/overlay/hooks/use-overlay-slot.d.ts.map +1 -1
  236. package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts.map +1 -1
  237. package/lib/typescript/shared/components/screen-container/layers/content.d.ts.map +1 -1
  238. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts +1 -1
  239. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts.map +1 -1
  240. package/lib/typescript/shared/factories/screen-topology/create-screen-topology.d.ts +4 -0
  241. package/lib/typescript/shared/factories/screen-topology/create-screen-topology.d.ts.map +1 -0
  242. package/lib/typescript/shared/factories/screen-topology/index.d.ts +5 -0
  243. package/lib/typescript/shared/factories/screen-topology/index.d.ts.map +1 -0
  244. package/lib/typescript/shared/factories/screen-topology/types.d.ts +20 -0
  245. package/lib/typescript/shared/factories/screen-topology/types.d.ts.map +1 -0
  246. package/lib/typescript/shared/factories/screen-topology/use-screen-relationships.d.ts +5 -0
  247. package/lib/typescript/shared/factories/screen-topology/use-screen-relationships.d.ts.map +1 -0
  248. package/lib/typescript/shared/factories/screen-topology/worklet.d.ts +5 -0
  249. package/lib/typescript/shared/factories/screen-topology/worklet.d.ts.map +1 -0
  250. package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts.map +1 -1
  251. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +2 -0
  252. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
  253. package/lib/typescript/shared/index.d.ts +703 -651
  254. package/lib/typescript/shared/index.d.ts.map +1 -1
  255. package/lib/typescript/shared/providers/screen/animation/animation.provider.d.ts +14 -12
  256. package/lib/typescript/shared/providers/screen/animation/animation.provider.d.ts.map +1 -1
  257. package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts +4 -4
  258. package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts.map +1 -1
  259. package/lib/typescript/shared/providers/screen/animation/helpers/hydrate-transition-state/types.d.ts +0 -1
  260. package/lib/typescript/shared/providers/screen/animation/helpers/hydrate-transition-state/types.d.ts.map +1 -1
  261. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts +1 -2
  262. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  263. package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts +2 -2
  264. package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts.map +1 -1
  265. package/lib/typescript/shared/providers/screen/animation/helpers/stack-progress.d.ts +5 -2
  266. package/lib/typescript/shared/providers/screen/animation/helpers/stack-progress.d.ts.map +1 -1
  267. package/lib/typescript/shared/providers/screen/animation/helpers/use-build-transition-state.d.ts +0 -1
  268. package/lib/typescript/shared/providers/screen/animation/helpers/use-build-transition-state.d.ts.map +1 -1
  269. package/lib/typescript/shared/providers/screen/animation/index.d.ts +1 -1
  270. package/lib/typescript/shared/providers/screen/animation/index.d.ts.map +1 -1
  271. package/lib/typescript/shared/providers/screen/animation/types.d.ts +1 -13
  272. package/lib/typescript/shared/providers/screen/animation/types.d.ts.map +1 -1
  273. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts +5 -2
  274. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  275. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.d.ts +1 -4
  276. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.d.ts.map +1 -1
  277. package/lib/typescript/shared/providers/screen/gestures/gestures.provider.d.ts +16 -4
  278. package/lib/typescript/shared/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
  279. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts +2 -2
  280. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts.map +1 -1
  281. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture.d.ts.map +1 -1
  282. package/lib/typescript/shared/providers/screen/gestures/index.d.ts +1 -1
  283. package/lib/typescript/shared/providers/screen/gestures/index.d.ts.map +1 -1
  284. package/lib/typescript/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts.map +1 -1
  285. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts +2 -3
  286. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +1 -1
  287. package/lib/typescript/shared/providers/screen/gestures/pan/activation/use-pan-activation.d.ts.map +1 -1
  288. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.d.ts +5 -3
  289. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.d.ts.map +1 -1
  290. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.d.ts.map +1 -1
  291. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts +2 -2
  292. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts.map +1 -1
  293. package/lib/typescript/shared/providers/screen/gestures/shared/policy.d.ts +3 -3
  294. package/lib/typescript/shared/providers/screen/gestures/shared/policy.d.ts.map +1 -1
  295. package/lib/typescript/shared/providers/screen/gestures/types.d.ts +4 -2
  296. package/lib/typescript/shared/providers/screen/gestures/types.d.ts.map +1 -1
  297. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts +4 -4
  298. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -1
  299. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  300. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +2 -2
  301. package/lib/typescript/shared/providers/screen/styles/index.d.ts +1 -1
  302. package/lib/typescript/shared/providers/screen/styles/index.d.ts.map +1 -1
  303. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts +9 -4
  304. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts.map +1 -1
  305. package/lib/typescript/shared/providers/screen/use-current-screen-relationships.d.ts +5 -0
  306. package/lib/typescript/shared/providers/screen/use-current-screen-relationships.d.ts.map +1 -0
  307. package/lib/typescript/shared/providers/stack/blank-stack.provider.d.ts +4 -1
  308. package/lib/typescript/shared/providers/stack/blank-stack.provider.d.ts.map +1 -1
  309. package/lib/typescript/shared/providers/stack/core.provider.d.ts.map +1 -1
  310. package/lib/typescript/shared/providers/stack/direct.provider.d.ts.map +1 -1
  311. package/lib/typescript/shared/stores/animation.store.d.ts +0 -1
  312. package/lib/typescript/shared/stores/animation.store.d.ts.map +1 -1
  313. package/lib/typescript/shared/stores/bounds/internals/coordinator.d.ts.map +1 -1
  314. package/lib/typescript/shared/stores/bounds/internals/links.d.ts.map +1 -1
  315. package/lib/typescript/shared/stores/bounds/internals/state.d.ts +1 -1
  316. package/lib/typescript/shared/stores/bounds/internals/state.d.ts.map +1 -1
  317. package/lib/typescript/shared/stores/bounds/types.d.ts +0 -1
  318. package/lib/typescript/shared/stores/bounds/types.d.ts.map +1 -1
  319. package/lib/typescript/shared/types/providers/blank-stack-provider.types.d.ts +1 -0
  320. package/lib/typescript/shared/types/providers/blank-stack-provider.types.d.ts.map +1 -1
  321. package/lib/typescript/shared/types/screen.types.d.ts +0 -9
  322. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  323. package/lib/typescript/shared/utils/create-provider.d.ts +24 -24
  324. package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
  325. package/package.json +1 -1
  326. package/src/shared/adapters/with-screen-transitions/stack-layout.tsx +1 -2
  327. package/src/shared/components/activity/helpers.ts +59 -0
  328. package/src/shared/components/activity/variants/activity-screen.tsx +28 -93
  329. package/src/shared/components/boundary/components/boundary-target.tsx +2 -2
  330. package/src/shared/components/boundary/hooks/use-measurer.ts +3 -2
  331. package/src/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.ts +6 -3
  332. package/src/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.ts +2 -6
  333. package/src/shared/components/boundary/providers/boundary-root.provider.tsx +10 -6
  334. package/src/shared/components/overlay/helpers/create-overlay-interpolator-frame.ts +14 -1
  335. package/src/shared/components/overlay/helpers/get-active-overlay.ts +29 -4
  336. package/src/shared/components/overlay/hooks/use-overlay-slot.ts +26 -8
  337. package/src/shared/components/overlay/variations/overlay-host.tsx +11 -6
  338. package/src/shared/components/screen-container/layers/content.tsx +3 -4
  339. package/src/shared/components/screen-lifecycle/hooks/use-close-transition-intent.ts +8 -12
  340. package/src/shared/factories/screen-topology/create-screen-topology.ts +199 -0
  341. package/src/shared/factories/screen-topology/index.ts +16 -0
  342. package/src/shared/factories/screen-topology/types.ts +22 -0
  343. package/src/shared/factories/screen-topology/use-screen-relationships.ts +15 -0
  344. package/src/shared/factories/screen-topology/worklet.ts +60 -0
  345. package/src/shared/hooks/navigation/use-screen-state.ts +2 -7
  346. package/src/shared/hooks/navigation/use-stack.tsx +28 -31
  347. package/src/shared/providers/screen/animation/animation.provider.tsx +73 -212
  348. package/src/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +10 -81
  349. package/src/shared/providers/screen/animation/helpers/hydrate-transition-state/types.ts +0 -1
  350. package/src/shared/providers/screen/animation/helpers/pipeline.ts +45 -70
  351. package/src/shared/providers/screen/animation/helpers/read-screen-animation-revisions.ts +6 -30
  352. package/src/shared/providers/screen/animation/helpers/stack-progress.ts +13 -32
  353. package/src/shared/providers/screen/animation/helpers/use-build-transition-state.ts +0 -2
  354. package/src/shared/providers/screen/animation/index.tsx +1 -0
  355. package/src/shared/providers/screen/animation/types.ts +1 -23
  356. package/src/shared/providers/screen/animation/use-screen-animation.tsx +10 -14
  357. package/src/shared/providers/screen/descriptors/descriptors.provider.tsx +56 -35
  358. package/src/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.ts +0 -6
  359. package/src/shared/providers/screen/gestures/gestures.provider.tsx +96 -85
  360. package/src/shared/providers/screen/gestures/hooks/use-screen-gesture-config.ts +4 -4
  361. package/src/shared/providers/screen/gestures/hooks/use-screen-gesture.ts +3 -4
  362. package/src/shared/providers/screen/gestures/index.tsx +2 -1
  363. package/src/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.tsx +16 -29
  364. package/src/shared/providers/screen/gestures/ownership/resolve-ownership.ts +5 -8
  365. package/src/shared/providers/screen/gestures/pan/activation/use-pan-activation.ts +2 -3
  366. package/src/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.tsx +6 -9
  367. package/src/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.ts +11 -7
  368. package/src/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.ts +12 -12
  369. package/src/shared/providers/screen/gestures/shared/policy.ts +7 -7
  370. package/src/shared/providers/screen/gestures/types.ts +5 -2
  371. package/src/shared/providers/screen/styles/hooks/slot-resolvers.tsx +10 -3
  372. package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +7 -17
  373. package/src/shared/providers/screen/styles/index.tsx +2 -1
  374. package/src/shared/providers/screen/styles/slot.provider.tsx +25 -24
  375. package/src/shared/providers/screen/use-current-screen-relationships.ts +10 -0
  376. package/src/shared/providers/stack/blank-stack.provider.tsx +19 -6
  377. package/src/shared/providers/stack/core.provider.tsx +0 -1
  378. package/src/shared/providers/stack/direct.provider.tsx +2 -4
  379. package/src/shared/stores/animation.store.ts +0 -3
  380. package/src/shared/stores/bounds/internals/coordinator.ts +20 -8
  381. package/src/shared/stores/bounds/internals/links.ts +1 -1
  382. package/src/shared/stores/bounds/internals/state.ts +1 -1
  383. package/src/shared/stores/bounds/types.ts +0 -1
  384. package/src/shared/types/providers/blank-stack-provider.types.ts +1 -0
  385. package/src/shared/types/screen.types.ts +0 -10
  386. package/src/shared/utils/create-provider.tsx +135 -200
  387. package/lib/commonjs/shared/providers/screen/animation/helpers/interpolator-participation.js +0 -9
  388. package/lib/commonjs/shared/providers/screen/animation/helpers/interpolator-participation.js.map +0 -1
  389. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js +0 -12
  390. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js.map +0 -1
  391. package/lib/commonjs/shared/providers/screen/gestures/shared/ancestors.js +0 -23
  392. package/lib/commonjs/shared/providers/screen/gestures/shared/ancestors.js.map +0 -1
  393. package/lib/commonjs/shared/stores/bounds/internals/screen-graph.js +0 -45
  394. package/lib/commonjs/shared/stores/bounds/internals/screen-graph.js.map +0 -1
  395. package/lib/module/shared/providers/screen/animation/helpers/interpolator-participation.js +0 -4
  396. package/lib/module/shared/providers/screen/animation/helpers/interpolator-participation.js.map +0 -1
  397. package/lib/module/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js +0 -7
  398. package/lib/module/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js.map +0 -1
  399. package/lib/module/shared/providers/screen/gestures/shared/ancestors.js +0 -19
  400. package/lib/module/shared/providers/screen/gestures/shared/ancestors.js.map +0 -1
  401. package/lib/module/shared/stores/bounds/internals/screen-graph.js +0 -39
  402. package/lib/module/shared/stores/bounds/internals/screen-graph.js.map +0 -1
  403. package/lib/typescript/shared/providers/screen/animation/helpers/interpolator-participation.d.ts +0 -3
  404. package/lib/typescript/shared/providers/screen/animation/helpers/interpolator-participation.d.ts.map +0 -1
  405. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.d.ts +0 -5
  406. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.d.ts.map +0 -1
  407. package/lib/typescript/shared/providers/screen/gestures/shared/ancestors.d.ts +0 -11
  408. package/lib/typescript/shared/providers/screen/gestures/shared/ancestors.d.ts.map +0 -1
  409. package/lib/typescript/shared/stores/bounds/internals/screen-graph.d.ts +0 -5
  410. package/lib/typescript/shared/stores/bounds/internals/screen-graph.d.ts.map +0 -1
  411. package/src/shared/providers/screen/animation/helpers/interpolator-participation.ts +0 -6
  412. package/src/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.ts +0 -13
  413. package/src/shared/providers/screen/gestures/shared/ancestors.ts +0 -27
  414. package/src/shared/stores/bounds/internals/screen-graph.ts +0 -45
@@ -4,6 +4,7 @@ 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";
7
8
  import { useScreenGestureConfig } from "./hooks/use-screen-gesture-config";
8
9
  import { GestureOwnershipBridge } from "./ownership/gesture-ownership-bridge";
9
10
  import { useBuildPanGesture } from "./pan/use-build-pan-gesture";
@@ -13,100 +14,110 @@ import {
13
14
  type GestureCompositionOwner,
14
15
  type GestureContextType,
15
16
  NO_DIRECTION_CLAIMS,
17
+ type ScreenGestureSource,
16
18
  } from "./types";
17
19
 
18
20
  interface ScreenGestureProviderProps {
19
21
  children: React.ReactNode;
20
22
  }
21
23
 
22
- export const { ScreenGestureProvider, useScreenGestureStore: useGestureStore } =
23
- createProvider("ScreenGesture", { guarded: false })<
24
- ScreenGestureProviderProps,
25
- GestureContextType
26
- >(
27
- (
28
- { children },
29
- { useParentStore },
30
- ): { value: GestureContextType; children: React.ReactNode } => {
31
- const currentScreenKey = useDescriptorsStore(
32
- (store) => store.derivations.currentScreenKey,
33
- );
34
- const isTopMostScreen = useDescriptorsStore(
35
- (store) => store.derivations.isTopMostScreen,
36
- );
37
- const gestureContext = useParentStore((parentContext) =>
38
- isTopMostScreen ? parentContext : null,
39
- );
40
- const gestureConfig = useScreenGestureConfig(gestureContext);
24
+ type ScreenGestureStoreValue = GestureContextType & {
25
+ relationshipGestureSources: readonly ScreenGestureSource[];
26
+ };
41
27
 
42
- const scrollState = ScrollStore.getValue(
43
- currentScreenKey,
44
- "coordination",
45
- );
46
-
47
- // Ancestors read this before activating. If a nested screen claims the same
48
- // direction, it writes here so the ancestor can fail and let it take priority.
49
- const childDirectionClaims =
50
- useSharedValue<DirectionClaimMap>(NO_DIRECTION_CLAIMS);
28
+ const EMPTY_GESTURE_SOURCES: readonly ScreenGestureSource[] = [];
51
29
 
52
- // The first gesture to activate owns navigation release. Other gestures may
53
- // still join as companion trackers during the same simultaneous composition.
54
- const gestureCompositionOwner =
55
- useSharedValue<GestureCompositionOwner>(null);
30
+ const createScreenGestureProvider = createProvider("ScreenGesture", {
31
+ global: true,
32
+ })<ScreenGestureProviderProps, ScreenGestureStoreValue>;
56
33
 
57
- const panGesture = useBuildPanGesture({
34
+ export const {
35
+ ScreenGestureProvider,
36
+ useOptionalScreenGestureStore,
37
+ useScreenGestureStore,
38
+ }: ReturnType<typeof createScreenGestureProvider> = createScreenGestureProvider(
39
+ ({ children }) => {
40
+ const currentScreenKey = useDescriptorsStore(
41
+ (store) => store.derivations.currentScreenKey,
42
+ );
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);
56
+ const scrollState = ScrollStore.getValue(currentScreenKey, "coordination");
57
+ const childDirectionClaims =
58
+ useSharedValue<DirectionClaimMap>(NO_DIRECTION_CLAIMS);
59
+ const gestureCompositionOwner =
60
+ useSharedValue<GestureCompositionOwner>(null);
61
+ const panGesture = useBuildPanGesture({
62
+ scrollState,
63
+ gestureConfig,
64
+ childDirectionClaims,
65
+ gestureCompositionOwner,
66
+ });
67
+ const pinchGesture = useBuildPinchGesture({
68
+ gestureConfig,
69
+ gestureCompositionOwner,
70
+ });
71
+ const detectorGesture = useMemo(
72
+ () => Gesture.Simultaneous(panGesture, pinchGesture),
73
+ [panGesture, pinchGesture],
74
+ );
75
+ const source = useMemo<ScreenGestureSource>(
76
+ () => ({
77
+ routeKey: currentScreenKey,
78
+ detectorGesture,
79
+ panGesture,
80
+ pinchGesture,
58
81
  scrollState,
59
- gestureConfig,
82
+ claimedDirections: gestureConfig.participation.claimedDirections,
60
83
  childDirectionClaims,
61
- gestureCompositionOwner,
62
- });
63
-
64
- const pinchGesture = useBuildPinchGesture({
65
- gestureConfig,
66
- gestureCompositionOwner,
67
- });
68
-
69
- const detectorGesture = useMemo(
70
- () => Gesture.Simultaneous(panGesture, pinchGesture),
71
- [panGesture, pinchGesture],
72
- );
73
-
74
- const value = useMemo<GestureContextType>(
75
- () => ({
76
- routeKey: currentScreenKey,
77
- detectorGesture,
78
- panGesture,
79
- pinchGesture,
80
- scrollState,
81
- gestureContext,
82
- claimedDirections: gestureConfig.participation.claimedDirections,
83
- childDirectionClaims,
84
- }),
85
- [
86
- currentScreenKey,
87
- detectorGesture,
88
- panGesture,
89
- pinchGesture,
90
- scrollState,
91
- gestureContext,
92
- gestureConfig.participation.claimedDirections,
93
- childDirectionClaims,
94
- ],
95
- );
96
-
97
- const content = useMemo(
98
- () => (
99
- <Fragment>
100
- <GestureOwnershipBridge />
101
- {children}
102
- </Fragment>
103
- ),
104
- [children],
105
- );
84
+ }),
85
+ [
86
+ currentScreenKey,
87
+ detectorGesture,
88
+ panGesture,
89
+ pinchGesture,
90
+ scrollState,
91
+ gestureConfig.participation.claimedDirections,
92
+ childDirectionClaims,
93
+ ],
94
+ );
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
+ );
106
116
 
107
- return {
108
- value,
109
- children: content,
110
- };
111
- },
112
- );
117
+ return {
118
+ key: currentScreenKey,
119
+ value,
120
+ children: content,
121
+ };
122
+ },
123
+ );
@@ -2,10 +2,10 @@ import { usePreventRemoveContext } from "@react-navigation/native";
2
2
  import { useMemo } from "react";
3
3
  import { useDescriptorsStore } from "../../descriptors";
4
4
  import { resolveScreenGestureConfig } from "../shared/policy";
5
- import type { GestureContextType, ScreenGestureConfig } from "../types";
5
+ import type { ScreenGestureConfig, ScreenGestureSource } from "../types";
6
6
 
7
7
  export function useScreenGestureConfig(
8
- gestureContext: GestureContextType | null,
8
+ ancestorGestures: readonly ScreenGestureSource[],
9
9
  ): ScreenGestureConfig {
10
10
  const options = useDescriptorsStore((store) => store.options);
11
11
  const isFirstKey = useDescriptorsStore(
@@ -23,9 +23,9 @@ export function useScreenGestureConfig(
23
23
  resolveScreenGestureConfig({
24
24
  options,
25
25
  isFirstKey,
26
- gestureContext,
26
+ ancestorGestures,
27
27
  isRemovePrevented,
28
28
  }),
29
- [isFirstKey, options, gestureContext, isRemovePrevented],
29
+ [isFirstKey, options, ancestorGestures, isRemovePrevented],
30
30
  );
31
31
  }
@@ -2,8 +2,7 @@ import {
2
2
  type ChainTarget,
3
3
  resolveChainTarget,
4
4
  } from "../../../../utils/resolve-chain-target";
5
- import { useGestureStore } from "../gestures.provider";
6
- import { walkGestureAncestors } from "../shared/ancestors";
5
+ import { useOptionalScreenGestureStore } from "../gestures.provider";
7
6
 
8
7
  export type ScreenGestureTarget = ChainTarget;
9
8
 
@@ -21,13 +20,13 @@ export type ScreenGestureTarget = ChainTarget;
21
20
  * ```
22
21
  */
23
22
  export const useScreenGesture = (target?: ScreenGestureTarget) => {
24
- const ctx = useGestureStore();
23
+ const ctx = useOptionalScreenGestureStore();
25
24
 
26
25
  return (
27
26
  resolveChainTarget({
28
27
  target,
29
28
  self: ctx,
30
- ancestors: walkGestureAncestors(ctx?.gestureContext),
29
+ ancestors: ctx?.ancestorGestures ?? [],
31
30
  })?.panGesture ?? null
32
31
  );
33
32
  };
@@ -1,6 +1,7 @@
1
1
  export {
2
2
  ScreenGestureProvider,
3
- useGestureStore,
3
+ useOptionalScreenGestureStore,
4
+ useScreenGestureStore,
4
5
  } from "./gestures.provider";
5
6
  export type {
6
7
  DirectionClaim,
@@ -10,15 +10,14 @@ import {
10
10
  type BaseDescriptor,
11
11
  useDescriptorsStore,
12
12
  } from "../../../screen/descriptors";
13
- import { useBlankStackStore } from "../../../stack/blank-stack.provider";
14
- import { useGestureStore } from "../gestures.provider";
15
- import { walkGestureAncestors } from "../shared/ancestors";
13
+ import { useOptionalBlankStackStore } from "../../../stack/blank-stack.provider";
14
+ import { useScreenGestureStore } from "../gestures.provider";
16
15
  import { resolveScreenGestureConfig } from "../shared/policy";
17
- import type { GestureContextType } from "../types";
16
+ import type { ScreenGestureSource } from "../types";
18
17
  import { resolveShadowingClaimDirections } from "./shadowing-claims";
19
18
 
20
19
  type ShadowedAncestor = {
21
- ancestor: GestureContextType;
20
+ ancestor: ScreenGestureSource;
22
21
  directions: Direction[];
23
22
  };
24
23
 
@@ -40,15 +39,15 @@ const findShadowedDirections = (
40
39
  };
41
40
 
42
41
  const findShadowedAncestors = (
43
- parentContext: GestureContextType | null,
42
+ ancestorGestures: readonly ScreenGestureSource[],
44
43
  claimedDirections: ClaimedDirections,
45
44
  ) => {
46
- if (!parentContext) {
45
+ if (ancestorGestures.length === 0) {
47
46
  return NO_SHADOWED_ANCESTORS;
48
47
  }
49
48
 
50
49
  const ancestors: ShadowedAncestor[] = [];
51
- for (const ancestor of walkGestureAncestors(parentContext)) {
50
+ for (const ancestor of ancestorGestures) {
52
51
  const directions = findShadowedDirections(
53
52
  claimedDirections,
54
53
  ancestor.claimedDirections,
@@ -107,7 +106,7 @@ const getDescriptorIsFirstKey = (descriptor: BaseDescriptor): boolean => {
107
106
 
108
107
  const getDescriptorClaimedDirections = (
109
108
  descriptor: BaseDescriptor | undefined,
110
- gestureContext: GestureContextType | null,
109
+ ancestorGestures: readonly ScreenGestureSource[],
111
110
  ): ClaimedDirections => {
112
111
  if (!descriptor) {
113
112
  return NO_CLAIMS;
@@ -116,32 +115,20 @@ const getDescriptorClaimedDirections = (
116
115
  return resolveScreenGestureConfig({
117
116
  options: descriptor.options,
118
117
  isFirstKey: getDescriptorIsFirstKey(descriptor),
119
- gestureContext,
118
+ ancestorGestures,
120
119
  }).participation.claimedDirections;
121
120
  };
122
121
 
123
- const requireGestureContext = (
124
- gestureContext: GestureContextType | null,
125
- ): GestureContextType => {
126
- if (!gestureContext) {
127
- throw new Error(
128
- "GestureOwnershipBridge must be rendered within a ScreenGestureProvider",
129
- );
130
- }
131
-
132
- return gestureContext;
133
- };
134
-
135
122
  function ActiveGestureOwnershipBridge() {
136
- const gestureContext = requireGestureContext(useGestureStore());
123
+ const gestureContext = useScreenGestureStore();
137
124
  const previous = useDescriptorsStore((store) => store.previous);
138
- const isCurrentScreenClosing = useBlankStackStore(
125
+ const isCurrentScreenClosing = useOptionalBlankStackStore(
139
126
  (store) =>
140
127
  store?.scenesByKey[gestureContext.routeKey]?.activity === "closing",
141
128
  );
142
129
  const {
143
130
  claimedDirections,
144
- gestureContext: parentContext,
131
+ ancestorGestures,
145
132
  routeKey: currentScreenKey,
146
133
  } = gestureContext;
147
134
  // A retained closing screen cannot receive touches, so its ownership must
@@ -153,14 +140,14 @@ function ActiveGestureOwnershipBridge() {
153
140
  currentClaimedDirections: claimedDirections,
154
141
  previousClaimedDirections: getDescriptorClaimedDirections(
155
142
  previous,
156
- parentContext,
143
+ ancestorGestures,
157
144
  ),
158
145
  }),
159
- [isCurrentScreenClosing, claimedDirections, previous, parentContext],
146
+ [isCurrentScreenClosing, claimedDirections, previous, ancestorGestures],
160
147
  );
161
148
  const shadowedAncestors = useMemo(
162
- () => findShadowedAncestors(parentContext, effectiveClaimedDirections),
163
- [parentContext, effectiveClaimedDirections],
149
+ () => findShadowedAncestors(ancestorGestures, effectiveClaimedDirections),
150
+ [ancestorGestures, effectiveClaimedDirections],
164
151
  );
165
152
 
166
153
  useLayoutEffect(() => {
@@ -16,7 +16,6 @@ import type { DirectionClaim } from "../types";
16
16
  */
17
17
  interface AncestorClaimsContext {
18
18
  claimedDirections: ClaimedDirections;
19
- gestureContext: AncestorClaimsContext | null;
20
19
  }
21
20
 
22
21
  /**
@@ -31,12 +30,12 @@ interface AncestorClaimsContext {
31
30
  * used in worklets since it's a plain object.
32
31
  *
33
32
  * @param selfClaims - The directions claimed by the current screen
34
- * @param gestureContext - The gesture context chain (can be null if no ancestors)
33
+ * @param ancestors - Nearest-first ancestor gesture values from screen topology.
35
34
  * @returns Ownership status for all four directions
36
35
  */
37
36
  export function resolveOwnership(
38
37
  selfClaims: ClaimedDirections,
39
- gestureContext: AncestorClaimsContext | null,
38
+ ancestors: readonly AncestorClaimsContext[],
40
39
  ): DirectionOwnership {
41
40
  const result: DirectionOwnership = { ...NO_OWNERSHIP };
42
41
 
@@ -44,7 +43,7 @@ export function resolveOwnership(
44
43
  result[direction] = resolveDirectionOwnership(
45
44
  direction,
46
45
  selfClaims,
47
- gestureContext,
46
+ ancestors,
48
47
  );
49
48
  }
50
49
 
@@ -57,7 +56,7 @@ export function resolveOwnership(
57
56
  function resolveDirectionOwnership(
58
57
  direction: Direction,
59
58
  selfClaims: ClaimedDirections,
60
- gestureContext: AncestorClaimsContext | null,
59
+ ancestors: readonly AncestorClaimsContext[],
61
60
  ): OwnershipStatus {
62
61
  // Check self first
63
62
  if (selfClaims[direction]) {
@@ -65,12 +64,10 @@ function resolveDirectionOwnership(
65
64
  }
66
65
 
67
66
  // Walk ancestors looking for a claim
68
- let ancestor = gestureContext;
69
- while (ancestor) {
67
+ for (const ancestor of ancestors) {
70
68
  if (ancestor.claimedDirections?.[direction]) {
71
69
  return "ancestor";
72
70
  }
73
- ancestor = ancestor.gestureContext;
74
71
  }
75
72
 
76
73
  // No one claims this direction
@@ -9,6 +9,7 @@ import { GestureActivationState } from "../../../../../types/gesture.types";
9
9
  import type { Direction } from "../../../../../types/ownership.types";
10
10
  import { useDescriptorsStore } from "../../../descriptors";
11
11
  import type { ScreenOptionsContextValue } from "../../../options";
12
+ import { useCurrentScreenRelationships } from "../../../use-current-screen-relationships";
12
13
  import { resolvePanRuntime } from "../../shared/runtime";
13
14
  import type {
14
15
  DirectionClaimMap,
@@ -39,9 +40,7 @@ export const usePanActivation = ({
39
40
  const currentScreenKey = useDescriptorsStore(
40
41
  (store) => store.derivations.currentScreenKey,
41
42
  );
42
- const parentScreenKey = useDescriptorsStore(
43
- (store) => store.derivations.parentScreenKey,
44
- );
43
+ const { parentScreenKey } = useCurrentScreenRelationships();
45
44
 
46
45
  const ancestorDismissing = useMemo(() => {
47
46
  if (!parentScreenKey) return null;
@@ -14,21 +14,20 @@ const DEFAULT_SCROLL_METADATA_OWNER_CONTEXT: ScrollMetadataOwnerContextValue = {
14
14
  horizontal: false,
15
15
  };
16
16
 
17
- const {
17
+ export const {
18
18
  ScrollMetadataOwnerProvider,
19
- useScrollMetadataOwnerStore: useMaybeScrollMetadataOwnerStore,
20
- } = createProvider("ScrollMetadataOwner", { guarded: false })<
19
+ useOptionalScrollMetadataOwnerStore,
20
+ } = createProvider("ScrollMetadataOwner")<
21
21
  ScrollMetadataOwnerProviderProps,
22
22
  ScrollMetadataOwnerContextValue
23
23
  >(({ children, value }) => ({ children, value }));
24
24
 
25
- export const useScrollMetadataOwnerStore = () =>
26
- useMaybeScrollMetadataOwnerStore() ?? DEFAULT_SCROLL_METADATA_OWNER_CONTEXT;
27
-
28
25
  export const useScrollMetadataOwnerProviderValue = (
29
26
  axis: ScrollGestureAxis,
30
27
  ) => {
31
- const parent = useScrollMetadataOwnerStore();
28
+ const parent =
29
+ useOptionalScrollMetadataOwnerStore() ??
30
+ DEFAULT_SCROLL_METADATA_OWNER_CONTEXT;
32
31
 
33
32
  return useMemo(() => {
34
33
  if (parent[axis]) return parent;
@@ -39,5 +38,3 @@ export const useScrollMetadataOwnerProviderValue = (
39
38
  };
40
39
  }, [axis, parent]);
41
40
  };
42
-
43
- export { ScrollMetadataOwnerProvider };
@@ -10,7 +10,7 @@ import { useSharedValueState } from "../../../../hooks/reanimated/use-shared-val
10
10
  import useStableCallback from "../../../../hooks/use-stable-callback";
11
11
  import { AnimationStore } from "../../../../stores/animation.store";
12
12
  import { ScrollStore } from "../../../../stores/scroll.store";
13
- import { useGestureStore } from "../gestures.provider";
13
+ import { useOptionalScreenGestureStore } from "../gestures.provider";
14
14
  import type {
15
15
  ScrollGestureAxis,
16
16
  ScrollGestureAxisState,
@@ -18,8 +18,8 @@ import type {
18
18
  ScrollMetadataState,
19
19
  } from "../types";
20
20
  import {
21
+ useOptionalScrollMetadataOwnerStore,
21
22
  useScrollMetadataOwnerProviderValue,
22
- useScrollMetadataOwnerStore,
23
23
  } from "./scroll-metadata-owner";
24
24
  import {
25
25
  clearScrollMetadataAxisState,
@@ -88,21 +88,25 @@ const clearScrollMetadataAxis = (
88
88
  export const useScrollGestureCoordination = (
89
89
  props: ScrollGestureCoordinationProps,
90
90
  ) => {
91
- const context = useGestureStore();
91
+ const context = useOptionalScreenGestureStore();
92
92
  const scrollDirection = props.direction ?? "vertical";
93
+ const gesturePath = useMemo(
94
+ () => (context ? [context, ...context.ancestorGestures] : []),
95
+ [context],
96
+ );
93
97
 
94
- const metadataOwnerContext = useScrollMetadataOwnerStore();
98
+ const metadataOwnerContext = useOptionalScrollMetadataOwnerStore();
95
99
  const metadataOwnerProviderValue =
96
100
  useScrollMetadataOwnerProviderValue(scrollDirection);
97
- const isFirstMetadataWriterInTree = !metadataOwnerContext[scrollDirection];
101
+ const isFirstMetadataWriterInTree = !metadataOwnerContext?.[scrollDirection];
98
102
  const [metadataWriterId] = useState(() =>
99
103
  ScrollStore.createMetadataWriterId(),
100
104
  );
101
105
  const [writesMetadata, setWritesMetadata] = useState(false);
102
106
 
103
107
  const { scrollStates, panGestures, pinchGestures, ownerRouteKeys } = useMemo(
104
- () => walkUpScrollGestureCoordination(context, scrollDirection),
105
- [context, scrollDirection],
108
+ () => walkUpScrollGestureCoordination(gesturePath, scrollDirection),
109
+ [gesturePath, scrollDirection],
106
110
  );
107
111
 
108
112
  const routeKey = context?.routeKey;
@@ -1,19 +1,18 @@
1
1
  import type { SharedValue } from "react-native-reanimated";
2
2
  import type { Direction } from "../../../../types/ownership.types";
3
- import { walkGestureAncestors } from "../shared/ancestors";
4
3
  import type {
5
- GestureContextType,
6
4
  PanGesture,
7
5
  PinchGesture,
6
+ ScreenGestureSource,
8
7
  ScrollGestureAxis,
9
8
  ScrollGestureState,
10
9
  } from "../types";
11
10
 
12
11
  /** Walks up the gesture tree until it finds the owner for a specific direction. */
13
12
  function findGestureOwnerForDirection(
14
- ancestors: GestureContextType[],
13
+ ancestors: readonly ScreenGestureSource[],
15
14
  direction: Direction,
16
- ): GestureContextType | null {
15
+ ): ScreenGestureSource | null {
17
16
  for (const ancestor of ancestors) {
18
17
  if (ancestor.claimedDirections?.[direction]) return ancestor;
19
18
  }
@@ -28,8 +27,10 @@ const getDirectionsForAxis = (
28
27
  ? ["vertical", "vertical-inverted"]
29
28
  : ["horizontal", "horizontal-inverted"];
30
29
 
31
- const collectAncestorPinchGestures = (ancestors: GestureContextType[]) => {
32
- const pinchGestures: GestureContextType["pinchGesture"][] = [];
30
+ const collectAncestorPinchGestures = (
31
+ ancestors: readonly ScreenGestureSource[],
32
+ ) => {
33
+ const pinchGestures: ScreenGestureSource["pinchGesture"][] = [];
33
34
 
34
35
  for (const ancestor of ancestors) {
35
36
  if (!pinchGestures.includes(ancestor.pinchGesture)) {
@@ -41,12 +42,12 @@ const collectAncestorPinchGestures = (ancestors: GestureContextType[]) => {
41
42
  };
42
43
 
43
44
  const collectAxisOwners = (
44
- ancestors: GestureContextType[],
45
+ ancestors: readonly ScreenGestureSource[],
45
46
  directions: readonly [Direction, Direction],
46
47
  ) => {
47
- const seenOwners: GestureContextType[] = [];
48
- const panGestures: GestureContextType["panGesture"][] = [];
49
- const scrollStates: GestureContextType["scrollState"][] = [];
48
+ const seenOwners: ScreenGestureSource[] = [];
49
+ const panGestures: ScreenGestureSource["panGesture"][] = [];
50
+ const scrollStates: ScreenGestureSource["scrollState"][] = [];
50
51
  const ownerRouteKeys: string[] = [];
51
52
 
52
53
  for (const direction of directions) {
@@ -73,10 +74,9 @@ interface WalkUpScrollGestureCoordinationResult {
73
74
  }
74
75
 
75
76
  export function walkUpScrollGestureCoordination(
76
- context: GestureContextType | null,
77
+ ancestors: readonly ScreenGestureSource[],
77
78
  axis: ScrollGestureAxis,
78
79
  ): WalkUpScrollGestureCoordinationResult {
79
- const ancestors = walkGestureAncestors(context);
80
80
  const axisOwners = collectAxisOwners(ancestors, getDirectionsForAxis(axis));
81
81
 
82
82
  return {
@@ -25,11 +25,11 @@ import type {
25
25
  import { computeClaimedDirections } from "../ownership/compute-claimed-directions";
26
26
  import { resolveOwnership } from "../ownership/resolve-ownership";
27
27
  import type {
28
- GestureContextType,
29
28
  PanGesturePolicy,
30
29
  PinchGesturePolicy,
31
30
  ScreenGestureConfig,
32
31
  ScreenGestureParticipation,
32
+ ScreenGestureSource,
33
33
  } from "../types";
34
34
  import {
35
35
  getGestureDirectionEntries,
@@ -305,12 +305,12 @@ export const resolvePinchPolicy = (
305
305
  const resolveGestureParticipation = ({
306
306
  options,
307
307
  isFirstKey,
308
- gestureContext,
308
+ ancestorGestures,
309
309
  isRemovePrevented,
310
310
  }: {
311
311
  options: GesturePolicyOptions;
312
312
  isFirstKey: boolean;
313
- gestureContext: GestureContextType | null;
313
+ ancestorGestures: readonly ScreenGestureSource[];
314
314
  isRemovePrevented: boolean;
315
315
  }): ScreenGestureParticipation => {
316
316
  const canDismiss =
@@ -342,25 +342,25 @@ const resolveGestureParticipation = ({
342
342
  canTrackGesture,
343
343
  effectiveSnapPoints,
344
344
  claimedDirections,
345
- ownershipStatus: resolveOwnership(claimedDirections, gestureContext),
345
+ ownershipStatus: resolveOwnership(claimedDirections, ancestorGestures),
346
346
  };
347
347
  };
348
348
 
349
349
  export const resolveScreenGestureConfig = ({
350
350
  options,
351
351
  isFirstKey,
352
- gestureContext,
352
+ ancestorGestures,
353
353
  isRemovePrevented = false,
354
354
  }: {
355
355
  options: ScreenTransitionConfig;
356
356
  isFirstKey: boolean;
357
- gestureContext: GestureContextType | null;
357
+ ancestorGestures: readonly ScreenGestureSource[];
358
358
  isRemovePrevented?: boolean;
359
359
  }): ScreenGestureConfig => {
360
360
  const participation = resolveGestureParticipation({
361
361
  options,
362
362
  isFirstKey,
363
- gestureContext,
363
+ ancestorGestures,
364
364
  isRemovePrevented,
365
365
  });
366
366
  const hasSnapPoints = participation.effectiveSnapPoints.hasSnapPoints;
@@ -71,17 +71,20 @@ export const NO_DIRECTION_CLAIMS: DirectionClaimMap = {
71
71
  "horizontal-inverted": null,
72
72
  };
73
73
 
74
- export interface GestureContextType {
74
+ export interface ScreenGestureSource {
75
75
  routeKey: string;
76
76
  detectorGesture: ComposedGesture;
77
77
  panGesture: PanGesture;
78
78
  pinchGesture: PinchGesture;
79
79
  scrollState: SharedValue<ScrollGestureState | null>;
80
- gestureContext: GestureContextType | null;
81
80
  claimedDirections: ClaimedDirections;
82
81
  childDirectionClaims: SharedValue<DirectionClaimMap>;
83
82
  }
84
83
 
84
+ export interface GestureContextType extends ScreenGestureSource {
85
+ ancestorGestures: readonly ScreenGestureSource[];
86
+ }
87
+
85
88
  export interface ScreenGestureParticipation {
86
89
  /** Whether this route is the first route in its stack. First routes never track gestures. */
87
90
  isFirstKey: boolean;