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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js +1 -2
  2. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  3. package/lib/commonjs/shared/components/activity/helpers.js +50 -1
  4. package/lib/commonjs/shared/components/activity/helpers.js.map +1 -1
  5. package/lib/commonjs/shared/components/activity/variants/activity-screen.js +16 -67
  6. package/lib/commonjs/shared/components/activity/variants/activity-screen.js.map +1 -1
  7. package/lib/commonjs/shared/components/boundary/components/boundary-target.js +1 -1
  8. package/lib/commonjs/shared/components/boundary/components/boundary-target.js.map +1 -1
  9. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js +2 -1
  10. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  11. package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +2 -4
  12. package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  13. package/lib/commonjs/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +1 -6
  14. package/lib/commonjs/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  15. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js +6 -6
  16. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js.map +1 -1
  17. package/lib/commonjs/shared/components/overlay/helpers/create-overlay-interpolator-frame.js +9 -2
  18. package/lib/commonjs/shared/components/overlay/helpers/create-overlay-interpolator-frame.js.map +1 -1
  19. package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js +16 -4
  20. package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
  21. package/lib/commonjs/shared/components/overlay/hooks/use-overlay-slot.js +11 -6
  22. package/lib/commonjs/shared/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  23. package/lib/commonjs/shared/components/overlay/variations/overlay-host.js +5 -4
  24. package/lib/commonjs/shared/components/overlay/variations/overlay-host.js.map +1 -1
  25. package/lib/commonjs/shared/components/screen-container/layers/content.js +1 -3
  26. package/lib/commonjs/shared/components/screen-container/layers/content.js.map +1 -1
  27. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -6
  28. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  29. package/lib/commonjs/shared/factories/screen-topology/create-screen-topology.js +147 -0
  30. package/lib/commonjs/shared/factories/screen-topology/create-screen-topology.js.map +1 -0
  31. package/lib/commonjs/shared/factories/screen-topology/index.js +45 -0
  32. package/lib/commonjs/shared/factories/screen-topology/index.js.map +1 -0
  33. package/lib/commonjs/shared/factories/screen-topology/types.js +2 -0
  34. package/lib/commonjs/shared/factories/screen-topology/types.js.map +1 -0
  35. package/lib/commonjs/shared/factories/screen-topology/use-screen-relationships.js +15 -0
  36. package/lib/commonjs/shared/factories/screen-topology/use-screen-relationships.js.map +1 -0
  37. package/lib/commonjs/shared/factories/screen-topology/worklet.js +55 -0
  38. package/lib/commonjs/shared/factories/screen-topology/worklet.js.map +1 -0
  39. package/lib/commonjs/shared/hooks/navigation/use-screen-state.js.map +1 -1
  40. package/lib/commonjs/shared/hooks/navigation/use-stack.js +16 -16
  41. package/lib/commonjs/shared/hooks/navigation/use-stack.js.map +1 -1
  42. package/lib/commonjs/shared/providers/screen/animation/animation.provider.js +26 -98
  43. package/lib/commonjs/shared/providers/screen/animation/animation.provider.js.map +1 -1
  44. package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +6 -52
  45. package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
  46. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js +14 -25
  47. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  48. package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +4 -13
  49. package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -1
  50. package/lib/commonjs/shared/providers/screen/animation/helpers/stack-progress.js +10 -26
  51. package/lib/commonjs/shared/providers/screen/animation/helpers/stack-progress.js.map +1 -1
  52. package/lib/commonjs/shared/providers/screen/animation/helpers/use-build-transition-state.js +0 -1
  53. package/lib/commonjs/shared/providers/screen/animation/helpers/use-build-transition-state.js.map +1 -1
  54. package/lib/commonjs/shared/providers/screen/animation/index.js +6 -0
  55. package/lib/commonjs/shared/providers/screen/animation/index.js.map +1 -1
  56. package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js +8 -7
  57. package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
  58. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js +40 -25
  59. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  60. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js +1 -4
  61. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js.map +1 -1
  62. package/lib/commonjs/shared/providers/screen/gestures/gestures.provider.js +24 -19
  63. package/lib/commonjs/shared/providers/screen/gestures/gestures.provider.js.map +1 -1
  64. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -3
  65. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  66. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture.js +2 -3
  67. package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  68. package/lib/commonjs/shared/providers/screen/gestures/index.js +8 -2
  69. package/lib/commonjs/shared/providers/screen/gestures/index.js.map +1 -1
  70. package/lib/commonjs/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js +11 -18
  71. package/lib/commonjs/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +1 -1
  72. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js +5 -7
  73. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  74. package/lib/commonjs/shared/providers/screen/gestures/pan/activation/use-pan-activation.js +4 -1
  75. package/lib/commonjs/shared/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  76. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js +5 -8
  77. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js.map +1 -1
  78. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +5 -4
  79. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  80. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +1 -3
  81. package/lib/commonjs/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +1 -1
  82. package/lib/commonjs/shared/providers/screen/gestures/shared/policy.js +4 -4
  83. package/lib/commonjs/shared/providers/screen/gestures/shared/policy.js.map +1 -1
  84. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js +4 -2
  85. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
  86. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +5 -8
  87. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  88. package/lib/commonjs/shared/providers/screen/styles/index.js +8 -2
  89. package/lib/commonjs/shared/providers/screen/styles/index.js.map +1 -1
  90. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js +17 -19
  91. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js.map +1 -1
  92. package/lib/commonjs/shared/providers/screen/use-current-screen-relationships.js +14 -0
  93. package/lib/commonjs/shared/providers/screen/use-current-screen-relationships.js.map +1 -0
  94. package/lib/commonjs/shared/providers/stack/blank-stack.provider.js +13 -5
  95. package/lib/commonjs/shared/providers/stack/blank-stack.provider.js.map +1 -1
  96. package/lib/commonjs/shared/providers/stack/core.provider.js +1 -3
  97. package/lib/commonjs/shared/providers/stack/core.provider.js.map +1 -1
  98. package/lib/commonjs/shared/providers/stack/direct.provider.js +2 -5
  99. package/lib/commonjs/shared/providers/stack/direct.provider.js.map +1 -1
  100. package/lib/commonjs/shared/stores/animation.store.js +0 -2
  101. package/lib/commonjs/shared/stores/animation.store.js.map +1 -1
  102. package/lib/commonjs/shared/stores/bounds/internals/coordinator.js +23 -9
  103. package/lib/commonjs/shared/stores/bounds/internals/coordinator.js.map +1 -1
  104. package/lib/commonjs/shared/stores/bounds/internals/links.js +2 -2
  105. package/lib/commonjs/shared/stores/bounds/internals/links.js.map +1 -1
  106. package/lib/commonjs/shared/stores/bounds/internals/state.js +1 -1
  107. package/lib/commonjs/shared/utils/create-provider.js +51 -100
  108. package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
  109. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js +1 -2
  110. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  111. package/lib/module/shared/components/activity/helpers.js +48 -0
  112. package/lib/module/shared/components/activity/helpers.js.map +1 -1
  113. package/lib/module/shared/components/activity/variants/activity-screen.js +17 -68
  114. package/lib/module/shared/components/activity/variants/activity-screen.js.map +1 -1
  115. package/lib/module/shared/components/boundary/components/boundary-target.js +2 -2
  116. package/lib/module/shared/components/boundary/components/boundary-target.js.map +1 -1
  117. package/lib/module/shared/components/boundary/hooks/use-measurer.js +3 -2
  118. package/lib/module/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  119. package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +3 -5
  120. package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  121. package/lib/module/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +2 -7
  122. package/lib/module/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  123. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js +5 -6
  124. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js.map +1 -1
  125. package/lib/module/shared/components/overlay/helpers/create-overlay-interpolator-frame.js +7 -1
  126. package/lib/module/shared/components/overlay/helpers/create-overlay-interpolator-frame.js.map +1 -1
  127. package/lib/module/shared/components/overlay/helpers/get-active-overlay.js +16 -4
  128. package/lib/module/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
  129. package/lib/module/shared/components/overlay/hooks/use-overlay-slot.js +12 -7
  130. package/lib/module/shared/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  131. package/lib/module/shared/components/overlay/variations/overlay-host.js +7 -6
  132. package/lib/module/shared/components/overlay/variations/overlay-host.js.map +1 -1
  133. package/lib/module/shared/components/screen-container/layers/content.js +2 -3
  134. package/lib/module/shared/components/screen-container/layers/content.js.map +1 -1
  135. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +9 -7
  136. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  137. package/lib/module/shared/factories/screen-topology/create-screen-topology.js +142 -0
  138. package/lib/module/shared/factories/screen-topology/create-screen-topology.js.map +1 -0
  139. package/lib/module/shared/factories/screen-topology/index.js +6 -0
  140. package/lib/module/shared/factories/screen-topology/index.js.map +1 -0
  141. package/lib/module/shared/factories/screen-topology/types.js +2 -0
  142. package/lib/module/shared/factories/screen-topology/types.js.map +1 -0
  143. package/lib/module/shared/factories/screen-topology/use-screen-relationships.js +10 -0
  144. package/lib/module/shared/factories/screen-topology/use-screen-relationships.js.map +1 -0
  145. package/lib/module/shared/factories/screen-topology/worklet.js +48 -0
  146. package/lib/module/shared/factories/screen-topology/worklet.js.map +1 -0
  147. package/lib/module/shared/hooks/navigation/use-screen-state.js.map +1 -1
  148. package/lib/module/shared/hooks/navigation/use-stack.js +17 -18
  149. package/lib/module/shared/hooks/navigation/use-stack.js.map +1 -1
  150. package/lib/module/shared/providers/screen/animation/animation.provider.js +25 -98
  151. package/lib/module/shared/providers/screen/animation/animation.provider.js.map +1 -1
  152. package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +6 -52
  153. package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
  154. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js +16 -27
  155. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  156. package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +4 -13
  157. package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -1
  158. package/lib/module/shared/providers/screen/animation/helpers/stack-progress.js +9 -24
  159. package/lib/module/shared/providers/screen/animation/helpers/stack-progress.js.map +1 -1
  160. package/lib/module/shared/providers/screen/animation/helpers/use-build-transition-state.js +0 -1
  161. package/lib/module/shared/providers/screen/animation/helpers/use-build-transition-state.js.map +1 -1
  162. package/lib/module/shared/providers/screen/animation/index.js +1 -1
  163. package/lib/module/shared/providers/screen/animation/index.js.map +1 -1
  164. package/lib/module/shared/providers/screen/animation/use-screen-animation.js +9 -8
  165. package/lib/module/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
  166. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js +43 -27
  167. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  168. package/lib/module/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js +1 -4
  169. package/lib/module/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js.map +1 -1
  170. package/lib/module/shared/providers/screen/gestures/gestures.provider.js +21 -17
  171. package/lib/module/shared/providers/screen/gestures/gestures.provider.js.map +1 -1
  172. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -3
  173. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  174. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture.js +3 -4
  175. package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  176. package/lib/module/shared/providers/screen/gestures/index.js +1 -1
  177. package/lib/module/shared/providers/screen/gestures/index.js.map +1 -1
  178. package/lib/module/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js +13 -20
  179. package/lib/module/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +1 -1
  180. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js +5 -7
  181. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  182. package/lib/module/shared/providers/screen/gestures/pan/activation/use-pan-activation.js +4 -1
  183. package/lib/module/shared/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  184. package/lib/module/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js +4 -8
  185. package/lib/module/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.js.map +1 -1
  186. package/lib/module/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +7 -6
  187. package/lib/module/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  188. package/lib/module/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +1 -3
  189. package/lib/module/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +1 -1
  190. package/lib/module/shared/providers/screen/gestures/shared/policy.js +4 -4
  191. package/lib/module/shared/providers/screen/gestures/shared/policy.js.map +1 -1
  192. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js +5 -3
  193. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
  194. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +5 -8
  195. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  196. package/lib/module/shared/providers/screen/styles/index.js +1 -1
  197. package/lib/module/shared/providers/screen/styles/index.js.map +1 -1
  198. package/lib/module/shared/providers/screen/styles/slot.provider.js +14 -16
  199. package/lib/module/shared/providers/screen/styles/slot.provider.js.map +1 -1
  200. package/lib/module/shared/providers/screen/use-current-screen-relationships.js +9 -0
  201. package/lib/module/shared/providers/screen/use-current-screen-relationships.js.map +1 -0
  202. package/lib/module/shared/providers/stack/blank-stack.provider.js +12 -5
  203. package/lib/module/shared/providers/stack/blank-stack.provider.js.map +1 -1
  204. package/lib/module/shared/providers/stack/core.provider.js +1 -3
  205. package/lib/module/shared/providers/stack/core.provider.js.map +1 -1
  206. package/lib/module/shared/providers/stack/direct.provider.js +2 -5
  207. package/lib/module/shared/providers/stack/direct.provider.js.map +1 -1
  208. package/lib/module/shared/stores/animation.store.js +0 -2
  209. package/lib/module/shared/stores/animation.store.js.map +1 -1
  210. package/lib/module/shared/stores/bounds/internals/coordinator.js +18 -4
  211. package/lib/module/shared/stores/bounds/internals/coordinator.js.map +1 -1
  212. package/lib/module/shared/stores/bounds/internals/links.js +1 -1
  213. package/lib/module/shared/stores/bounds/internals/links.js.map +1 -1
  214. package/lib/module/shared/stores/bounds/internals/state.js +1 -1
  215. package/lib/module/shared/utils/create-provider.js +51 -100
  216. package/lib/module/shared/utils/create-provider.js.map +1 -1
  217. package/lib/typescript/native-stack/views/useHeaderConfigProps.d.ts +1 -1
  218. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -1
  219. package/lib/typescript/shared/components/activity/helpers.d.ts +16 -0
  220. package/lib/typescript/shared/components/activity/helpers.d.ts.map +1 -1
  221. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts +2 -4
  222. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -1
  223. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts.map +1 -1
  224. package/lib/typescript/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts.map +1 -1
  225. package/lib/typescript/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts.map +1 -1
  226. package/lib/typescript/shared/components/boundary/portal/components/boundary-portal/hooks/use-placeholder-styles.d.ts +2 -2
  227. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts +3 -0
  228. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts.map +1 -1
  229. package/lib/typescript/shared/components/create-transition-aware-component.d.ts +6 -5
  230. package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
  231. package/lib/typescript/shared/components/overlay/helpers/create-overlay-interpolator-frame.d.ts +1 -0
  232. package/lib/typescript/shared/components/overlay/helpers/create-overlay-interpolator-frame.d.ts.map +1 -1
  233. package/lib/typescript/shared/components/overlay/helpers/get-active-overlay.d.ts.map +1 -1
  234. package/lib/typescript/shared/components/overlay/hooks/use-overlay-slot.d.ts +3 -2
  235. package/lib/typescript/shared/components/overlay/hooks/use-overlay-slot.d.ts.map +1 -1
  236. package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts.map +1 -1
  237. package/lib/typescript/shared/components/screen-container/layers/content.d.ts.map +1 -1
  238. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts +1 -1
  239. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts.map +1 -1
  240. package/lib/typescript/shared/factories/screen-topology/create-screen-topology.d.ts +4 -0
  241. package/lib/typescript/shared/factories/screen-topology/create-screen-topology.d.ts.map +1 -0
  242. package/lib/typescript/shared/factories/screen-topology/index.d.ts +5 -0
  243. package/lib/typescript/shared/factories/screen-topology/index.d.ts.map +1 -0
  244. package/lib/typescript/shared/factories/screen-topology/types.d.ts +20 -0
  245. package/lib/typescript/shared/factories/screen-topology/types.d.ts.map +1 -0
  246. package/lib/typescript/shared/factories/screen-topology/use-screen-relationships.d.ts +5 -0
  247. package/lib/typescript/shared/factories/screen-topology/use-screen-relationships.d.ts.map +1 -0
  248. package/lib/typescript/shared/factories/screen-topology/worklet.d.ts +5 -0
  249. package/lib/typescript/shared/factories/screen-topology/worklet.d.ts.map +1 -0
  250. package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts.map +1 -1
  251. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +2 -0
  252. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
  253. package/lib/typescript/shared/index.d.ts +703 -651
  254. package/lib/typescript/shared/index.d.ts.map +1 -1
  255. package/lib/typescript/shared/providers/screen/animation/animation.provider.d.ts +14 -12
  256. package/lib/typescript/shared/providers/screen/animation/animation.provider.d.ts.map +1 -1
  257. package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts +4 -4
  258. package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts.map +1 -1
  259. package/lib/typescript/shared/providers/screen/animation/helpers/hydrate-transition-state/types.d.ts +0 -1
  260. package/lib/typescript/shared/providers/screen/animation/helpers/hydrate-transition-state/types.d.ts.map +1 -1
  261. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts +1 -2
  262. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  263. package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts +2 -2
  264. package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts.map +1 -1
  265. package/lib/typescript/shared/providers/screen/animation/helpers/stack-progress.d.ts +5 -2
  266. package/lib/typescript/shared/providers/screen/animation/helpers/stack-progress.d.ts.map +1 -1
  267. package/lib/typescript/shared/providers/screen/animation/helpers/use-build-transition-state.d.ts +0 -1
  268. package/lib/typescript/shared/providers/screen/animation/helpers/use-build-transition-state.d.ts.map +1 -1
  269. package/lib/typescript/shared/providers/screen/animation/index.d.ts +1 -1
  270. package/lib/typescript/shared/providers/screen/animation/index.d.ts.map +1 -1
  271. package/lib/typescript/shared/providers/screen/animation/types.d.ts +1 -13
  272. package/lib/typescript/shared/providers/screen/animation/types.d.ts.map +1 -1
  273. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts +5 -2
  274. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  275. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.d.ts +1 -4
  276. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.d.ts.map +1 -1
  277. package/lib/typescript/shared/providers/screen/gestures/gestures.provider.d.ts +16 -4
  278. package/lib/typescript/shared/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
  279. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts +2 -2
  280. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts.map +1 -1
  281. package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture.d.ts.map +1 -1
  282. package/lib/typescript/shared/providers/screen/gestures/index.d.ts +1 -1
  283. package/lib/typescript/shared/providers/screen/gestures/index.d.ts.map +1 -1
  284. package/lib/typescript/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts.map +1 -1
  285. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts +2 -3
  286. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +1 -1
  287. package/lib/typescript/shared/providers/screen/gestures/pan/activation/use-pan-activation.d.ts.map +1 -1
  288. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.d.ts +5 -3
  289. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.d.ts.map +1 -1
  290. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.d.ts.map +1 -1
  291. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts +2 -2
  292. package/lib/typescript/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts.map +1 -1
  293. package/lib/typescript/shared/providers/screen/gestures/shared/policy.d.ts +3 -3
  294. package/lib/typescript/shared/providers/screen/gestures/shared/policy.d.ts.map +1 -1
  295. package/lib/typescript/shared/providers/screen/gestures/types.d.ts +4 -2
  296. package/lib/typescript/shared/providers/screen/gestures/types.d.ts.map +1 -1
  297. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts +4 -4
  298. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -1
  299. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  300. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +2 -2
  301. package/lib/typescript/shared/providers/screen/styles/index.d.ts +1 -1
  302. package/lib/typescript/shared/providers/screen/styles/index.d.ts.map +1 -1
  303. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts +9 -4
  304. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts.map +1 -1
  305. package/lib/typescript/shared/providers/screen/use-current-screen-relationships.d.ts +5 -0
  306. package/lib/typescript/shared/providers/screen/use-current-screen-relationships.d.ts.map +1 -0
  307. package/lib/typescript/shared/providers/stack/blank-stack.provider.d.ts +4 -1
  308. package/lib/typescript/shared/providers/stack/blank-stack.provider.d.ts.map +1 -1
  309. package/lib/typescript/shared/providers/stack/core.provider.d.ts.map +1 -1
  310. package/lib/typescript/shared/providers/stack/direct.provider.d.ts.map +1 -1
  311. package/lib/typescript/shared/stores/animation.store.d.ts +0 -1
  312. package/lib/typescript/shared/stores/animation.store.d.ts.map +1 -1
  313. package/lib/typescript/shared/stores/bounds/internals/coordinator.d.ts.map +1 -1
  314. package/lib/typescript/shared/stores/bounds/internals/links.d.ts.map +1 -1
  315. package/lib/typescript/shared/stores/bounds/internals/state.d.ts +1 -1
  316. package/lib/typescript/shared/stores/bounds/internals/state.d.ts.map +1 -1
  317. package/lib/typescript/shared/stores/bounds/types.d.ts +0 -1
  318. package/lib/typescript/shared/stores/bounds/types.d.ts.map +1 -1
  319. package/lib/typescript/shared/types/providers/blank-stack-provider.types.d.ts +1 -0
  320. package/lib/typescript/shared/types/providers/blank-stack-provider.types.d.ts.map +1 -1
  321. package/lib/typescript/shared/types/screen.types.d.ts +0 -9
  322. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  323. package/lib/typescript/shared/utils/create-provider.d.ts +24 -24
  324. package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
  325. package/package.json +1 -1
  326. package/src/shared/adapters/with-screen-transitions/stack-layout.tsx +1 -2
  327. package/src/shared/components/activity/helpers.ts +59 -0
  328. package/src/shared/components/activity/variants/activity-screen.tsx +28 -93
  329. package/src/shared/components/boundary/components/boundary-target.tsx +2 -2
  330. package/src/shared/components/boundary/hooks/use-measurer.ts +3 -2
  331. package/src/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.ts +6 -3
  332. package/src/shared/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.ts +2 -6
  333. package/src/shared/components/boundary/providers/boundary-root.provider.tsx +10 -6
  334. package/src/shared/components/overlay/helpers/create-overlay-interpolator-frame.ts +14 -1
  335. package/src/shared/components/overlay/helpers/get-active-overlay.ts +29 -4
  336. package/src/shared/components/overlay/hooks/use-overlay-slot.ts +26 -8
  337. package/src/shared/components/overlay/variations/overlay-host.tsx +11 -6
  338. package/src/shared/components/screen-container/layers/content.tsx +3 -4
  339. package/src/shared/components/screen-lifecycle/hooks/use-close-transition-intent.ts +8 -12
  340. package/src/shared/factories/screen-topology/create-screen-topology.ts +199 -0
  341. package/src/shared/factories/screen-topology/index.ts +16 -0
  342. package/src/shared/factories/screen-topology/types.ts +22 -0
  343. package/src/shared/factories/screen-topology/use-screen-relationships.ts +15 -0
  344. package/src/shared/factories/screen-topology/worklet.ts +60 -0
  345. package/src/shared/hooks/navigation/use-screen-state.ts +2 -7
  346. package/src/shared/hooks/navigation/use-stack.tsx +28 -31
  347. package/src/shared/providers/screen/animation/animation.provider.tsx +73 -212
  348. package/src/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +10 -81
  349. package/src/shared/providers/screen/animation/helpers/hydrate-transition-state/types.ts +0 -1
  350. package/src/shared/providers/screen/animation/helpers/pipeline.ts +45 -70
  351. package/src/shared/providers/screen/animation/helpers/read-screen-animation-revisions.ts +6 -30
  352. package/src/shared/providers/screen/animation/helpers/stack-progress.ts +13 -32
  353. package/src/shared/providers/screen/animation/helpers/use-build-transition-state.ts +0 -2
  354. package/src/shared/providers/screen/animation/index.tsx +1 -0
  355. package/src/shared/providers/screen/animation/types.ts +1 -23
  356. package/src/shared/providers/screen/animation/use-screen-animation.tsx +10 -14
  357. package/src/shared/providers/screen/descriptors/descriptors.provider.tsx +56 -35
  358. package/src/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.ts +0 -6
  359. package/src/shared/providers/screen/gestures/gestures.provider.tsx +96 -85
  360. package/src/shared/providers/screen/gestures/hooks/use-screen-gesture-config.ts +4 -4
  361. package/src/shared/providers/screen/gestures/hooks/use-screen-gesture.ts +3 -4
  362. package/src/shared/providers/screen/gestures/index.tsx +2 -1
  363. package/src/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.tsx +16 -29
  364. package/src/shared/providers/screen/gestures/ownership/resolve-ownership.ts +5 -8
  365. package/src/shared/providers/screen/gestures/pan/activation/use-pan-activation.ts +2 -3
  366. package/src/shared/providers/screen/gestures/scroll-coordination/scroll-metadata-owner.tsx +6 -9
  367. package/src/shared/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.ts +11 -7
  368. package/src/shared/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.ts +12 -12
  369. package/src/shared/providers/screen/gestures/shared/policy.ts +7 -7
  370. package/src/shared/providers/screen/gestures/types.ts +5 -2
  371. package/src/shared/providers/screen/styles/hooks/slot-resolvers.tsx +10 -3
  372. package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +7 -17
  373. package/src/shared/providers/screen/styles/index.tsx +2 -1
  374. package/src/shared/providers/screen/styles/slot.provider.tsx +25 -24
  375. package/src/shared/providers/screen/use-current-screen-relationships.ts +10 -0
  376. package/src/shared/providers/stack/blank-stack.provider.tsx +19 -6
  377. package/src/shared/providers/stack/core.provider.tsx +0 -1
  378. package/src/shared/providers/stack/direct.provider.tsx +2 -4
  379. package/src/shared/stores/animation.store.ts +0 -3
  380. package/src/shared/stores/bounds/internals/coordinator.ts +20 -8
  381. package/src/shared/stores/bounds/internals/links.ts +1 -1
  382. package/src/shared/stores/bounds/internals/state.ts +1 -1
  383. package/src/shared/stores/bounds/types.ts +0 -1
  384. package/src/shared/types/providers/blank-stack-provider.types.ts +1 -0
  385. package/src/shared/types/screen.types.ts +0 -10
  386. package/src/shared/utils/create-provider.tsx +135 -200
  387. package/lib/commonjs/shared/providers/screen/animation/helpers/interpolator-participation.js +0 -9
  388. package/lib/commonjs/shared/providers/screen/animation/helpers/interpolator-participation.js.map +0 -1
  389. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js +0 -12
  390. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js.map +0 -1
  391. package/lib/commonjs/shared/providers/screen/gestures/shared/ancestors.js +0 -23
  392. package/lib/commonjs/shared/providers/screen/gestures/shared/ancestors.js.map +0 -1
  393. package/lib/commonjs/shared/stores/bounds/internals/screen-graph.js +0 -45
  394. package/lib/commonjs/shared/stores/bounds/internals/screen-graph.js.map +0 -1
  395. package/lib/module/shared/providers/screen/animation/helpers/interpolator-participation.js +0 -4
  396. package/lib/module/shared/providers/screen/animation/helpers/interpolator-participation.js.map +0 -1
  397. package/lib/module/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js +0 -7
  398. package/lib/module/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.js.map +0 -1
  399. package/lib/module/shared/providers/screen/gestures/shared/ancestors.js +0 -19
  400. package/lib/module/shared/providers/screen/gestures/shared/ancestors.js.map +0 -1
  401. package/lib/module/shared/stores/bounds/internals/screen-graph.js +0 -39
  402. package/lib/module/shared/stores/bounds/internals/screen-graph.js.map +0 -1
  403. package/lib/typescript/shared/providers/screen/animation/helpers/interpolator-participation.d.ts +0 -3
  404. package/lib/typescript/shared/providers/screen/animation/helpers/interpolator-participation.d.ts.map +0 -1
  405. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.d.ts +0 -5
  406. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.d.ts.map +0 -1
  407. package/lib/typescript/shared/providers/screen/gestures/shared/ancestors.d.ts +0 -11
  408. package/lib/typescript/shared/providers/screen/gestures/shared/ancestors.d.ts.map +0 -1
  409. package/lib/typescript/shared/stores/bounds/internals/screen-graph.d.ts +0 -5
  410. package/lib/typescript/shared/stores/bounds/internals/screen-graph.d.ts.map +0 -1
  411. package/src/shared/providers/screen/animation/helpers/interpolator-participation.ts +0 -6
  412. package/src/shared/providers/screen/descriptors/helpers/derive-structural-ancestor-keys.ts +0 -13
  413. package/src/shared/providers/screen/gestures/shared/ancestors.ts +0 -27
  414. package/src/shared/stores/bounds/internals/screen-graph.ts +0 -45
@@ -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
  };
@@ -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
  }