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,16 +1,10 @@
1
- import { type ReactNode, useCallback, useLayoutEffect, useMemo } from "react";
2
- import { useSharedValue } from "react-native-reanimated";
1
+ import { type ReactNode, useMemo } from "react";
3
2
  import { createBoundsAccessor } from "../../../utils/bounds";
4
3
  import createProvider from "../../../utils/create-provider";
5
4
  import { useDescriptorsStore } from "../descriptors";
5
+ import { useCurrentScreenRelationships } from "../use-current-screen-relationships";
6
6
  import { useScreenAnimationPipeline } from "./helpers/pipeline";
7
- import type {
8
- RegisterScreenAnimationDescendant,
9
- ScreenAnimationAncestorDescendantRegistrar,
10
- ScreenAnimationDescendantSources,
11
- ScreenAnimationSource,
12
- ScreenAnimationTransitionSource,
13
- } from "./types";
7
+ import type { ScreenAnimationTransitionSource } from "./types";
14
8
 
15
9
  type Props = {
16
10
  children: ReactNode;
@@ -19,209 +13,76 @@ type Props = {
19
13
  export type ScreenAnimationContextValue = ReturnType<
20
14
  typeof useScreenAnimationPipeline
21
15
  > & {
22
- ancestorScreenAnimationSources: ScreenAnimationSource[];
23
- descendantScreenAnimationSources: ScreenAnimationDescendantSources;
24
- registerDescendantScreenAnimationSource: RegisterScreenAnimationDescendant;
25
- ancestorDescendantScreenAnimationRegistrars: ScreenAnimationAncestorDescendantRegistrar[];
16
+ transitionSources: readonly ScreenAnimationTransitionSource[];
17
+ transitionOriginIndex: number;
18
+ transitionSourcesThroughSelf: readonly ScreenAnimationTransitionSource[];
19
+ transitionSourcesFromSelf: readonly ScreenAnimationTransitionSource[];
26
20
  };
27
21
 
28
- export type ScreenAnimationContextResult = {
29
- key: string;
30
- value: ScreenAnimationContextValue;
31
- };
32
-
33
- export const { ScreenAnimationProvider, useScreenAnimationStore } =
34
- createProvider("ScreenAnimation", {
35
- guarded: true,
36
- global: true,
37
- })<Props, ScreenAnimationContextValue>(
38
- (_props, { useParentStore }): ScreenAnimationContextResult => {
39
- const currentScreenKey = useDescriptorsStore(
40
- (store) => store.derivations.currentScreenKey,
41
- );
42
- const parentScreenInterpolatorProps = useParentStore(
43
- (parentContext) => parentContext?.screenInterpolatorProps,
44
- );
45
- const parentScreenInterpolatorPropsRevision = useParentStore(
46
- (parentContext) => parentContext?.screenInterpolatorPropsRevision,
47
- );
48
- const parentAncestorScreenAnimationSources = useParentStore(
49
- (parentContext) => parentContext?.ancestorScreenAnimationSources,
50
- );
51
- const parentRegisterDescendantScreenAnimationSource = useParentStore(
52
- (parentContext) =>
53
- parentContext?.registerDescendantScreenAnimationSource,
54
- );
55
- const parentAncestorDescendantScreenAnimationRegistrars = useParentStore(
56
- (parentContext) =>
57
- parentContext?.ancestorDescendantScreenAnimationRegistrars,
58
- );
59
-
60
- const parentInterpolatorUpdatesEnabled = useParentStore(
61
- (parentContext) => parentContext?.interpolatorUpdatesEnabled,
62
- );
63
-
64
- const {
65
- interpolatorUpdatesEnabled,
66
- screenInterpolatorProps,
67
- screenInterpolatorPropsRevision,
68
- selectedInterpolatorOptions,
69
- nextInterpolator,
70
- currentInterpolator,
71
- } = useScreenAnimationPipeline(parentInterpolatorUpdatesEnabled ?? true);
72
-
73
- const selfScreenAnimationSource = useMemo<ScreenAnimationSource>(
74
- () => ({
75
- screenInterpolatorProps,
76
- screenInterpolatorPropsRevision,
22
+ const EMPTY_TRANSITION_SOURCES: readonly ScreenAnimationTransitionSource[] = [];
23
+
24
+ const createScreenAnimationProvider = createProvider("ScreenAnimation", {
25
+ global: true,
26
+ })<Props, ScreenAnimationContextValue>;
27
+
28
+ export const {
29
+ ScreenAnimationProvider,
30
+ useOptionalScreenAnimationStore,
31
+ useScreenAnimationStore,
32
+ }: ReturnType<typeof createScreenAnimationProvider> =
33
+ createScreenAnimationProvider((_props) => {
34
+ const currentScreenKey = useDescriptorsStore(
35
+ (store) => store.derivations.currentScreenKey,
36
+ );
37
+ const relationships = useCurrentScreenRelationships();
38
+ const pipeline = useScreenAnimationPipeline();
39
+
40
+ const screenAnimationSource = useMemo<ScreenAnimationTransitionSource>(
41
+ () => ({
42
+ screenInterpolatorProps: pipeline.screenInterpolatorProps,
43
+ screenInterpolatorPropsRevision:
44
+ pipeline.screenInterpolatorPropsRevision,
45
+ boundsAccessor: createBoundsAccessor(() => {
46
+ "worklet";
47
+ return pipeline.screenInterpolatorProps.get();
77
48
  }),
78
- [screenInterpolatorProps, screenInterpolatorPropsRevision],
79
- );
80
-
81
- const selfScreenAnimationTransitionSource =
82
- useMemo<ScreenAnimationTransitionSource>(
83
- () => ({
84
- ...selfScreenAnimationSource,
85
- boundsAccessor: createBoundsAccessor(() => {
86
- "worklet";
87
- return selfScreenAnimationSource.screenInterpolatorProps.get();
88
- }),
89
- }),
90
- [selfScreenAnimationSource],
91
- );
92
-
93
- const descendantScreenAnimationSources = useSharedValue<
94
- ScreenAnimationDescendantSources["value"]
95
- >([]);
96
-
97
- const registerDescendantScreenAnimationSource =
98
- useCallback<RegisterScreenAnimationDescendant>(
99
- (source, depth) => {
100
- descendantScreenAnimationSources.modify(
101
- <T extends ScreenAnimationDescendantSources["value"]>(
102
- currentSources: T,
103
- ): T => {
104
- "worklet";
105
- const existingIndex = currentSources.findIndex(
106
- (currentSource) => currentSource.source === source,
107
- );
108
-
109
- if (
110
- existingIndex !== -1 &&
111
- currentSources[existingIndex]?.depth === depth
112
- ) {
113
- return currentSources;
114
- }
115
-
116
- const nextSources =
117
- existingIndex === -1
118
- ? [...currentSources, { source, depth }]
119
- : currentSources.map((currentSource, index) =>
120
- index === existingIndex
121
- ? { source, depth }
122
- : currentSource,
123
- );
124
-
125
- return nextSources.sort((a, b) => a.depth - b.depth) as T;
126
- },
127
- );
128
-
129
- return () => {
130
- descendantScreenAnimationSources.modify(
131
- <T extends ScreenAnimationDescendantSources["value"]>(
132
- currentSources: T,
133
- ): T => {
134
- "worklet";
135
- return currentSources.filter(
136
- (currentSource) => currentSource.source !== source,
137
- ) as T;
138
- },
139
- );
140
- };
141
- },
142
- [descendantScreenAnimationSources],
143
- );
144
-
145
- const ancestorScreenAnimationSources = useMemo(() => {
146
- if (
147
- !parentScreenInterpolatorProps ||
148
- !parentScreenInterpolatorPropsRevision ||
149
- !parentAncestorScreenAnimationSources
150
- ) {
151
- return [];
152
- }
153
-
154
- return [
155
- {
156
- screenInterpolatorProps: parentScreenInterpolatorProps,
157
- screenInterpolatorPropsRevision:
158
- parentScreenInterpolatorPropsRevision,
159
- },
160
- ...parentAncestorScreenAnimationSources,
161
- ];
162
- }, [
163
- parentScreenInterpolatorProps,
164
- parentScreenInterpolatorPropsRevision,
165
- parentAncestorScreenAnimationSources,
166
- ]);
167
-
168
- const ancestorDescendantScreenAnimationRegistrars = useMemo(() => {
169
- if (!parentRegisterDescendantScreenAnimationSource) {
170
- return [];
171
- }
172
-
173
- // Each provider exposes its own descendant registrar and forwards ancestor
174
- // registrars, letting a mounted child register with every ancestor scope.
175
- return [
176
- {
177
- register: parentRegisterDescendantScreenAnimationSource,
178
- depth: 1,
179
- },
180
- ...(parentAncestorDescendantScreenAnimationRegistrars ?? []).map(
181
- (registrar) => ({
182
- register: registrar.register,
183
- depth: registrar.depth + 1,
184
- }),
185
- ),
186
- ];
187
- }, [
188
- parentRegisterDescendantScreenAnimationSource,
189
- parentAncestorDescendantScreenAnimationRegistrars,
190
- ]);
191
-
192
- useLayoutEffect(() => {
193
- const cleanups = ancestorDescendantScreenAnimationRegistrars.map(
194
- (registrar) =>
195
- registrar.register(
196
- selfScreenAnimationTransitionSource,
197
- registrar.depth,
198
- ),
199
- );
200
-
201
- return () => {
202
- for (const cleanup of cleanups) {
203
- cleanup();
204
- }
205
- };
206
- }, [
207
- ancestorDescendantScreenAnimationRegistrars,
208
- selfScreenAnimationTransitionSource,
209
- ]);
210
-
211
- return {
212
- key: currentScreenKey,
213
- value: {
214
- interpolatorUpdatesEnabled,
215
- screenInterpolatorProps,
216
- screenInterpolatorPropsRevision,
217
- selectedInterpolatorOptions,
218
- nextInterpolator,
219
- currentInterpolator,
220
- ancestorScreenAnimationSources,
221
- descendantScreenAnimationSources,
222
- registerDescendantScreenAnimationSource,
223
- ancestorDescendantScreenAnimationRegistrars,
224
- },
225
- };
226
- },
227
- );
49
+ }),
50
+ [
51
+ pipeline.screenInterpolatorProps,
52
+ pipeline.screenInterpolatorPropsRevision,
53
+ ],
54
+ );
55
+ const ancestorSources =
56
+ useOptionalScreenAnimationStore(
57
+ relationships.parentScreenKey,
58
+ (store) => store.transitionSourcesThroughSelf,
59
+ ) ?? EMPTY_TRANSITION_SOURCES;
60
+ const descendantSources =
61
+ useOptionalScreenAnimationStore(
62
+ relationships.activeChildScreenKey,
63
+ (store) => store.transitionSourcesFromSelf,
64
+ ) ?? EMPTY_TRANSITION_SOURCES;
65
+ const transitionSourcesThroughSelf = useMemo(
66
+ () => [...ancestorSources, screenAnimationSource],
67
+ [ancestorSources, screenAnimationSource],
68
+ );
69
+ const transitionSourcesFromSelf = useMemo(
70
+ () => [screenAnimationSource, ...descendantSources],
71
+ [screenAnimationSource, descendantSources],
72
+ );
73
+ const transitionSources = useMemo(
74
+ () => [...transitionSourcesThroughSelf, ...descendantSources],
75
+ [transitionSourcesThroughSelf, descendantSources],
76
+ );
77
+
78
+ return {
79
+ key: currentScreenKey,
80
+ value: {
81
+ ...pipeline,
82
+ transitionSources,
83
+ transitionOriginIndex: ancestorSources.length,
84
+ transitionSourcesThroughSelf,
85
+ transitionSourcesFromSelf,
86
+ },
87
+ };
88
+ });
@@ -3,13 +3,8 @@ import type {
3
3
  ScreenInterpolationProps,
4
4
  ScreenTransitionTarget,
5
5
  } from "../../../../../types/animation.types";
6
- import { createBoundsAccessor } from "../../../../../utils/bounds";
7
6
  import type { ScreenAnimationContextValue } from "../../animation.provider";
8
- import type {
9
- ScreenAnimationDescendantSources,
10
- ScreenAnimationSource,
11
- ScreenAnimationTransitionSource,
12
- } from "../../types";
7
+ import type { ScreenAnimationTransitionSource } from "../../types";
13
8
 
14
9
  type TransitionSourceIndex = number;
15
10
 
@@ -17,10 +12,7 @@ export type TransitionAccessorSource = ScreenAnimationTransitionSource;
17
12
 
18
13
  type TransitionAccessorStore = Pick<
19
14
  ScreenAnimationContextValue,
20
- | "screenInterpolatorProps"
21
- | "screenInterpolatorPropsRevision"
22
- | "ancestorScreenAnimationSources"
23
- | "descendantScreenAnimationSources"
15
+ "transitionSources" | "transitionOriginIndex"
24
16
  >;
25
17
 
26
18
  const resolveTargetIndex = (
@@ -48,29 +40,9 @@ const resolveTargetIndex = (
48
40
  export const createTransitionAccessor = (
49
41
  sources: readonly TransitionAccessorSource[],
50
42
  originIndex = 0,
51
- descendantSources?: ScreenAnimationDescendantSources,
52
43
  ) => {
53
44
  "worklet";
54
45
 
55
- const getSources = (): readonly TransitionAccessorSource[] => {
56
- "worklet";
57
- if (!descendantSources) {
58
- return sources;
59
- }
60
-
61
- const descendants = descendantSources.get();
62
- if (descendants.length === 0) {
63
- return sources;
64
- }
65
-
66
- const currentSources = sources.slice();
67
- for (let index = 0; index < descendants.length; index++) {
68
- currentSources.push(descendants[index].source);
69
- }
70
-
71
- return currentSources;
72
- };
73
-
74
46
  const buildScope = (
75
47
  sourceIndex: TransitionSourceIndex,
76
48
  currentSources: readonly TransitionAccessorSource[],
@@ -104,64 +76,21 @@ export const createTransitionAccessor = (
104
76
 
105
77
  return (target?: ScreenTransitionTarget): ScreenInterpolationProps | null => {
106
78
  "worklet";
107
- const currentSources = getSources();
108
- const targetIndex = resolveTargetIndex(
109
- target,
110
- originIndex,
111
- currentSources.length,
112
- );
79
+ const targetIndex = resolveTargetIndex(target, originIndex, sources.length);
113
80
  if (targetIndex === -1) {
114
81
  return null;
115
82
  }
116
83
 
117
- return buildScope(targetIndex, currentSources);
84
+ return buildScope(targetIndex, sources);
118
85
  };
119
86
  };
120
87
 
121
- const buildSourceBoundsAccessor = (source: ScreenAnimationSource) => {
122
- "worklet";
123
- return createBoundsAccessor(() => {
124
- "worklet";
125
- return source.screenInterpolatorProps.get();
126
- });
127
- };
128
-
129
88
  export const useBuildTransitionAccessor = ({
130
- screenInterpolatorProps,
131
- screenInterpolatorPropsRevision,
132
- ancestorScreenAnimationSources,
133
- descendantScreenAnimationSources,
89
+ transitionSources,
90
+ transitionOriginIndex,
134
91
  }: TransitionAccessorStore) => {
135
- return useMemo(() => {
136
- const selfSource = {
137
- screenInterpolatorProps,
138
- screenInterpolatorPropsRevision,
139
- };
140
-
141
- const transitionSources: TransitionAccessorSource[] =
142
- ancestorScreenAnimationSources.map((source) => ({
143
- ...source,
144
- boundsAccessor: buildSourceBoundsAccessor(source),
145
- }));
146
-
147
- const selfTransitionSource = {
148
- ...selfSource,
149
- boundsAccessor: buildSourceBoundsAccessor(selfSource),
150
- };
151
-
152
- transitionSources.reverse();
153
- const originIndex = transitionSources.length;
154
- transitionSources.push(selfTransitionSource);
155
-
156
- return createTransitionAccessor(
157
- transitionSources,
158
- originIndex,
159
- descendantScreenAnimationSources,
160
- );
161
- }, [
162
- screenInterpolatorProps,
163
- screenInterpolatorPropsRevision,
164
- ancestorScreenAnimationSources,
165
- descendantScreenAnimationSources,
166
- ]);
92
+ return useMemo(
93
+ () => createTransitionAccessor(transitionSources, transitionOriginIndex),
94
+ [transitionSources, transitionOriginIndex],
95
+ );
167
96
  };
@@ -11,7 +11,6 @@ import type { BaseStackRoute } from "../../../../../types/stack.types";
11
11
  export type BuiltState = {
12
12
  transitionProgress: SharedValue<number>;
13
13
  visualProgress: SharedValue<number>;
14
- stackProgress: SharedValue<number>;
15
14
  willAnimate: SharedValue<number>;
16
15
  closing: SharedValue<number>;
17
16
  progressAnimating: SharedValue<number>;
@@ -11,7 +11,10 @@ import {
11
11
  createScreenTransitionState,
12
12
  DEFAULT_SCREEN_TRANSITION_STATE,
13
13
  } from "../../../../constants";
14
- import { useStack } from "../../../../hooks/navigation/use-stack";
14
+ import {
15
+ useStack,
16
+ useStackProgressEntries,
17
+ } from "../../../../hooks/navigation/use-stack";
15
18
  import type {
16
19
  ScreenInterpolationProps,
17
20
  ScreenStyleInterpolator,
@@ -23,9 +26,8 @@ import { buildScreenTransitionOptions } from "./build-screen-transition-options"
23
26
  import { updateDerivations } from "./derivations";
24
27
  import { hasTransitionsEnabled } from "./has-transitions-enabled";
25
28
  import { hydrateTransitionState } from "./hydrate-transition-state";
26
- import { shouldUpdateScreenInterpolator } from "./interpolator-participation";
27
29
  import type { SelectedInterpolatorOptions } from "./selected-interpolator-options";
28
- import { resolveStackProgress } from "./stack-progress";
30
+ import { readStackProgress, type StackProgressEntry } from "./stack-progress";
29
31
  import { useBuildTransitionState } from "./use-build-transition-state";
30
32
  import { toPlainRoute, toPlainValue } from "./worklet";
31
33
 
@@ -35,7 +37,6 @@ export type ScreenInterpolatorFrame = Omit<
35
37
  >;
36
38
 
37
39
  interface ScreenAnimationPipeline {
38
- interpolatorUpdatesEnabled: boolean;
39
40
  screenInterpolatorProps: SharedValue<ScreenInterpolatorFrame>;
40
41
  screenInterpolatorPropsRevision: DerivedValue<number>;
41
42
  selectedInterpolatorOptions: SharedValue<SelectedInterpolatorOptions>;
@@ -214,6 +215,8 @@ const hydrateInterpolatorFrame = <TFrame extends ScreenInterpolatorFrame>({
214
215
  prevAnimation,
215
216
  nextHasTransitions,
216
217
  interpolatorOptions,
218
+ stackProgressEntries,
219
+ currentRouteKey,
217
220
  }: {
218
221
  frame: TFrame;
219
222
  dimensions: ScreenInterpolatorFrame["layouts"]["screen"];
@@ -223,6 +226,8 @@ const hydrateInterpolatorFrame = <TFrame extends ScreenInterpolatorFrame>({
223
226
  prevAnimation: BuiltTransitionState | undefined;
224
227
  nextHasTransitions: boolean;
225
228
  interpolatorOptions: SelectedInterpolatorOptions;
229
+ stackProgressEntries: readonly StackProgressEntry[];
230
+ currentRouteKey: string;
226
231
  }): TFrame => {
227
232
  "worklet";
228
233
  const shouldApplyOptionsToCurrent = interpolatorOptions.owner === "current";
@@ -230,12 +235,6 @@ const hydrateInterpolatorFrame = <TFrame extends ScreenInterpolatorFrame>({
230
235
  interpolatorOptions.owner === "next" &&
231
236
  !!nextAnimation &&
232
237
  nextHasTransitions;
233
- const previousCurrentProgress = currentAnimation?.visualProgress.get();
234
- const previousNextProgress =
235
- nextAnimation && nextHasTransitions
236
- ? nextAnimation.visualProgress.get()
237
- : undefined;
238
-
239
238
  frame.previous = prevAnimation
240
239
  ? hydrateTransitionState(prevAnimation, dimensions)
241
240
  : undefined;
@@ -262,45 +261,31 @@ const hydrateInterpolatorFrame = <TFrame extends ScreenInterpolatorFrame>({
262
261
 
263
262
  updateDerivations(frame);
264
263
 
265
- frame.stackProgress = resolveStackProgress(
266
- currentAnimation?.stackProgress,
264
+ frame.stackProgress = readStackProgress(
265
+ stackProgressEntries,
266
+ currentRouteKey,
267
267
  frame.progress,
268
- frame.current.progress,
269
- previousCurrentProgress,
270
- frame.next?.progress,
271
- previousNextProgress,
272
268
  );
273
269
  frame.logicallySettled = frame.active.settled;
274
270
 
275
271
  return frame;
276
272
  };
277
273
 
278
- export function useScreenAnimationPipeline(
279
- parentInterpolatorUpdatesEnabled = true,
280
- ): ScreenAnimationPipeline {
274
+ export function useScreenAnimationPipeline(): ScreenAnimationPipeline {
281
275
  const transitionsAlwaysOn = useStack(
282
276
  (stack) => stack.flags.TRANSITIONS_ALWAYS_ON,
283
277
  );
284
278
  const dimensions = useWindowDimensions();
285
279
  const insets = useSafeAreaInsets();
280
+ const stackProgressEntries = useStackProgressEntries();
286
281
 
287
282
  const currDescriptor = useDescriptorsStore((store) => store.current);
288
283
  const nextDescriptor = useDescriptorsStore((store) => store.next);
289
284
  const prevDescriptor = useDescriptorsStore((store) => store.previous);
290
- const currentActivity = useStack((stack) => {
291
- const routeIndex = stack.routeKeys.indexOf(currDescriptor.route.key);
292
- return stack.scenes[routeIndex]?.activity;
293
- });
294
- const interpolatorUpdatesEnabled =
295
- parentInterpolatorUpdatesEnabled &&
296
- shouldUpdateScreenInterpolator(
297
- currentActivity ?? "active",
298
- currDescriptor.options.experimental_updateInactiveInterpolators === true,
299
- );
300
-
301
285
  const currentAnimation = useBuildTransitionState(currDescriptor);
302
286
  const nextAnimation = useBuildTransitionState(nextDescriptor);
303
287
  const prevAnimation = useBuildTransitionState(prevDescriptor);
288
+ const currentRouteKey = currDescriptor.route.key;
304
289
 
305
290
  const nextRouteKey = nextDescriptor?.route?.key;
306
291
  const nextHasTransitions =
@@ -326,50 +311,40 @@ export function useScreenAnimationPipeline(
326
311
  });
327
312
 
328
313
  const propsRevisionState = useSharedValue({ value: 0 });
329
- const screenInterpolatorPropsRevision = useDerivedValue<number>(
330
- interpolatorUpdatesEnabled
331
- ? () => {
332
- "worklet";
333
- screenInterpolatorProps.modify((frame) => {
334
- "worklet";
335
- const interpolatorOptions = selectedInterpolatorOptions.get();
336
- return hydrateInterpolatorFrame({
337
- frame,
338
- dimensions,
339
- insets,
340
- currentAnimation,
341
- nextAnimation,
342
- prevAnimation,
343
- nextHasTransitions,
344
- interpolatorOptions,
345
- });
346
- }, false);
347
-
348
- // Critical reactive dependency for `screenInterpolatorProps`.
349
- //
350
- // `screenInterpolatorProps` is mutated in place to avoid allocating a large
351
- // interpolator frame every tick. Consumers must read this revision before
352
- // reading `screenInterpolatorProps`, otherwise Reanimated may not subscribe
353
- // to frame updates and can observe stale transition state.
354
- propsRevisionState.modify((revision) => {
355
- "worklet";
356
- revision.value += 1;
357
- return revision;
358
- }, false);
359
-
360
- return propsRevisionState.get().value;
361
- }
362
- : () => {
363
- "worklet";
364
- return propsRevisionState.get().value;
365
- },
366
- );
314
+ const screenInterpolatorPropsRevision = useDerivedValue<number>(() => {
315
+ "worklet";
316
+ screenInterpolatorProps.modify((frame) => {
317
+ "worklet";
318
+ const interpolatorOptions = selectedInterpolatorOptions.get();
319
+ return hydrateInterpolatorFrame({
320
+ frame,
321
+ dimensions,
322
+ insets,
323
+ currentAnimation,
324
+ nextAnimation,
325
+ prevAnimation,
326
+ nextHasTransitions,
327
+ interpolatorOptions,
328
+ stackProgressEntries,
329
+ currentRouteKey,
330
+ });
331
+ }, false);
332
+
333
+ // `screenInterpolatorProps` is mutated in place. Consumers read this
334
+ // revision first so Reanimated subscribes to the hydrated frame.
335
+ propsRevisionState.modify((revision) => {
336
+ "worklet";
337
+ revision.value += 1;
338
+ return revision;
339
+ }, false);
340
+
341
+ return propsRevisionState.get().value;
342
+ });
367
343
 
368
344
  const nextInterpolator = nextDescriptor?.options.screenStyleInterpolator;
369
- const currentInterpolator = currDescriptor?.options.screenStyleInterpolator;
345
+ const currentInterpolator = currDescriptor.options.screenStyleInterpolator;
370
346
 
371
347
  return {
372
- interpolatorUpdatesEnabled,
373
348
  screenInterpolatorProps,
374
349
  screenInterpolatorPropsRevision,
375
350
  selectedInterpolatorOptions,
@@ -1,39 +1,15 @@
1
1
  import type { SharedValue } from "react-native-reanimated";
2
- import type {
3
- ScreenAnimationDescendantSources,
4
- ScreenAnimationSource,
5
- ScreenInterpolatorPropsRevision,
6
- } from "../types";
2
+ import type { ScreenAnimationTransitionSource } from "../types";
7
3
 
8
4
  type ScreenInterpolatorExternalDeps = Pick<SharedValue<unknown>, "get">[];
9
5
 
10
6
  export const readScreenAnimationRevisions = (
11
- screenInterpolatorPropsRevision: ScreenInterpolatorPropsRevision,
12
- ancestorScreenAnimationSources: ScreenAnimationSource[],
13
- descendantScreenAnimationSources: ScreenAnimationDescendantSources,
14
- screenInterpolatorExternalDeps?: ScreenInterpolatorExternalDeps,
7
+ sources: readonly ScreenAnimationTransitionSource[],
8
+ externalRevisions: ScreenInterpolatorExternalDeps = [],
15
9
  ) => {
16
10
  "worklet";
17
- screenInterpolatorPropsRevision.get();
18
-
19
- for (let index = 0; index < ancestorScreenAnimationSources.length; index++) {
20
- ancestorScreenAnimationSources[
21
- index
22
- ]?.screenInterpolatorPropsRevision.get();
23
- }
24
-
25
- const descendantSources = descendantScreenAnimationSources.get();
26
- for (let index = 0; index < descendantSources.length; index++) {
27
- descendantSources[index]?.source.screenInterpolatorPropsRevision.get();
28
- }
29
-
30
- if (screenInterpolatorExternalDeps) {
31
- for (
32
- let index = 0;
33
- index < screenInterpolatorExternalDeps.length;
34
- index++
35
- ) {
36
- screenInterpolatorExternalDeps[index]?.get();
37
- }
11
+ for (const source of sources) {
12
+ source.screenInterpolatorPropsRevision.get();
38
13
  }
14
+ for (const revision of externalRevisions) revision.get();
39
15
  };