react-native-screen-transitions 3.13.0-beta.0 → 3.13.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 (433) hide show
  1. package/README.md +14 -0
  2. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js +1 -2
  3. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  4. package/lib/commonjs/shared/components/activity/helpers.js +50 -1
  5. package/lib/commonjs/shared/components/activity/helpers.js.map +1 -1
  6. package/lib/commonjs/shared/components/activity/variants/activity-screen.js +16 -67
  7. package/lib/commonjs/shared/components/activity/variants/activity-screen.js.map +1 -1
  8. package/lib/commonjs/shared/components/boundary/components/boundary-target.js +1 -1
  9. package/lib/commonjs/shared/components/boundary/components/boundary-target.js.map +1 -1
  10. package/lib/commonjs/shared/components/boundary/create-boundary-component.js +5 -1
  11. package/lib/commonjs/shared/components/boundary/create-boundary-component.js.map +1 -1
  12. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js +2 -1
  13. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  14. package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js +8 -0
  15. package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js.map +1 -1
  16. package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +3 -4
  17. package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  18. package/lib/commonjs/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +1 -6
  19. package/lib/commonjs/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  20. package/lib/commonjs/shared/components/boundary/portal/teleport.js +1 -13
  21. package/lib/commonjs/shared/components/boundary/portal/teleport.js.map +1 -1
  22. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js +6 -6
  23. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js.map +1 -1
  24. package/lib/commonjs/shared/components/overlay/helpers/create-overlay-interpolator-frame.js +9 -2
  25. package/lib/commonjs/shared/components/overlay/helpers/create-overlay-interpolator-frame.js.map +1 -1
  26. package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js +16 -4
  27. package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
  28. package/lib/commonjs/shared/components/overlay/hooks/use-overlay-slot.js +11 -6
  29. package/lib/commonjs/shared/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  30. package/lib/commonjs/shared/components/overlay/variations/overlay-host.js +5 -4
  31. package/lib/commonjs/shared/components/overlay/variations/overlay-host.js.map +1 -1
  32. package/lib/commonjs/shared/components/screen-container/layers/content.js +1 -3
  33. package/lib/commonjs/shared/components/screen-container/layers/content.js.map +1 -1
  34. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -6
  35. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  36. package/lib/commonjs/shared/factories/screen-topology/create-screen-topology.js +147 -0
  37. package/lib/commonjs/shared/factories/screen-topology/create-screen-topology.js.map +1 -0
  38. package/lib/commonjs/shared/factories/screen-topology/index.js +45 -0
  39. package/lib/commonjs/shared/factories/screen-topology/index.js.map +1 -0
  40. package/lib/commonjs/shared/factories/screen-topology/types.js +2 -0
  41. package/lib/commonjs/shared/factories/screen-topology/types.js.map +1 -0
  42. package/lib/commonjs/shared/factories/screen-topology/use-screen-relationships.js +15 -0
  43. package/lib/commonjs/shared/factories/screen-topology/use-screen-relationships.js.map +1 -0
  44. package/lib/commonjs/shared/factories/screen-topology/worklet.js +55 -0
  45. package/lib/commonjs/shared/factories/screen-topology/worklet.js.map +1 -0
  46. package/lib/commonjs/shared/hooks/navigation/use-screen-state.js.map +1 -1
  47. package/lib/commonjs/shared/hooks/navigation/use-stack.js +16 -16
  48. package/lib/commonjs/shared/hooks/navigation/use-stack.js.map +1 -1
  49. package/lib/commonjs/shared/providers/screen/animation/animation.provider.js +26 -98
  50. package/lib/commonjs/shared/providers/screen/animation/animation.provider.js.map +1 -1
  51. package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +6 -52
  52. package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
  53. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js +14 -25
  54. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  55. package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +4 -13
  56. package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -1
  57. package/lib/commonjs/shared/providers/screen/animation/helpers/stack-progress.js +10 -26
  58. package/lib/commonjs/shared/providers/screen/animation/helpers/stack-progress.js.map +1 -1
  59. package/lib/commonjs/shared/providers/screen/animation/helpers/use-build-transition-state.js +0 -1
  60. package/lib/commonjs/shared/providers/screen/animation/helpers/use-build-transition-state.js.map +1 -1
  61. package/lib/commonjs/shared/providers/screen/animation/index.js +6 -0
  62. package/lib/commonjs/shared/providers/screen/animation/index.js.map +1 -1
  63. package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js +8 -7
  64. package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
  65. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js +40 -25
  66. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  67. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js +1 -4
  68. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js.map +1 -1
  69. package/lib/commonjs/shared/providers/screen/gestures/gestures.provider.js +24 -19
  70. package/lib/commonjs/shared/providers/screen/gestures/gestures.provider.js.map +1 -1
  71. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -3
  72. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  73. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture.js +2 -3
  74. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  75. package/lib/commonjs/shared/providers/screen/gestures/index.js +8 -2
  76. package/lib/commonjs/shared/providers/screen/gestures/index.js.map +1 -1
  77. package/lib/commonjs/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js +11 -18
  78. package/lib/commonjs/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +1 -1
  79. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js +5 -7
  80. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  81. package/lib/commonjs/shared/providers/screen/gestures/pan/activation/use-pan-activation.js +4 -1
  82. package/lib/commonjs/shared/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  83. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js +5 -8
  84. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js.map +1 -1
  85. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +5 -4
  86. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  87. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +1 -3
  88. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +1 -1
  89. package/lib/commonjs/shared/providers/screen/gestures/shared/policy.js +4 -4
  90. package/lib/commonjs/shared/providers/screen/gestures/shared/policy.js.map +1 -1
  91. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js +4 -2
  92. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
  93. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +5 -8
  94. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  95. package/lib/commonjs/shared/providers/screen/styles/index.js +8 -2
  96. package/lib/commonjs/shared/providers/screen/styles/index.js.map +1 -1
  97. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js +17 -19
  98. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js.map +1 -1
  99. package/lib/commonjs/shared/providers/screen/use-current-screen-relationships.js +14 -0
  100. package/lib/commonjs/shared/providers/screen/use-current-screen-relationships.js.map +1 -0
  101. package/lib/commonjs/shared/providers/stack/blank-stack.provider.js +13 -5
  102. package/lib/commonjs/shared/providers/stack/blank-stack.provider.js.map +1 -1
  103. package/lib/commonjs/shared/providers/stack/core.provider.js +1 -3
  104. package/lib/commonjs/shared/providers/stack/core.provider.js.map +1 -1
  105. package/lib/commonjs/shared/providers/stack/direct.provider.js +2 -5
  106. package/lib/commonjs/shared/providers/stack/direct.provider.js.map +1 -1
  107. package/lib/commonjs/shared/stores/animation.store.js +0 -2
  108. package/lib/commonjs/shared/stores/animation.store.js.map +1 -1
  109. package/lib/commonjs/shared/stores/bounds/internals/coordinator.js +23 -9
  110. package/lib/commonjs/shared/stores/bounds/internals/coordinator.js.map +1 -1
  111. package/lib/commonjs/shared/stores/bounds/internals/links.js +2 -2
  112. package/lib/commonjs/shared/stores/bounds/internals/links.js.map +1 -1
  113. package/lib/commonjs/shared/stores/bounds/internals/state.js +1 -1
  114. package/lib/commonjs/shared/utils/create-provider.js +51 -100
  115. package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
  116. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js +1 -2
  117. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  118. package/lib/module/shared/components/activity/helpers.js +48 -0
  119. package/lib/module/shared/components/activity/helpers.js.map +1 -1
  120. package/lib/module/shared/components/activity/variants/activity-screen.js +17 -68
  121. package/lib/module/shared/components/activity/variants/activity-screen.js.map +1 -1
  122. package/lib/module/shared/components/boundary/components/boundary-target.js +2 -2
  123. package/lib/module/shared/components/boundary/components/boundary-target.js.map +1 -1
  124. package/lib/module/shared/components/boundary/create-boundary-component.js +6 -2
  125. package/lib/module/shared/components/boundary/create-boundary-component.js.map +1 -1
  126. package/lib/module/shared/components/boundary/hooks/use-measurer.js +3 -2
  127. package/lib/module/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  128. package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js +8 -0
  129. package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js.map +1 -1
  130. package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +4 -5
  131. package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  132. package/lib/module/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +2 -7
  133. package/lib/module/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  134. package/lib/module/shared/components/boundary/portal/teleport.js +1 -14
  135. package/lib/module/shared/components/boundary/portal/teleport.js.map +1 -1
  136. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js +5 -6
  137. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js.map +1 -1
  138. package/lib/module/shared/components/overlay/helpers/create-overlay-interpolator-frame.js +7 -1
  139. package/lib/module/shared/components/overlay/helpers/create-overlay-interpolator-frame.js.map +1 -1
  140. package/lib/module/shared/components/overlay/helpers/get-active-overlay.js +16 -4
  141. package/lib/module/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
  142. package/lib/module/shared/components/overlay/hooks/use-overlay-slot.js +12 -7
  143. package/lib/module/shared/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  144. package/lib/module/shared/components/overlay/variations/overlay-host.js +7 -6
  145. package/lib/module/shared/components/overlay/variations/overlay-host.js.map +1 -1
  146. package/lib/module/shared/components/screen-container/layers/content.js +2 -3
  147. package/lib/module/shared/components/screen-container/layers/content.js.map +1 -1
  148. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +9 -7
  149. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  150. package/lib/module/shared/factories/screen-topology/create-screen-topology.js +142 -0
  151. package/lib/module/shared/factories/screen-topology/create-screen-topology.js.map +1 -0
  152. package/lib/module/shared/factories/screen-topology/index.js +6 -0
  153. package/lib/module/shared/factories/screen-topology/index.js.map +1 -0
  154. package/lib/module/shared/factories/screen-topology/types.js +2 -0
  155. package/lib/module/shared/factories/screen-topology/types.js.map +1 -0
  156. package/lib/module/shared/factories/screen-topology/use-screen-relationships.js +10 -0
  157. package/lib/module/shared/factories/screen-topology/use-screen-relationships.js.map +1 -0
  158. package/lib/module/shared/factories/screen-topology/worklet.js +48 -0
  159. package/lib/module/shared/factories/screen-topology/worklet.js.map +1 -0
  160. package/lib/module/shared/hooks/navigation/use-screen-state.js.map +1 -1
  161. package/lib/module/shared/hooks/navigation/use-stack.js +17 -18
  162. package/lib/module/shared/hooks/navigation/use-stack.js.map +1 -1
  163. package/lib/module/shared/providers/screen/animation/animation.provider.js +25 -98
  164. package/lib/module/shared/providers/screen/animation/animation.provider.js.map +1 -1
  165. package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +6 -52
  166. package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
  167. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js +16 -27
  168. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  169. package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +4 -13
  170. package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -1
  171. package/lib/module/shared/providers/screen/animation/helpers/stack-progress.js +9 -24
  172. package/lib/module/shared/providers/screen/animation/helpers/stack-progress.js.map +1 -1
  173. package/lib/module/shared/providers/screen/animation/helpers/use-build-transition-state.js +0 -1
  174. package/lib/module/shared/providers/screen/animation/helpers/use-build-transition-state.js.map +1 -1
  175. package/lib/module/shared/providers/screen/animation/index.js +1 -1
  176. package/lib/module/shared/providers/screen/animation/index.js.map +1 -1
  177. package/lib/module/shared/providers/screen/animation/use-screen-animation.js +9 -8
  178. package/lib/module/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
  179. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js +43 -27
  180. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  181. package/lib/module/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js +1 -4
  182. package/lib/module/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js.map +1 -1
  183. package/lib/module/shared/providers/screen/gestures/gestures.provider.js +21 -17
  184. package/lib/module/shared/providers/screen/gestures/gestures.provider.js.map +1 -1
  185. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -3
  186. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  187. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture.js +3 -4
  188. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  189. package/lib/module/shared/providers/screen/gestures/index.js +1 -1
  190. package/lib/module/shared/providers/screen/gestures/index.js.map +1 -1
  191. package/lib/module/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js +13 -20
  192. package/lib/module/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +1 -1
  193. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js +5 -7
  194. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  195. package/lib/module/shared/providers/screen/gestures/pan/activation/use-pan-activation.js +4 -1
  196. package/lib/module/shared/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  197. package/lib/module/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js +4 -8
  198. package/lib/module/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js.map +1 -1
  199. package/lib/module/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +7 -6
  200. package/lib/module/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  201. package/lib/module/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +1 -3
  202. package/lib/module/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +1 -1
  203. package/lib/module/shared/providers/screen/gestures/shared/policy.js +4 -4
  204. package/lib/module/shared/providers/screen/gestures/shared/policy.js.map +1 -1
  205. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js +5 -3
  206. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
  207. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +5 -8
  208. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  209. package/lib/module/shared/providers/screen/styles/index.js +1 -1
  210. package/lib/module/shared/providers/screen/styles/index.js.map +1 -1
  211. package/lib/module/shared/providers/screen/styles/slot.provider.js +14 -16
  212. package/lib/module/shared/providers/screen/styles/slot.provider.js.map +1 -1
  213. package/lib/module/shared/providers/screen/use-current-screen-relationships.js +9 -0
  214. package/lib/module/shared/providers/screen/use-current-screen-relationships.js.map +1 -0
  215. package/lib/module/shared/providers/stack/blank-stack.provider.js +12 -5
  216. package/lib/module/shared/providers/stack/blank-stack.provider.js.map +1 -1
  217. package/lib/module/shared/providers/stack/core.provider.js +1 -3
  218. package/lib/module/shared/providers/stack/core.provider.js.map +1 -1
  219. package/lib/module/shared/providers/stack/direct.provider.js +2 -5
  220. package/lib/module/shared/providers/stack/direct.provider.js.map +1 -1
  221. package/lib/module/shared/stores/animation.store.js +0 -2
  222. package/lib/module/shared/stores/animation.store.js.map +1 -1
  223. package/lib/module/shared/stores/bounds/internals/coordinator.js +18 -4
  224. package/lib/module/shared/stores/bounds/internals/coordinator.js.map +1 -1
  225. package/lib/module/shared/stores/bounds/internals/links.js +1 -1
  226. package/lib/module/shared/stores/bounds/internals/links.js.map +1 -1
  227. package/lib/module/shared/stores/bounds/internals/state.js +1 -1
  228. package/lib/module/shared/utils/create-provider.js +51 -100
  229. package/lib/module/shared/utils/create-provider.js.map +1 -1
  230. package/lib/typescript/native-stack/views/useHeaderConfigProps.d.ts +1 -1
  231. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -1
  232. package/lib/typescript/shared/components/activity/helpers.d.ts +16 -0
  233. package/lib/typescript/shared/components/activity/helpers.d.ts.map +1 -1
  234. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts +2 -4
  235. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -1
  236. package/lib/typescript/shared/components/boundary/create-boundary-component.d.ts.map +1 -1
  237. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts.map +1 -1
  238. package/lib/typescript/shared/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.d.ts +2 -1
  239. package/lib/typescript/shared/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.d.ts.map +1 -1
  240. package/lib/typescript/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts.map +1 -1
  241. package/lib/typescript/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts.map +1 -1
  242. package/lib/typescript/shared/components/boundary/portal/components/boundary-portal/hooks/use-placeholder-styles.d.ts +2 -2
  243. package/lib/typescript/shared/components/boundary/portal/teleport.d.ts +1 -1
  244. package/lib/typescript/shared/components/boundary/portal/teleport.d.ts.map +1 -1
  245. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts +3 -0
  246. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts.map +1 -1
  247. package/lib/typescript/shared/components/overlay/helpers/create-overlay-interpolator-frame.d.ts +1 -0
  248. package/lib/typescript/shared/components/overlay/helpers/create-overlay-interpolator-frame.d.ts.map +1 -1
  249. package/lib/typescript/shared/components/overlay/helpers/get-active-overlay.d.ts.map +1 -1
  250. package/lib/typescript/shared/components/overlay/hooks/use-overlay-slot.d.ts +3 -2
  251. package/lib/typescript/shared/components/overlay/hooks/use-overlay-slot.d.ts.map +1 -1
  252. package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts.map +1 -1
  253. package/lib/typescript/shared/components/screen-container/layers/content.d.ts.map +1 -1
  254. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts +1 -1
  255. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts.map +1 -1
  256. package/lib/typescript/shared/factories/screen-topology/create-screen-topology.d.ts +4 -0
  257. package/lib/typescript/shared/factories/screen-topology/create-screen-topology.d.ts.map +1 -0
  258. package/lib/typescript/shared/factories/screen-topology/index.d.ts +5 -0
  259. package/lib/typescript/shared/factories/screen-topology/index.d.ts.map +1 -0
  260. package/lib/typescript/shared/factories/screen-topology/types.d.ts +20 -0
  261. package/lib/typescript/shared/factories/screen-topology/types.d.ts.map +1 -0
  262. package/lib/typescript/shared/factories/screen-topology/use-screen-relationships.d.ts +5 -0
  263. package/lib/typescript/shared/factories/screen-topology/use-screen-relationships.d.ts.map +1 -0
  264. package/lib/typescript/shared/factories/screen-topology/worklet.d.ts +5 -0
  265. package/lib/typescript/shared/factories/screen-topology/worklet.d.ts.map +1 -0
  266. package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts.map +1 -1
  267. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +2 -0
  268. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
  269. package/lib/typescript/shared/index.d.ts +0 -6
  270. package/lib/typescript/shared/index.d.ts.map +1 -1
  271. package/lib/typescript/shared/providers/screen/animation/animation.provider.d.ts +14 -12
  272. package/lib/typescript/shared/providers/screen/animation/animation.provider.d.ts.map +1 -1
  273. package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts +4 -4
  274. package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts.map +1 -1
  275. package/lib/typescript/shared/providers/screen/animation/helpers/hydrate-transition-state/types.d.ts +0 -1
  276. package/lib/typescript/shared/providers/screen/animation/helpers/hydrate-transition-state/types.d.ts.map +1 -1
  277. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts +1 -2
  278. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  279. package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts +2 -2
  280. package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts.map +1 -1
  281. package/lib/typescript/shared/providers/screen/animation/helpers/stack-progress.d.ts +5 -2
  282. package/lib/typescript/shared/providers/screen/animation/helpers/stack-progress.d.ts.map +1 -1
  283. package/lib/typescript/shared/providers/screen/animation/helpers/use-build-transition-state.d.ts +0 -1
  284. package/lib/typescript/shared/providers/screen/animation/helpers/use-build-transition-state.d.ts.map +1 -1
  285. package/lib/typescript/shared/providers/screen/animation/index.d.ts +1 -1
  286. package/lib/typescript/shared/providers/screen/animation/index.d.ts.map +1 -1
  287. package/lib/typescript/shared/providers/screen/animation/types.d.ts +1 -13
  288. package/lib/typescript/shared/providers/screen/animation/types.d.ts.map +1 -1
  289. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts +5 -2
  290. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  291. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.d.ts +1 -4
  292. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.d.ts.map +1 -1
  293. package/lib/typescript/shared/providers/screen/gestures/gestures.provider.d.ts +16 -4
  294. package/lib/typescript/shared/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
  295. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts +2 -2
  296. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts.map +1 -1
  297. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture.d.ts.map +1 -1
  298. package/lib/typescript/shared/providers/screen/gestures/index.d.ts +1 -1
  299. package/lib/typescript/shared/providers/screen/gestures/index.d.ts.map +1 -1
  300. package/lib/typescript/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts.map +1 -1
  301. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts +2 -3
  302. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +1 -1
  303. package/lib/typescript/shared/providers/screen/gestures/pan/activation/use-pan-activation.d.ts.map +1 -1
  304. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.d.ts +5 -3
  305. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.d.ts.map +1 -1
  306. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.d.ts.map +1 -1
  307. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts +2 -2
  308. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts.map +1 -1
  309. package/lib/typescript/shared/providers/screen/gestures/shared/policy.d.ts +3 -3
  310. package/lib/typescript/shared/providers/screen/gestures/shared/policy.d.ts.map +1 -1
  311. package/lib/typescript/shared/providers/screen/gestures/types.d.ts +4 -2
  312. package/lib/typescript/shared/providers/screen/gestures/types.d.ts.map +1 -1
  313. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts +4 -4
  314. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -1
  315. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  316. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +2 -2
  317. package/lib/typescript/shared/providers/screen/styles/index.d.ts +1 -1
  318. package/lib/typescript/shared/providers/screen/styles/index.d.ts.map +1 -1
  319. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts +9 -4
  320. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts.map +1 -1
  321. package/lib/typescript/shared/providers/screen/use-current-screen-relationships.d.ts +5 -0
  322. package/lib/typescript/shared/providers/screen/use-current-screen-relationships.d.ts.map +1 -0
  323. package/lib/typescript/shared/providers/stack/blank-stack.provider.d.ts +4 -1
  324. package/lib/typescript/shared/providers/stack/blank-stack.provider.d.ts.map +1 -1
  325. package/lib/typescript/shared/providers/stack/core.provider.d.ts.map +1 -1
  326. package/lib/typescript/shared/providers/stack/direct.provider.d.ts.map +1 -1
  327. package/lib/typescript/shared/stores/animation.store.d.ts +0 -1
  328. package/lib/typescript/shared/stores/animation.store.d.ts.map +1 -1
  329. package/lib/typescript/shared/stores/bounds/internals/coordinator.d.ts.map +1 -1
  330. package/lib/typescript/shared/stores/bounds/internals/links.d.ts.map +1 -1
  331. package/lib/typescript/shared/stores/bounds/internals/state.d.ts +1 -1
  332. package/lib/typescript/shared/stores/bounds/internals/state.d.ts.map +1 -1
  333. package/lib/typescript/shared/stores/bounds/types.d.ts +0 -1
  334. package/lib/typescript/shared/stores/bounds/types.d.ts.map +1 -1
  335. package/lib/typescript/shared/types/providers/blank-stack-provider.types.d.ts +1 -0
  336. package/lib/typescript/shared/types/providers/blank-stack-provider.types.d.ts.map +1 -1
  337. package/lib/typescript/shared/types/screen.types.d.ts +0 -9
  338. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  339. package/lib/typescript/shared/utils/create-provider.d.ts +24 -24
  340. package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
  341. package/package.json +2 -2
  342. package/src/shared/adapters/with-screen-transitions/stack-layout.tsx +1 -2
  343. package/src/shared/components/activity/helpers.ts +59 -0
  344. package/src/shared/components/activity/variants/activity-screen.tsx +28 -93
  345. package/src/shared/components/boundary/components/boundary-target.tsx +2 -2
  346. package/src/shared/components/boundary/create-boundary-component.tsx +10 -2
  347. package/src/shared/components/boundary/hooks/use-measurer.ts +3 -2
  348. package/src/shared/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.ts +22 -0
  349. package/src/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.ts +7 -3
  350. package/src/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.ts +2 -6
  351. package/src/shared/components/boundary/portal/teleport.ts +2 -23
  352. package/src/shared/components/boundary/providers/boundary-root.provider.tsx +10 -6
  353. package/src/shared/components/overlay/helpers/create-overlay-interpolator-frame.ts +14 -1
  354. package/src/shared/components/overlay/helpers/get-active-overlay.ts +29 -4
  355. package/src/shared/components/overlay/hooks/use-overlay-slot.ts +26 -8
  356. package/src/shared/components/overlay/variations/overlay-host.tsx +11 -6
  357. package/src/shared/components/screen-container/layers/content.tsx +3 -4
  358. package/src/shared/components/screen-lifecycle/hooks/use-close-transition-intent.ts +8 -12
  359. package/src/shared/factories/screen-topology/create-screen-topology.ts +199 -0
  360. package/src/shared/factories/screen-topology/index.ts +16 -0
  361. package/src/shared/factories/screen-topology/types.ts +22 -0
  362. package/src/shared/factories/screen-topology/use-screen-relationships.ts +15 -0
  363. package/src/shared/factories/screen-topology/worklet.ts +60 -0
  364. package/src/shared/hooks/navigation/use-screen-state.ts +2 -7
  365. package/src/shared/hooks/navigation/use-stack.tsx +28 -31
  366. package/src/shared/providers/screen/animation/animation.provider.tsx +73 -212
  367. package/src/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +10 -81
  368. package/src/shared/providers/screen/animation/helpers/hydrate-transition-state/types.ts +0 -1
  369. package/src/shared/providers/screen/animation/helpers/pipeline.ts +45 -70
  370. package/src/shared/providers/screen/animation/helpers/read-screen-animation-revisions.ts +6 -30
  371. package/src/shared/providers/screen/animation/helpers/stack-progress.ts +13 -32
  372. package/src/shared/providers/screen/animation/helpers/use-build-transition-state.ts +0 -2
  373. package/src/shared/providers/screen/animation/index.tsx +1 -0
  374. package/src/shared/providers/screen/animation/types.ts +1 -23
  375. package/src/shared/providers/screen/animation/use-screen-animation.tsx +10 -14
  376. package/src/shared/providers/screen/descriptors/descriptors.provider.tsx +56 -35
  377. package/src/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.ts +0 -6
  378. package/src/shared/providers/screen/gestures/gestures.provider.tsx +96 -85
  379. package/src/shared/providers/screen/gestures/hooks/use-screen-gesture-config.ts +4 -4
  380. package/src/shared/providers/screen/gestures/hooks/use-screen-gesture.ts +3 -4
  381. package/src/shared/providers/screen/gestures/index.tsx +2 -1
  382. package/src/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.tsx +16 -29
  383. package/src/shared/providers/screen/gestures/ownership/resolve-ownership.ts +5 -8
  384. package/src/shared/providers/screen/gestures/pan/activation/use-pan-activation.ts +2 -3
  385. package/src/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.tsx +6 -9
  386. package/src/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.ts +11 -7
  387. package/src/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.ts +12 -12
  388. package/src/shared/providers/screen/gestures/shared/policy.ts +7 -7
  389. package/src/shared/providers/screen/gestures/types.ts +5 -2
  390. package/src/shared/providers/screen/styles/hooks/slot-resolvers.tsx +10 -3
  391. package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +7 -17
  392. package/src/shared/providers/screen/styles/index.tsx +2 -1
  393. package/src/shared/providers/screen/styles/slot.provider.tsx +25 -24
  394. package/src/shared/providers/screen/use-current-screen-relationships.ts +10 -0
  395. package/src/shared/providers/stack/blank-stack.provider.tsx +19 -6
  396. package/src/shared/providers/stack/core.provider.tsx +0 -1
  397. package/src/shared/providers/stack/direct.provider.tsx +2 -4
  398. package/src/shared/stores/animation.store.ts +0 -3
  399. package/src/shared/stores/bounds/internals/coordinator.ts +20 -8
  400. package/src/shared/stores/bounds/internals/links.ts +1 -1
  401. package/src/shared/stores/bounds/internals/state.ts +1 -1
  402. package/src/shared/stores/bounds/types.ts +0 -1
  403. package/src/shared/types/providers/blank-stack-provider.types.ts +1 -0
  404. package/src/shared/types/screen.types.ts +0 -10
  405. package/src/shared/utils/create-provider.tsx +135 -200
  406. package/lib/commonjs/shared/providers/screen/animation/helpers/interpolator-participation.js +0 -9
  407. package/lib/commonjs/shared/providers/screen/animation/helpers/interpolator-participation.js.map +0 -1
  408. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js +0 -12
  409. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js.map +0 -1
  410. package/lib/commonjs/shared/providers/screen/gestures/shared/ancestors.js +0 -23
  411. package/lib/commonjs/shared/providers/screen/gestures/shared/ancestors.js.map +0 -1
  412. package/lib/commonjs/shared/stores/bounds/internals/screen-graph.js +0 -45
  413. package/lib/commonjs/shared/stores/bounds/internals/screen-graph.js.map +0 -1
  414. package/lib/module/shared/providers/screen/animation/helpers/interpolator-participation.js +0 -4
  415. package/lib/module/shared/providers/screen/animation/helpers/interpolator-participation.js.map +0 -1
  416. package/lib/module/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js +0 -7
  417. package/lib/module/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js.map +0 -1
  418. package/lib/module/shared/providers/screen/gestures/shared/ancestors.js +0 -19
  419. package/lib/module/shared/providers/screen/gestures/shared/ancestors.js.map +0 -1
  420. package/lib/module/shared/stores/bounds/internals/screen-graph.js +0 -39
  421. package/lib/module/shared/stores/bounds/internals/screen-graph.js.map +0 -1
  422. package/lib/typescript/shared/providers/screen/animation/helpers/interpolator-participation.d.ts +0 -3
  423. package/lib/typescript/shared/providers/screen/animation/helpers/interpolator-participation.d.ts.map +0 -1
  424. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.d.ts +0 -5
  425. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.d.ts.map +0 -1
  426. package/lib/typescript/shared/providers/screen/gestures/shared/ancestors.d.ts +0 -11
  427. package/lib/typescript/shared/providers/screen/gestures/shared/ancestors.d.ts.map +0 -1
  428. package/lib/typescript/shared/stores/bounds/internals/screen-graph.d.ts +0 -5
  429. package/lib/typescript/shared/stores/bounds/internals/screen-graph.d.ts.map +0 -1
  430. package/src/shared/providers/screen/animation/helpers/interpolator-participation.ts +0 -6
  431. package/src/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.ts +0 -13
  432. package/src/shared/providers/screen/gestures/shared/ancestors.ts +0 -27
  433. package/src/shared/stores/bounds/internals/screen-graph.ts +0 -45
@@ -1,44 +1,25 @@
1
1
  import type { SharedValue } from "react-native-reanimated";
2
2
 
3
- export const syncStackProgressValues = (
4
- visualProgressValues: SharedValue<number>[],
5
- stackProgressValues: SharedValue<number>[],
6
- ) => {
7
- "worklet";
8
- let total = 0;
9
-
10
- for (let i = visualProgressValues.length - 1; i >= 0; i--) {
11
- total += visualProgressValues[i]?.get() ?? 0;
12
- const stackProgress = stackProgressValues[i];
13
-
14
- if (stackProgress && stackProgress.get() !== total) {
15
- stackProgress.set(total);
16
- }
17
- }
3
+ export type StackProgressEntry = {
4
+ routeKey: string;
5
+ visualProgress: SharedValue<number>;
18
6
  };
19
7
 
20
- export const resolveStackProgress = (
21
- stackProgress: SharedValue<number> | undefined,
8
+ export const readStackProgress = (
9
+ entries: readonly StackProgressEntry[],
10
+ routeKey: string,
22
11
  fallbackProgress: number,
23
- currentProgress: number,
24
- previousCurrentProgress: number | undefined,
25
- nextProgress: number | undefined,
26
- previousNextProgress: number | undefined,
27
12
  ) => {
28
13
  "worklet";
29
- if (!stackProgress) {
30
- return fallbackProgress;
31
- }
14
+ let progress = 0;
32
15
 
33
- let total = stackProgress.get();
34
-
35
- if (previousCurrentProgress !== undefined) {
36
- total += currentProgress - previousCurrentProgress;
37
- }
16
+ for (let index = entries.length - 1; index >= 0; index--) {
17
+ const entry = entries[index];
18
+ if (!entry) continue;
38
19
 
39
- if (nextProgress !== undefined && previousNextProgress !== undefined) {
40
- total += nextProgress - previousNextProgress;
20
+ progress += entry.visualProgress.get();
21
+ if (entry.routeKey === routeKey) return progress;
41
22
  }
42
23
 
43
- return total;
24
+ return fallbackProgress;
44
25
  };
@@ -22,7 +22,6 @@ import { toPlainRoute, toPlainValue } from "./worklet";
22
22
  type BuiltState = {
23
23
  transitionProgress: SharedValue<number>;
24
24
  visualProgress: SharedValue<number>;
25
- stackProgress: SharedValue<number>;
26
25
  willAnimate: SharedValue<number>;
27
26
  closing: SharedValue<number>;
28
27
  progressAnimating: SharedValue<number>;
@@ -68,7 +67,6 @@ export const useBuildTransitionState = (
68
67
  return {
69
68
  transitionProgress: AnimationStore.getValue(key, "transitionProgress"),
70
69
  visualProgress: AnimationStore.getValue(key, "visualProgress"),
71
- stackProgress: AnimationStore.getValue(key, "stackProgress"),
72
70
  willAnimate: AnimationStore.getValue(key, "willAnimate"),
73
71
  closing: AnimationStore.getValue(key, "closing"),
74
72
  entering: AnimationStore.getValue(key, "entering"),
@@ -1,5 +1,6 @@
1
1
  export {
2
2
  ScreenAnimationProvider,
3
+ useOptionalScreenAnimationStore,
3
4
  useScreenAnimationStore,
4
5
  } from "./animation.provider";
5
6
  export {
@@ -15,30 +15,8 @@ export type ScreenAnimationTarget =
15
15
  | ScreenTransitionTarget
16
16
  | ScreenAnimationLegacyTarget;
17
17
 
18
- export type ScreenAnimationSource = {
18
+ export type ScreenAnimationTransitionSource = {
19
19
  screenInterpolatorProps: SharedValue<ScreenInterpolatorFrame>;
20
20
  screenInterpolatorPropsRevision: ScreenInterpolatorPropsRevision;
21
- };
22
-
23
- export type ScreenAnimationTransitionSource = ScreenAnimationSource & {
24
21
  boundsAccessor: BoundsAccessor;
25
22
  };
26
-
27
- export type ScreenAnimationDescendantSource = {
28
- source: ScreenAnimationTransitionSource;
29
- depth: number;
30
- };
31
-
32
- export type ScreenAnimationDescendantSources = SharedValue<
33
- ScreenAnimationDescendantSource[]
34
- >;
35
-
36
- export type RegisterScreenAnimationDescendant = (
37
- source: ScreenAnimationTransitionSource,
38
- depth: number,
39
- ) => () => void;
40
-
41
- export type ScreenAnimationAncestorDescendantRegistrar = {
42
- register: RegisterScreenAnimationDescendant;
43
- depth: number;
44
- };
@@ -4,7 +4,7 @@ import type {
4
4
  ScreenInterpolationProps,
5
5
  ScreenTransitionTarget,
6
6
  } from "../../../types/animation.types";
7
- import { useScreenAnimationStore } from "./animation.provider";
7
+ import { useOptionalScreenAnimationStore } from "./animation.provider";
8
8
  import { useBuildTransitionAccessor } from "./helpers/accessors/use-build-transition-accessor";
9
9
  import { readScreenAnimationRevisions } from "./helpers/read-screen-animation-revisions";
10
10
  import type {
@@ -35,32 +35,28 @@ export function useScreenAnimation(
35
35
  | DerivedValue<ScreenInterpolationProps>
36
36
  | DerivedValue<ScreenInterpolationProps | null> {
37
37
  const route = useRoute();
38
- const screenAnimationStore = useScreenAnimationStore(route.key);
38
+ const localAnimationStore = useOptionalScreenAnimationStore();
39
+ const keyedAnimationStore = useOptionalScreenAnimationStore(
40
+ localAnimationStore ? null : route.key,
41
+ );
42
+ const screenAnimationStore = localAnimationStore ?? keyedAnimationStore;
39
43
 
40
44
  if (!screenAnimationStore) {
41
45
  throw new Error(
42
- `ScreenAnimation store for route "${route.key}" was not found`,
46
+ `ScreenAnimationStore is unavailable for route "${route.key}"`,
43
47
  );
44
48
  }
45
49
 
46
- const {
47
- screenInterpolatorPropsRevision,
48
- ancestorScreenAnimationSources,
49
- descendantScreenAnimationSources,
50
- } = screenAnimationStore;
50
+ const { transitionSources, transitionOriginIndex } = screenAnimationStore;
51
51
  const transition = useBuildTransitionAccessor(screenAnimationStore);
52
52
  const transitionTarget = normalizeScreenAnimationTarget(
53
53
  target,
54
- ancestorScreenAnimationSources.length,
54
+ transitionOriginIndex,
55
55
  );
56
56
 
57
57
  const animation = useDerivedValue<ScreenInterpolationProps | null>(() => {
58
58
  "worklet";
59
- readScreenAnimationRevisions(
60
- screenInterpolatorPropsRevision,
61
- ancestorScreenAnimationSources,
62
- descendantScreenAnimationSources,
63
- );
59
+ readScreenAnimationRevisions(transitionSources);
64
60
  return transition(transitionTarget);
65
61
  });
66
62
 
@@ -2,7 +2,9 @@ import type { ReactNode } from "react";
2
2
  import { useLayoutEffect, useMemo } from "react";
3
3
  import { runOnUI } from "react-native-reanimated";
4
4
  import { useScreenTransitionsAdapterOptionalContext } from "../../../adapters/with-screen-transitions/context";
5
- import { useBlankStackStore } from "../../../providers/stack/blank-stack.provider";
5
+ import { screenTopology } from "../../../factories/screen-topology";
6
+ import { useStack } from "../../../hooks/navigation/use-stack";
7
+ import { useOptionalBlankStackStore } from "../../../providers/stack/blank-stack.provider";
6
8
  import {
7
9
  registerScreen,
8
10
  unregisterScreen,
@@ -12,7 +14,6 @@ import type { BaseStackDescriptor } from "../../../types/stack.types";
12
14
  import createProvider from "../../../utils/create-provider";
13
15
  import type { DescriptorDerivations } from "./helpers/derive-descriptor-derivations";
14
16
  import { deriveDescriptorDerivations } from "./helpers/derive-descriptor-derivations";
15
- import { deriveStructuralAncestorKeys } from "./helpers/derive-structural-ancestor-keys";
16
17
 
17
18
  /**
18
19
  * Base descriptor interface - minimal contract for all stack types.
@@ -47,30 +48,32 @@ type DescriptorsProviderProps = {
47
48
  routeKey?: string;
48
49
  };
49
50
 
50
- export const { DescriptorsProvider, useDescriptorsStore } = createProvider(
51
- "Descriptors",
52
- { guarded: true },
53
- )<DescriptorsProviderProps, DescriptorStoreValue<BaseDescriptor>>(
54
- ({ previous, current, next, routeKey, children }, { useParentStore }) => {
55
- const parentScreenKey = useParentStore(
51
+ const createDescriptorsProvider = createProvider("Descriptors", {
52
+ global: true,
53
+ })<DescriptorsProviderProps, DescriptorStoreValue<BaseDescriptor>>;
54
+
55
+ const {
56
+ DescriptorsProvider,
57
+ useDescriptorsStore,
58
+ useOptionalDescriptorsStore,
59
+ }: ReturnType<typeof createDescriptorsProvider> = createDescriptorsProvider(
60
+ ({ previous, current, next, routeKey, children }) => {
61
+ const parentScreenKey = useOptionalDescriptorsStore(
56
62
  (store) => store?.derivations.currentScreenKey,
57
63
  );
58
- const parentAncestorKeys = useParentStore(
59
- (store) => store?.derivations.ancestorKeys,
60
- );
61
- const parentTransitionSourcePairKey = useParentStore(
64
+ const parentTransitionSourcePairKey = useOptionalDescriptorsStore(
62
65
  (store) => store?.derivations.transitionSourcePairKey,
63
66
  );
64
- const parentTransitionDestinationScreenKey = useParentStore(
67
+ const parentTransitionDestinationScreenKey = useOptionalDescriptorsStore(
65
68
  (store) => store?.derivations.transitionDestinationScreenKey,
66
69
  );
67
- const blankStackCurrent = useBlankStackStore((store) =>
70
+ const blankStackCurrent = useOptionalBlankStackStore((store) =>
68
71
  routeKey ? store?.scenesByKey[routeKey]?.descriptor : undefined,
69
72
  );
70
- const blankStackPrevious = useBlankStackStore((store) =>
73
+ const blankStackPrevious = useOptionalBlankStackStore((store) =>
71
74
  routeKey ? store?.scenesByKey[routeKey]?.previousDescriptor : undefined,
72
75
  );
73
- const blankStackNext = useBlankStackStore((store) =>
76
+ const blankStackNext = useOptionalBlankStackStore((store) =>
74
77
  routeKey ? store?.scenesByKey[routeKey]?.nextDescriptor : undefined,
75
78
  );
76
79
  const adapterContext = useScreenTransitionsAdapterOptionalContext();
@@ -86,6 +89,17 @@ export const { DescriptorsProvider, useDescriptorsStore } = createProvider(
86
89
  const resolvedPrevious =
87
90
  previous ?? blankStackPrevious ?? adapterScene?.previousDescriptor;
88
91
  const resolvedNext = next ?? blankStackNext ?? adapterScene?.nextDescriptor;
92
+ const currentScreenKey = current?.route.key ?? routeKey;
93
+ const isActiveScreen = useStack((store) => {
94
+ const focusedScene = store.scenes[
95
+ store.focusedIndex
96
+ ] as (typeof store.scenes)[number];
97
+
98
+ return (
99
+ focusedScene.route.key === currentScreenKey &&
100
+ focusedScene.activity === "active"
101
+ );
102
+ });
89
103
 
90
104
  if (!resolvedCurrent) {
91
105
  throw new Error(
@@ -102,40 +116,28 @@ export const { DescriptorsProvider, useDescriptorsStore } = createProvider(
102
116
  [resolvedPrevious, resolvedCurrent, resolvedNext],
103
117
  );
104
118
 
105
- const ancestorKeys = useMemo(
106
- () =>
107
- deriveStructuralAncestorKeys(
108
- parentScreenKey
109
- ? {
110
- currentScreenKey: parentScreenKey,
111
- ancestorKeys: parentAncestorKeys ?? [],
112
- }
113
- : null,
114
- ),
115
- [parentAncestorKeys, parentScreenKey],
116
- );
117
-
118
119
  const derivations = useMemo(() => {
119
120
  const localDerivations = deriveDescriptorDerivations({
120
121
  previous: resolvedPrevious,
121
122
  current: resolvedCurrent,
122
123
  next: resolvedNext,
123
- ancestorKeys,
124
124
  });
125
125
 
126
126
  return {
127
127
  ...localDerivations,
128
128
  transitionSourcePairKey:
129
- localDerivations.sourcePairKey ?? parentTransitionSourcePairKey,
129
+ localDerivations.sourcePairKey ??
130
+ parentTransitionSourcePairKey ??
131
+ undefined,
130
132
  transitionDestinationScreenKey:
131
133
  localDerivations.nextScreenKey ??
132
- parentTransitionDestinationScreenKey,
134
+ parentTransitionDestinationScreenKey ??
135
+ undefined,
133
136
  };
134
137
  }, [
135
138
  resolvedPrevious,
136
139
  resolvedCurrent,
137
140
  resolvedNext,
138
- ancestorKeys,
139
141
  parentTransitionSourcePairKey,
140
142
  parentTransitionDestinationScreenKey,
141
143
  ]);
@@ -149,24 +151,41 @@ export const { DescriptorsProvider, useDescriptorsStore } = createProvider(
149
151
  );
150
152
 
151
153
  useLayoutEffect(() => {
154
+ screenTopology.register({
155
+ screenKey: derivations.currentScreenKey,
156
+ parentScreenKey,
157
+ });
152
158
  runOnUI(registerScreen)({
153
159
  screenKey: derivations.currentScreenKey,
154
- parentScreenKey: derivations.parentScreenKey,
160
+ parentScreenKey,
155
161
  animationProgress,
156
162
  pendingLifecycleStartBlockCount,
157
163
  });
158
164
 
159
165
  return () => {
166
+ screenTopology.unregister(derivations.currentScreenKey);
160
167
  runOnUI(unregisterScreen)(derivations.currentScreenKey);
161
168
  };
162
169
  }, [
163
170
  animationProgress,
164
171
  derivations.currentScreenKey,
165
- derivations.parentScreenKey,
172
+ parentScreenKey,
166
173
  pendingLifecycleStartBlockCount,
167
174
  ]);
168
175
 
176
+ useLayoutEffect(() => {
177
+ if (!isActiveScreen || !parentScreenKey) {
178
+ return;
179
+ }
180
+
181
+ return screenTopology.activate({
182
+ screenKey: derivations.currentScreenKey,
183
+ parentScreenKey,
184
+ });
185
+ }, [isActiveScreen, derivations.currentScreenKey, parentScreenKey]);
186
+
169
187
  return {
188
+ key: derivations.currentScreenKey,
170
189
  value: {
171
190
  previous: resolvedPrevious,
172
191
  current: resolvedCurrent,
@@ -179,3 +198,5 @@ export const { DescriptorsProvider, useDescriptorsStore } = createProvider(
179
198
  };
180
199
  },
181
200
  );
201
+
202
+ export { DescriptorsProvider, useDescriptorsStore };
@@ -12,10 +12,8 @@ export interface DescriptorDerivations {
12
12
  /** Destination root for the nearest source pair. */
13
13
  transitionDestinationScreenKey?: string;
14
14
  destinationPairKey?: ScreenPairKey;
15
- parentScreenKey?: string;
16
15
  isFirstKey: boolean;
17
16
  isTopMostScreen: boolean;
18
- ancestorKeys: string[];
19
17
  hasConfiguredInterpolator: boolean;
20
18
  }
21
19
 
@@ -23,14 +21,12 @@ interface Params {
23
21
  previous?: BaseStackDescriptor;
24
22
  current: BaseStackDescriptor;
25
23
  next?: BaseStackDescriptor;
26
- ancestorKeys: string[];
27
24
  }
28
25
 
29
26
  export function deriveDescriptorDerivations({
30
27
  previous,
31
28
  current,
32
29
  next,
33
- ancestorKeys,
34
30
  }: Params): DescriptorDerivations {
35
31
  const previousScreenKey = previous?.route.key;
36
32
  const currentScreenKey = current.route.key;
@@ -59,10 +55,8 @@ export function deriveDescriptorDerivations({
59
55
  transitionSourcePairKey: sourcePairKey,
60
56
  transitionDestinationScreenKey: nextScreenKey,
61
57
  destinationPairKey,
62
- parentScreenKey: ancestorKeys[0],
63
58
  isFirstKey,
64
59
  isTopMostScreen,
65
- ancestorKeys,
66
60
  hasConfiguredInterpolator,
67
61
  };
68
62
  }
@@ -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,