react-native-screen-transitions 4.0.0 → 4.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/lib/commonjs/adapters/with-screen-transitions/stack-layout.js +1 -3
  2. package/lib/commonjs/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  3. package/lib/commonjs/components/blank-stack-host.js +21 -0
  4. package/lib/commonjs/components/blank-stack-host.js.map +1 -0
  5. package/lib/commonjs/components/blank-stack-runtime.js +33 -0
  6. package/lib/commonjs/components/blank-stack-runtime.js.map +1 -0
  7. package/lib/commonjs/components/blank-stack-scene.js +31 -0
  8. package/lib/commonjs/components/blank-stack-scene.js.map +1 -0
  9. package/lib/commonjs/components/blank-stack-view.js +23 -0
  10. package/lib/commonjs/components/blank-stack-view.js.map +1 -0
  11. package/lib/commonjs/components/overlay/helpers/run-overlay-slot-interpolator.js +2 -4
  12. package/lib/commonjs/components/overlay/helpers/run-overlay-slot-interpolator.js.map +1 -1
  13. package/lib/commonjs/components/overlay/hooks/use-overlay-slot.js +1 -16
  14. package/lib/commonjs/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  15. package/lib/commonjs/components/overlay/variations/overlay-host.js +0 -1
  16. package/lib/commonjs/components/overlay/variations/overlay-host.js.map +1 -1
  17. package/lib/commonjs/components/screen-lifecycle/index.js +2 -2
  18. package/lib/commonjs/components/screen-lifecycle/index.js.map +1 -1
  19. package/lib/commonjs/custom-navigator.js +41 -0
  20. package/lib/commonjs/custom-navigator.js.map +1 -0
  21. package/lib/commonjs/hooks/navigation/use-blank-stack-state.js +26 -0
  22. package/lib/commonjs/hooks/navigation/use-blank-stack-state.js.map +1 -0
  23. package/lib/commonjs/hooks/navigation/use-navigation-helpers.js +2 -2
  24. package/lib/commonjs/hooks/navigation/use-navigation-helpers.js.map +1 -1
  25. package/lib/commonjs/hooks/navigation/use-screen-state.js +1 -1
  26. package/lib/commonjs/hooks/navigation/use-screen-state.js.map +1 -1
  27. package/lib/commonjs/providers/screen/animation/animation.provider.js +11 -24
  28. package/lib/commonjs/providers/screen/animation/animation.provider.js.map +1 -1
  29. package/lib/commonjs/providers/screen/animation/helpers/pipeline.js +19 -36
  30. package/lib/commonjs/providers/screen/animation/helpers/pipeline.js.map +1 -1
  31. package/lib/commonjs/providers/screen/animation/use-screen-animation.js +16 -12
  32. package/lib/commonjs/providers/screen/animation/use-screen-animation.js.map +1 -1
  33. package/lib/commonjs/providers/screen/descriptors/descriptors.provider.js +31 -64
  34. package/lib/commonjs/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  35. package/lib/commonjs/providers/screen/descriptors/index.js +6 -0
  36. package/lib/commonjs/providers/screen/descriptors/index.js.map +1 -1
  37. package/lib/commonjs/providers/screen/gestures/gestures.provider.js +14 -25
  38. package/lib/commonjs/providers/screen/gestures/gestures.provider.js.map +1 -1
  39. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -4
  40. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  41. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture.js +6 -7
  42. package/lib/commonjs/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  43. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-coordinator.js +149 -0
  44. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-coordinator.js.map +1 -0
  45. package/lib/commonjs/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js +15 -0
  46. package/lib/commonjs/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js.map +1 -0
  47. package/lib/commonjs/providers/screen/gestures/ownership/use-register-gesture-ownership.js +52 -0
  48. package/lib/commonjs/providers/screen/gestures/ownership/use-register-gesture-ownership.js.map +1 -0
  49. package/lib/commonjs/providers/screen/gestures/pan/activation/pan-activation-decision.js +4 -9
  50. package/lib/commonjs/providers/screen/gestures/pan/activation/pan-activation-decision.js.map +1 -1
  51. package/lib/commonjs/providers/screen/gestures/pan/activation/use-pan-activation.js +3 -3
  52. package/lib/commonjs/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  53. package/lib/commonjs/providers/screen/gestures/pan/use-build-pan-gesture.js +2 -2
  54. package/lib/commonjs/providers/screen/gestures/pan/use-build-pan-gesture.js.map +1 -1
  55. package/lib/commonjs/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +13 -11
  56. package/lib/commonjs/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  57. package/lib/commonjs/providers/screen/gestures/shared/policy.js +4 -9
  58. package/lib/commonjs/providers/screen/gestures/shared/policy.js.map +1 -1
  59. package/lib/commonjs/providers/screen/gestures/types.js +2 -2
  60. package/lib/commonjs/providers/screen/gestures/types.js.map +1 -1
  61. package/lib/commonjs/providers/screen/screen-composer.js +10 -13
  62. package/lib/commonjs/providers/screen/screen-composer.js.map +1 -1
  63. package/lib/commonjs/providers/screen/styles/helpers/create-interpolator-scope.js +3 -15
  64. package/lib/commonjs/providers/screen/styles/helpers/create-interpolator-scope.js.map +1 -1
  65. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js +4 -25
  66. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  67. package/lib/commonjs/providers/screen/topology/helpers/create-screen-topology.js +176 -0
  68. package/lib/commonjs/providers/screen/topology/helpers/create-screen-topology.js.map +1 -0
  69. package/lib/commonjs/providers/screen/topology/hooks/use-resolved-transition-key.js +17 -0
  70. package/lib/commonjs/providers/screen/topology/hooks/use-resolved-transition-key.js.map +1 -0
  71. package/lib/commonjs/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.js +1 -1
  72. package/lib/commonjs/providers/screen/topology/hooks/use-screen-relationships.js.map +1 -0
  73. package/lib/commonjs/{factories/screen-topology → providers/screen/topology}/index.js +16 -15
  74. package/lib/commonjs/providers/screen/topology/index.js.map +1 -0
  75. package/lib/commonjs/providers/screen/topology/topology.provider.js +56 -0
  76. package/lib/commonjs/providers/screen/topology/topology.provider.js.map +1 -0
  77. package/lib/commonjs/providers/screen/topology/types.js.map +1 -0
  78. package/lib/commonjs/providers/screen/use-current-screen-relationships.js +2 -2
  79. package/lib/commonjs/providers/screen/use-current-screen-relationships.js.map +1 -1
  80. package/lib/commonjs/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js +1 -1
  81. package/lib/commonjs/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js.map +1 -1
  82. package/lib/commonjs/providers/stack/blank-stack-state/helpers/state-equality.js +1 -1
  83. package/lib/commonjs/providers/stack/blank-stack-state/helpers/state-equality.js.map +1 -1
  84. package/lib/commonjs/providers/stack/stack-transition/index.js +20 -0
  85. package/lib/commonjs/providers/stack/stack-transition/index.js.map +1 -0
  86. package/lib/commonjs/providers/stack/stack-transition/stack-transition-controller.js +197 -0
  87. package/lib/commonjs/providers/stack/stack-transition/stack-transition-controller.js.map +1 -0
  88. package/lib/commonjs/providers/stack/stack-transition/stack-transition.provider.js +92 -0
  89. package/lib/commonjs/providers/stack/stack-transition/stack-transition.provider.js.map +1 -0
  90. package/lib/commonjs/providers/stack/stack-transition/use-stack-transition.js +46 -0
  91. package/lib/commonjs/providers/stack/stack-transition/use-stack-transition.js.map +1 -0
  92. package/lib/commonjs/types/ownership.types.js +2 -25
  93. package/lib/commonjs/types/ownership.types.js.map +1 -1
  94. package/lib/module/adapters/with-screen-transitions/stack-layout.js +1 -3
  95. package/lib/module/adapters/with-screen-transitions/stack-layout.js.map +1 -1
  96. package/lib/module/components/blank-stack-host.js +17 -0
  97. package/lib/module/components/blank-stack-host.js.map +1 -0
  98. package/lib/module/components/blank-stack-runtime.js +29 -0
  99. package/lib/module/components/blank-stack-runtime.js.map +1 -0
  100. package/lib/module/components/blank-stack-scene.js +27 -0
  101. package/lib/module/components/blank-stack-scene.js.map +1 -0
  102. package/lib/module/components/blank-stack-view.js +19 -0
  103. package/lib/module/components/blank-stack-view.js.map +1 -0
  104. package/lib/module/components/overlay/helpers/run-overlay-slot-interpolator.js +2 -4
  105. package/lib/module/components/overlay/helpers/run-overlay-slot-interpolator.js.map +1 -1
  106. package/lib/module/components/overlay/hooks/use-overlay-slot.js +1 -16
  107. package/lib/module/components/overlay/hooks/use-overlay-slot.js.map +1 -1
  108. package/lib/module/components/overlay/variations/overlay-host.js +0 -1
  109. package/lib/module/components/overlay/variations/overlay-host.js.map +1 -1
  110. package/lib/module/components/screen-lifecycle/index.js +2 -2
  111. package/lib/module/components/screen-lifecycle/index.js.map +1 -1
  112. package/lib/module/custom-navigator.js +8 -0
  113. package/lib/module/custom-navigator.js.map +1 -0
  114. package/lib/module/hooks/navigation/use-blank-stack-state.js +21 -0
  115. package/lib/module/hooks/navigation/use-blank-stack-state.js.map +1 -0
  116. package/lib/module/hooks/navigation/use-navigation-helpers.js +2 -2
  117. package/lib/module/hooks/navigation/use-navigation-helpers.js.map +1 -1
  118. package/lib/module/hooks/navigation/use-screen-state.js +1 -1
  119. package/lib/module/hooks/navigation/use-screen-state.js.map +1 -1
  120. package/lib/module/providers/screen/animation/animation.provider.js +11 -24
  121. package/lib/module/providers/screen/animation/animation.provider.js.map +1 -1
  122. package/lib/module/providers/screen/animation/helpers/pipeline.js +19 -36
  123. package/lib/module/providers/screen/animation/helpers/pipeline.js.map +1 -1
  124. package/lib/module/providers/screen/animation/use-screen-animation.js +17 -13
  125. package/lib/module/providers/screen/animation/use-screen-animation.js.map +1 -1
  126. package/lib/module/providers/screen/descriptors/descriptors.provider.js +31 -66
  127. package/lib/module/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  128. package/lib/module/providers/screen/descriptors/index.js +1 -1
  129. package/lib/module/providers/screen/descriptors/index.js.map +1 -1
  130. package/lib/module/providers/screen/gestures/gestures.provider.js +16 -27
  131. package/lib/module/providers/screen/gestures/gestures.provider.js.map +1 -1
  132. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture-config.js +3 -4
  133. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
  134. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture.js +6 -7
  135. package/lib/module/providers/screen/gestures/hooks/use-screen-gesture.js.map +1 -1
  136. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-coordinator.js +144 -0
  137. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-coordinator.js.map +1 -0
  138. package/lib/module/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js +10 -0
  139. package/lib/module/providers/screen/gestures/ownership/use-gesture-scroll-coordination.js.map +1 -0
  140. package/lib/module/providers/screen/gestures/ownership/use-register-gesture-ownership.js +47 -0
  141. package/lib/module/providers/screen/gestures/ownership/use-register-gesture-ownership.js.map +1 -0
  142. package/lib/module/providers/screen/gestures/pan/activation/pan-activation-decision.js +4 -9
  143. package/lib/module/providers/screen/gestures/pan/activation/pan-activation-decision.js.map +1 -1
  144. package/lib/module/providers/screen/gestures/pan/activation/use-pan-activation.js +3 -3
  145. package/lib/module/providers/screen/gestures/pan/activation/use-pan-activation.js.map +1 -1
  146. package/lib/module/providers/screen/gestures/pan/use-build-pan-gesture.js +2 -2
  147. package/lib/module/providers/screen/gestures/pan/use-build-pan-gesture.js.map +1 -1
  148. package/lib/module/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js +13 -11
  149. package/lib/module/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.js.map +1 -1
  150. package/lib/module/providers/screen/gestures/shared/policy.js +4 -9
  151. package/lib/module/providers/screen/gestures/shared/policy.js.map +1 -1
  152. package/lib/module/providers/screen/gestures/types.js +1 -1
  153. package/lib/module/providers/screen/gestures/types.js.map +1 -1
  154. package/lib/module/providers/screen/screen-composer.js +10 -13
  155. package/lib/module/providers/screen/screen-composer.js.map +1 -1
  156. package/lib/module/providers/screen/styles/helpers/create-interpolator-scope.js +3 -15
  157. package/lib/module/providers/screen/styles/helpers/create-interpolator-scope.js.map +1 -1
  158. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js +4 -25
  159. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  160. package/lib/module/providers/screen/topology/helpers/create-screen-topology.js +171 -0
  161. package/lib/module/providers/screen/topology/helpers/create-screen-topology.js.map +1 -0
  162. package/lib/module/providers/screen/topology/hooks/use-resolved-transition-key.js +12 -0
  163. package/lib/module/providers/screen/topology/hooks/use-resolved-transition-key.js.map +1 -0
  164. package/lib/module/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.js +1 -1
  165. package/lib/module/providers/screen/topology/hooks/use-screen-relationships.js.map +1 -0
  166. package/lib/module/providers/screen/topology/index.js +7 -0
  167. package/lib/module/providers/screen/topology/index.js.map +1 -0
  168. package/lib/module/providers/screen/topology/topology.provider.js +50 -0
  169. package/lib/module/providers/screen/topology/topology.provider.js.map +1 -0
  170. package/lib/module/providers/screen/topology/types.js.map +1 -0
  171. package/lib/module/providers/screen/use-current-screen-relationships.js +1 -1
  172. package/lib/module/providers/screen/use-current-screen-relationships.js.map +1 -1
  173. package/lib/module/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js +1 -1
  174. package/lib/module/providers/stack/blank-stack-state/helpers/build-blank-stack-state.js.map +1 -1
  175. package/lib/module/providers/stack/blank-stack-state/helpers/state-equality.js +1 -1
  176. package/lib/module/providers/stack/blank-stack-state/helpers/state-equality.js.map +1 -1
  177. package/lib/module/providers/stack/stack-transition/index.js +5 -0
  178. package/lib/module/providers/stack/stack-transition/index.js.map +1 -0
  179. package/lib/module/providers/stack/stack-transition/stack-transition-controller.js +189 -0
  180. package/lib/module/providers/stack/stack-transition/stack-transition-controller.js.map +1 -0
  181. package/lib/module/providers/stack/stack-transition/stack-transition.provider.js +85 -0
  182. package/lib/module/providers/stack/stack-transition/stack-transition.provider.js.map +1 -0
  183. package/lib/module/providers/stack/stack-transition/use-stack-transition.js +41 -0
  184. package/lib/module/providers/stack/stack-transition/use-stack-transition.js.map +1 -0
  185. package/lib/module/types/animation.types.js.map +1 -1
  186. package/lib/module/types/ownership.types.js +1 -24
  187. package/lib/module/types/ownership.types.js.map +1 -1
  188. package/lib/typescript/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -1
  189. package/lib/typescript/components/blank-stack-host.d.ts +9 -0
  190. package/lib/typescript/components/blank-stack-host.d.ts.map +1 -0
  191. package/lib/typescript/components/blank-stack-runtime.d.ts +8 -0
  192. package/lib/typescript/components/blank-stack-runtime.d.ts.map +1 -0
  193. package/lib/typescript/components/blank-stack-scene.d.ts +5 -0
  194. package/lib/typescript/components/blank-stack-scene.d.ts.map +1 -0
  195. package/lib/typescript/components/blank-stack-view.d.ts +2 -0
  196. package/lib/typescript/components/blank-stack-view.d.ts.map +1 -0
  197. package/lib/typescript/components/overlay/helpers/run-overlay-slot-interpolator.d.ts +2 -3
  198. package/lib/typescript/components/overlay/helpers/run-overlay-slot-interpolator.d.ts.map +1 -1
  199. package/lib/typescript/components/overlay/hooks/use-overlay-slot.d.ts.map +1 -1
  200. package/lib/typescript/custom-navigator.d.ts +8 -0
  201. package/lib/typescript/custom-navigator.d.ts.map +1 -0
  202. package/lib/typescript/hooks/navigation/use-blank-stack-state.d.ts +8 -0
  203. package/lib/typescript/hooks/navigation/use-blank-stack-state.d.ts.map +1 -0
  204. package/lib/typescript/hooks/navigation/use-navigation-helpers.d.ts.map +1 -1
  205. package/lib/typescript/index.d.ts +1 -1
  206. package/lib/typescript/index.d.ts.map +1 -1
  207. package/lib/typescript/providers/screen/animation/animation.provider.d.ts +2 -5
  208. package/lib/typescript/providers/screen/animation/animation.provider.d.ts.map +1 -1
  209. package/lib/typescript/providers/screen/animation/helpers/pipeline.d.ts +2 -4
  210. package/lib/typescript/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  211. package/lib/typescript/providers/screen/animation/types.d.ts +0 -9
  212. package/lib/typescript/providers/screen/animation/types.d.ts.map +1 -1
  213. package/lib/typescript/providers/screen/animation/use-screen-animation.d.ts.map +1 -1
  214. package/lib/typescript/providers/screen/descriptors/descriptors.provider.d.ts +9 -11
  215. package/lib/typescript/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  216. package/lib/typescript/providers/screen/descriptors/index.d.ts +1 -1
  217. package/lib/typescript/providers/screen/descriptors/index.d.ts.map +1 -1
  218. package/lib/typescript/providers/screen/gestures/gestures.provider.d.ts +9 -12
  219. package/lib/typescript/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
  220. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts +2 -2
  221. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts.map +1 -1
  222. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture.d.ts +3 -2
  223. package/lib/typescript/providers/screen/gestures/hooks/use-screen-gesture.d.ts.map +1 -1
  224. package/lib/typescript/providers/screen/gestures/index.d.ts +1 -1
  225. package/lib/typescript/providers/screen/gestures/index.d.ts.map +1 -1
  226. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-coordinator.d.ts +26 -0
  227. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-coordinator.d.ts.map +1 -0
  228. package/lib/typescript/providers/screen/gestures/ownership/use-gesture-scroll-coordination.d.ts +3 -0
  229. package/lib/typescript/providers/screen/gestures/ownership/use-gesture-scroll-coordination.d.ts.map +1 -0
  230. package/lib/typescript/providers/screen/gestures/ownership/use-register-gesture-ownership.d.ts +9 -0
  231. package/lib/typescript/providers/screen/gestures/ownership/use-register-gesture-ownership.d.ts.map +1 -0
  232. package/lib/typescript/providers/screen/gestures/pan/activation/pan-activation-decision.d.ts +4 -4
  233. package/lib/typescript/providers/screen/gestures/pan/activation/pan-activation-decision.d.ts.map +1 -1
  234. package/lib/typescript/providers/screen/gestures/pan/activation/use-pan-activation.d.ts +3 -3
  235. package/lib/typescript/providers/screen/gestures/pan/activation/use-pan-activation.d.ts.map +1 -1
  236. package/lib/typescript/providers/screen/gestures/pan/use-build-pan-gesture.d.ts +3 -3
  237. package/lib/typescript/providers/screen/gestures/pan/use-build-pan-gesture.d.ts.map +1 -1
  238. package/lib/typescript/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.d.ts.map +1 -1
  239. package/lib/typescript/providers/screen/gestures/shared/policy.d.ts +2 -3
  240. package/lib/typescript/providers/screen/gestures/shared/policy.d.ts.map +1 -1
  241. package/lib/typescript/providers/screen/gestures/types.d.ts +4 -18
  242. package/lib/typescript/providers/screen/gestures/types.d.ts.map +1 -1
  243. package/lib/typescript/providers/screen/screen-composer.d.ts +2 -6
  244. package/lib/typescript/providers/screen/screen-composer.d.ts.map +1 -1
  245. package/lib/typescript/providers/screen/styles/helpers/create-interpolator-scope.d.ts +2 -3
  246. package/lib/typescript/providers/screen/styles/helpers/create-interpolator-scope.d.ts.map +1 -1
  247. package/lib/typescript/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  248. package/lib/typescript/{factories/screen-topology → providers/screen/topology/helpers}/create-screen-topology.d.ts +1 -1
  249. package/lib/typescript/providers/screen/topology/helpers/create-screen-topology.d.ts.map +1 -0
  250. package/lib/typescript/providers/screen/topology/hooks/use-resolved-transition-key.d.ts +3 -0
  251. package/lib/typescript/providers/screen/topology/hooks/use-resolved-transition-key.d.ts.map +1 -0
  252. package/lib/typescript/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.d.ts +1 -0
  253. package/lib/typescript/providers/screen/topology/hooks/use-screen-relationships.d.ts.map +1 -0
  254. package/lib/typescript/providers/screen/topology/index.d.ts +6 -0
  255. package/lib/typescript/providers/screen/topology/index.d.ts.map +1 -0
  256. package/lib/typescript/providers/screen/topology/topology.provider.d.ts +13 -0
  257. package/lib/typescript/providers/screen/topology/topology.provider.d.ts.map +1 -0
  258. package/lib/typescript/{factories/screen-topology → providers/screen/topology}/types.d.ts +7 -1
  259. package/lib/typescript/providers/screen/topology/types.d.ts.map +1 -0
  260. package/lib/typescript/providers/screen/use-current-screen-relationships.d.ts +1 -0
  261. package/lib/typescript/providers/screen/use-current-screen-relationships.d.ts.map +1 -1
  262. package/lib/typescript/providers/stack/blank-stack-state/helpers/build-blank-stack-state.d.ts.map +1 -1
  263. package/lib/typescript/providers/stack/blank-stack-state/helpers/state-equality.d.ts.map +1 -1
  264. package/lib/typescript/providers/stack/stack-transition/index.d.ts +3 -0
  265. package/lib/typescript/providers/stack/stack-transition/index.d.ts.map +1 -0
  266. package/lib/typescript/providers/stack/stack-transition/stack-transition-controller.d.ts +48 -0
  267. package/lib/typescript/providers/stack/stack-transition/stack-transition-controller.d.ts.map +1 -0
  268. package/lib/typescript/providers/stack/stack-transition/stack-transition.provider.d.ts +14 -0
  269. package/lib/typescript/providers/stack/stack-transition/stack-transition.provider.d.ts.map +1 -0
  270. package/lib/typescript/providers/stack/stack-transition/use-stack-transition.d.ts +12 -0
  271. package/lib/typescript/providers/stack/stack-transition/use-stack-transition.d.ts.map +1 -0
  272. package/lib/typescript/types/animation.types.d.ts +1 -15
  273. package/lib/typescript/types/animation.types.d.ts.map +1 -1
  274. package/lib/typescript/types/bounds.types.d.ts +1 -1
  275. package/lib/typescript/types/bounds.types.d.ts.map +1 -1
  276. package/lib/typescript/types/index.d.ts +1 -1
  277. package/lib/typescript/types/index.d.ts.map +1 -1
  278. package/lib/typescript/types/ownership.types.d.ts +1 -18
  279. package/lib/typescript/types/ownership.types.d.ts.map +1 -1
  280. package/lib/typescript/types/screen.types.d.ts +9 -0
  281. package/lib/typescript/types/screen.types.d.ts.map +1 -1
  282. package/package.json +7 -1
  283. package/src/adapters/with-screen-transitions/stack-layout.tsx +1 -9
  284. package/src/components/blank-stack-host.tsx +21 -0
  285. package/src/components/blank-stack-runtime.tsx +37 -0
  286. package/src/components/blank-stack-scene.tsx +30 -0
  287. package/src/components/blank-stack-view.tsx +19 -0
  288. package/src/components/overlay/helpers/run-overlay-slot-interpolator.ts +0 -4
  289. package/src/components/overlay/hooks/use-overlay-slot.ts +0 -25
  290. package/src/components/overlay/variations/overlay-host.tsx +0 -1
  291. package/src/components/screen-lifecycle/index.tsx +2 -2
  292. package/src/custom-navigator.ts +25 -0
  293. package/src/hooks/navigation/use-blank-stack-state.ts +24 -0
  294. package/src/hooks/navigation/use-navigation-helpers.ts +4 -2
  295. package/src/hooks/navigation/use-screen-state.ts +1 -1
  296. package/src/index.ts +0 -1
  297. package/src/providers/screen/animation/animation.provider.tsx +13 -53
  298. package/src/providers/screen/animation/helpers/pipeline.ts +14 -26
  299. package/src/providers/screen/animation/types.ts +0 -11
  300. package/src/providers/screen/animation/use-screen-animation.tsx +42 -10
  301. package/src/providers/screen/descriptors/descriptors.provider.tsx +43 -99
  302. package/src/providers/screen/descriptors/index.tsx +1 -0
  303. package/src/providers/screen/gestures/gestures.provider.tsx +14 -55
  304. package/src/providers/screen/gestures/hooks/use-screen-gesture-config.ts +3 -6
  305. package/src/providers/screen/gestures/hooks/use-screen-gesture.ts +13 -13
  306. package/src/providers/screen/gestures/index.tsx +0 -2
  307. package/src/providers/screen/gestures/ownership/gesture-ownership-coordinator.ts +252 -0
  308. package/src/providers/screen/gestures/ownership/use-gesture-scroll-coordination.ts +23 -0
  309. package/src/providers/screen/gestures/ownership/use-register-gesture-ownership.ts +73 -0
  310. package/src/providers/screen/gestures/pan/activation/pan-activation-decision.ts +6 -20
  311. package/src/providers/screen/gestures/pan/activation/use-pan-activation.ts +5 -5
  312. package/src/providers/screen/gestures/pan/use-build-pan-gesture.ts +4 -4
  313. package/src/providers/screen/gestures/scroll-coordination/use-scroll-gesture-coordination.ts +9 -12
  314. package/src/providers/screen/gestures/shared/policy.ts +0 -8
  315. package/src/providers/screen/gestures/types.ts +4 -19
  316. package/src/providers/screen/screen-composer.tsx +18 -29
  317. package/src/providers/screen/styles/helpers/create-interpolator-scope.ts +2 -21
  318. package/src/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +0 -29
  319. package/src/{factories/screen-topology → providers/screen/topology/helpers}/create-screen-topology.ts +97 -53
  320. package/src/providers/screen/topology/hooks/use-resolved-transition-key.ts +29 -0
  321. package/src/{factories/screen-topology → providers/screen/topology/hooks}/use-screen-relationships.ts +1 -1
  322. package/src/providers/screen/topology/index.ts +16 -0
  323. package/src/providers/screen/topology/topology.provider.tsx +72 -0
  324. package/src/{factories/screen-topology → providers/screen/topology}/types.ts +7 -1
  325. package/src/providers/screen/use-current-screen-relationships.ts +1 -1
  326. package/src/providers/stack/blank-stack-state/helpers/build-blank-stack-state.ts +1 -0
  327. package/src/providers/stack/blank-stack-state/helpers/state-equality.ts +6 -3
  328. package/src/providers/stack/stack-transition/index.ts +5 -0
  329. package/src/providers/stack/stack-transition/stack-transition-controller.ts +341 -0
  330. package/src/providers/stack/stack-transition/stack-transition.provider.tsx +120 -0
  331. package/src/providers/stack/stack-transition/use-stack-transition.ts +77 -0
  332. package/src/types/animation.types.ts +1 -19
  333. package/src/types/bounds.types.ts +1 -4
  334. package/src/types/index.ts +0 -1
  335. package/src/types/ownership.types.ts +1 -26
  336. package/src/types/screen.types.ts +10 -0
  337. package/lib/commonjs/factories/screen-topology/create-screen-topology.js +0 -147
  338. package/lib/commonjs/factories/screen-topology/create-screen-topology.js.map +0 -1
  339. package/lib/commonjs/factories/screen-topology/index.js.map +0 -1
  340. package/lib/commonjs/factories/screen-topology/types.js.map +0 -1
  341. package/lib/commonjs/factories/screen-topology/use-screen-relationships.js.map +0 -1
  342. package/lib/commonjs/factories/screen-topology/worklet.js +0 -55
  343. package/lib/commonjs/factories/screen-topology/worklet.js.map +0 -1
  344. package/lib/commonjs/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +0 -62
  345. package/lib/commonjs/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +0 -1
  346. package/lib/commonjs/providers/screen/animation/helpers/read-screen-animation-revisions.js +0 -16
  347. package/lib/commonjs/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +0 -1
  348. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-bridge.js +0 -128
  349. package/lib/commonjs/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +0 -1
  350. package/lib/commonjs/providers/screen/gestures/ownership/resolve-ownership.js +0 -71
  351. package/lib/commonjs/providers/screen/gestures/ownership/resolve-ownership.js.map +0 -1
  352. package/lib/commonjs/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +0 -54
  353. package/lib/commonjs/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +0 -1
  354. package/lib/commonjs/providers/screen/styles/helpers/collect-interpolator-shared-values.js +0 -50
  355. package/lib/commonjs/providers/screen/styles/helpers/collect-interpolator-shared-values.js.map +0 -1
  356. package/lib/commonjs/utils/resolve-chain-target.js +0 -29
  357. package/lib/commonjs/utils/resolve-chain-target.js.map +0 -1
  358. package/lib/module/factories/screen-topology/create-screen-topology.js +0 -142
  359. package/lib/module/factories/screen-topology/create-screen-topology.js.map +0 -1
  360. package/lib/module/factories/screen-topology/index.js +0 -6
  361. package/lib/module/factories/screen-topology/index.js.map +0 -1
  362. package/lib/module/factories/screen-topology/types.js.map +0 -1
  363. package/lib/module/factories/screen-topology/use-screen-relationships.js.map +0 -1
  364. package/lib/module/factories/screen-topology/worklet.js +0 -48
  365. package/lib/module/factories/screen-topology/worklet.js.map +0 -1
  366. package/lib/module/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +0 -56
  367. package/lib/module/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +0 -1
  368. package/lib/module/providers/screen/animation/helpers/read-screen-animation-revisions.js +0 -11
  369. package/lib/module/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +0 -1
  370. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-bridge.js +0 -124
  371. package/lib/module/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +0 -1
  372. package/lib/module/providers/screen/gestures/ownership/resolve-ownership.js +0 -67
  373. package/lib/module/providers/screen/gestures/ownership/resolve-ownership.js.map +0 -1
  374. package/lib/module/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js +0 -50
  375. package/lib/module/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.js.map +0 -1
  376. package/lib/module/providers/screen/styles/helpers/collect-interpolator-shared-values.js +0 -45
  377. package/lib/module/providers/screen/styles/helpers/collect-interpolator-shared-values.js.map +0 -1
  378. package/lib/module/utils/resolve-chain-target.js +0 -25
  379. package/lib/module/utils/resolve-chain-target.js.map +0 -1
  380. package/lib/typescript/factories/screen-topology/create-screen-topology.d.ts.map +0 -1
  381. package/lib/typescript/factories/screen-topology/index.d.ts +0 -5
  382. package/lib/typescript/factories/screen-topology/index.d.ts.map +0 -1
  383. package/lib/typescript/factories/screen-topology/types.d.ts.map +0 -1
  384. package/lib/typescript/factories/screen-topology/use-screen-relationships.d.ts.map +0 -1
  385. package/lib/typescript/factories/screen-topology/worklet.d.ts +0 -5
  386. package/lib/typescript/factories/screen-topology/worklet.d.ts.map +0 -1
  387. package/lib/typescript/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts +0 -9
  388. package/lib/typescript/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts.map +0 -1
  389. package/lib/typescript/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts +0 -6
  390. package/lib/typescript/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts.map +0 -1
  391. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts +0 -3
  392. package/lib/typescript/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts.map +0 -1
  393. package/lib/typescript/providers/screen/gestures/ownership/resolve-ownership.d.ts +0 -32
  394. package/lib/typescript/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +0 -1
  395. package/lib/typescript/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts +0 -11
  396. package/lib/typescript/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.d.ts.map +0 -1
  397. package/lib/typescript/providers/screen/styles/helpers/collect-interpolator-shared-values.d.ts +0 -4
  398. package/lib/typescript/providers/screen/styles/helpers/collect-interpolator-shared-values.d.ts.map +0 -1
  399. package/lib/typescript/utils/resolve-chain-target.d.ts +0 -11
  400. package/lib/typescript/utils/resolve-chain-target.d.ts.map +0 -1
  401. package/src/factories/screen-topology/index.ts +0 -16
  402. package/src/factories/screen-topology/worklet.ts +0 -60
  403. package/src/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +0 -96
  404. package/src/providers/screen/animation/helpers/read-screen-animation-revisions.ts +0 -15
  405. package/src/providers/screen/gestures/ownership/gesture-ownership-bridge.tsx +0 -173
  406. package/src/providers/screen/gestures/ownership/resolve-ownership.ts +0 -90
  407. package/src/providers/screen/gestures/scroll-coordination/walk-up-scroll-gesture-coordination.ts +0 -88
  408. package/src/providers/screen/styles/helpers/collect-interpolator-shared-values.ts +0 -75
  409. package/src/utils/resolve-chain-target.ts +0 -33
  410. /package/lib/commonjs/{factories/screen-topology → providers/screen/topology}/types.js +0 -0
  411. /package/lib/module/{factories/screen-topology → providers/screen/topology}/types.js +0 -0
@@ -0,0 +1,341 @@
1
+ import { EPSILON } from "../../../constants";
2
+ import type { BlankStackStoreValue } from "../../../types/providers/blank-stack-provider.types";
3
+ import type { SnapPoint } from "../../../types/screen.types";
4
+
5
+ export type StackTransitionDirection = "forward" | "backward";
6
+
7
+ export type StackTransitionSelection = {
8
+ direction: StackTransitionDirection;
9
+ driverRouteKey: string;
10
+ sourceRouteKey: string;
11
+ targetRouteKey: string;
12
+ };
13
+
14
+ export type StackTransitionStateSnapshot = {
15
+ focusedIndex: number;
16
+ scenes: BlankStackStoreValue["scenes"];
17
+ };
18
+
19
+ export type StackTransitionControllerSnapshot = {
20
+ selection: StackTransitionSelection | null;
21
+ };
22
+
23
+ export enum StackTransitionDriverSignal {
24
+ Idle = 0,
25
+ Forward = 1,
26
+ Backward = 2,
27
+ }
28
+
29
+ export type StackTransitionDriverFrame = {
30
+ closing: number;
31
+ dismissalBoundary: number;
32
+ dismissing: number;
33
+ dragging: number;
34
+ entering: number;
35
+ progressBaseline: number;
36
+ progressSettled: number;
37
+ settling: number;
38
+ targetProgress: number;
39
+ visualProgress: number;
40
+ };
41
+
42
+ export type StackTransitionController = {
43
+ getSnapshot: () => StackTransitionControllerSnapshot;
44
+ handleDriverSignal: (signal: StackTransitionDriverSignal) => void;
45
+ subscribe: (listener: () => void) => () => void;
46
+ update: (snapshot: StackTransitionStateSnapshot) => void;
47
+ };
48
+
49
+ const getFocusedScene = (snapshot: StackTransitionStateSnapshot) =>
50
+ snapshot.scenes[snapshot.focusedIndex];
51
+
52
+ const findScene = (
53
+ snapshot: StackTransitionStateSnapshot,
54
+ routeKey: string | undefined,
55
+ ) =>
56
+ routeKey
57
+ ? snapshot.scenes.find((scene) => scene.route.key === routeKey)
58
+ : undefined;
59
+
60
+ const createForwardSelection = (
61
+ snapshot: StackTransitionStateSnapshot,
62
+ ): StackTransitionSelection | null => {
63
+ const target = getFocusedScene(snapshot);
64
+ const source = findScene(snapshot, target?.previousDescriptor?.route.key);
65
+
66
+ if (!source || !target || target.activity !== "active") {
67
+ return null;
68
+ }
69
+
70
+ return {
71
+ direction: "forward",
72
+ driverRouteKey: target.route.key,
73
+ sourceRouteKey: source.route.key,
74
+ targetRouteKey: target.route.key,
75
+ };
76
+ };
77
+
78
+ const createBackwardSelection = (
79
+ snapshot: StackTransitionStateSnapshot,
80
+ ): StackTransitionSelection | null => {
81
+ const focused = getFocusedScene(snapshot);
82
+ const focusedPrevious = findScene(
83
+ snapshot,
84
+ focused?.previousDescriptor?.route.key,
85
+ );
86
+
87
+ if (focused?.activity === "active" && focusedPrevious) {
88
+ return {
89
+ direction: "backward",
90
+ driverRouteKey: focused.route.key,
91
+ sourceRouteKey: focused.route.key,
92
+ targetRouteKey: focusedPrevious.route.key,
93
+ };
94
+ }
95
+
96
+ const focusedRouteKey = focused?.route.key;
97
+ const closing = [...snapshot.scenes].reverse().find((scene) => {
98
+ if (scene.activity !== "closing") return false;
99
+ if (!focusedRouteKey) return true;
100
+
101
+ return scene.previousDescriptor?.route.key === focusedRouteKey;
102
+ });
103
+ const fallbackClosing =
104
+ closing ??
105
+ [...snapshot.scenes]
106
+ .reverse()
107
+ .find((scene) => scene.activity === "closing");
108
+ const target = findScene(
109
+ snapshot,
110
+ fallbackClosing?.previousDescriptor?.route.key,
111
+ );
112
+
113
+ if (!fallbackClosing || !target) {
114
+ return null;
115
+ }
116
+
117
+ return {
118
+ direction: "backward",
119
+ driverRouteKey: fallbackClosing.route.key,
120
+ sourceRouteKey: fallbackClosing.route.key,
121
+ targetRouteKey: target.route.key,
122
+ };
123
+ };
124
+
125
+ const createFocusChangeSelection = (
126
+ previous: StackTransitionStateSnapshot,
127
+ next: StackTransitionStateSnapshot,
128
+ ): StackTransitionSelection | null => {
129
+ const previousFocused = getFocusedScene(previous);
130
+ const nextFocused = getFocusedScene(next);
131
+
132
+ if (
133
+ !previousFocused ||
134
+ !nextFocused ||
135
+ previousFocused.route.key === nextFocused.route.key
136
+ ) {
137
+ return null;
138
+ }
139
+
140
+ const targetExisted = previous.scenes.some(
141
+ (scene) => scene.route.key === nextFocused.route.key,
142
+ );
143
+
144
+ if (targetExisted) {
145
+ return {
146
+ direction: "backward",
147
+ driverRouteKey: previousFocused.route.key,
148
+ sourceRouteKey: previousFocused.route.key,
149
+ targetRouteKey: nextFocused.route.key,
150
+ };
151
+ }
152
+
153
+ return {
154
+ direction: "forward",
155
+ driverRouteKey: nextFocused.route.key,
156
+ sourceRouteKey: previousFocused.route.key,
157
+ targetRouteKey: nextFocused.route.key,
158
+ };
159
+ };
160
+
161
+ const areSelectionsEqual = (
162
+ left: StackTransitionSelection | null,
163
+ right: StackTransitionSelection | null,
164
+ ) =>
165
+ left === right ||
166
+ (left !== null &&
167
+ right !== null &&
168
+ left.direction === right.direction &&
169
+ left.driverRouteKey === right.driverRouteKey &&
170
+ left.sourceRouteKey === right.sourceRouteKey &&
171
+ left.targetRouteKey === right.targetRouteKey);
172
+
173
+ export const normalizeStackTransitionProgress = (
174
+ direction: StackTransitionDirection,
175
+ driverProgress: number,
176
+ dismissalBoundary: number,
177
+ ) => {
178
+ "worklet";
179
+
180
+ const normalizedDriverProgress = Math.min(
181
+ 1,
182
+ Math.max(0, driverProgress / Math.max(EPSILON, dismissalBoundary)),
183
+ );
184
+
185
+ return direction === "forward"
186
+ ? normalizedDriverProgress
187
+ : 1 - normalizedDriverProgress;
188
+ };
189
+
190
+ export const resolveStackTransitionDismissalBoundary = ({
191
+ progressBaseline,
192
+ resolvedAutoSnapPoint,
193
+ snapPoints,
194
+ }: {
195
+ progressBaseline: number;
196
+ resolvedAutoSnapPoint: number;
197
+ snapPoints: SnapPoint[] | undefined;
198
+ }) => {
199
+ "worklet";
200
+
201
+ if (!snapPoints?.length) return progressBaseline;
202
+
203
+ let boundary = Number.POSITIVE_INFINITY;
204
+ for (let index = 0; index < snapPoints.length; index++) {
205
+ const snapPoint = snapPoints[index];
206
+ const resolvedSnapPoint =
207
+ snapPoint === "auto" ? resolvedAutoSnapPoint : snapPoint;
208
+
209
+ if (
210
+ Number.isFinite(resolvedSnapPoint) &&
211
+ resolvedSnapPoint > EPSILON &&
212
+ resolvedSnapPoint < boundary
213
+ ) {
214
+ boundary = resolvedSnapPoint;
215
+ }
216
+ }
217
+
218
+ return Number.isFinite(boundary) ? boundary : progressBaseline;
219
+ };
220
+
221
+ export const resolveStackTransitionDriverSignal = ({
222
+ closing,
223
+ dismissalBoundary,
224
+ dismissing,
225
+ dragging,
226
+ entering,
227
+ progressBaseline,
228
+ progressSettled,
229
+ settling,
230
+ targetProgress,
231
+ visualProgress,
232
+ }: StackTransitionDriverFrame): StackTransitionDriverSignal => {
233
+ "worklet";
234
+
235
+ if (closing || dismissing || (!progressSettled && targetProgress === 0)) {
236
+ return StackTransitionDriverSignal.Backward;
237
+ }
238
+
239
+ if (entering) {
240
+ return StackTransitionDriverSignal.Forward;
241
+ }
242
+
243
+ if (
244
+ (dragging || settling) &&
245
+ visualProgress < Math.min(progressBaseline, dismissalBoundary) - EPSILON
246
+ ) {
247
+ return StackTransitionDriverSignal.Backward;
248
+ }
249
+
250
+ return StackTransitionDriverSignal.Idle;
251
+ };
252
+
253
+ export const createStackTransitionController = (
254
+ initialState: StackTransitionStateSnapshot,
255
+ ): StackTransitionController => {
256
+ let state = initialState;
257
+ let driverActivated = false;
258
+ let snapshot: StackTransitionControllerSnapshot = { selection: null };
259
+ const listeners = new Set<() => void>();
260
+
261
+ const setSelection = (
262
+ selection: StackTransitionSelection | null,
263
+ notify: boolean,
264
+ ) => {
265
+ if (areSelectionsEqual(snapshot.selection, selection)) return false;
266
+
267
+ snapshot = { selection };
268
+ driverActivated = false;
269
+ if (notify) {
270
+ for (const listener of listeners) listener();
271
+ }
272
+ return true;
273
+ };
274
+
275
+ const update = (nextState: StackTransitionStateSnapshot) => {
276
+ const focusChange = createFocusChangeSelection(state, nextState);
277
+ state = nextState;
278
+
279
+ if (focusChange) {
280
+ setSelection(focusChange, false);
281
+ return;
282
+ }
283
+
284
+ const selection = snapshot.selection;
285
+ if (
286
+ selection &&
287
+ !nextState.scenes.some(
288
+ (scene) => scene.route.key === selection.driverRouteKey,
289
+ )
290
+ ) {
291
+ setSelection(null, false);
292
+ return;
293
+ }
294
+
295
+ if (!selection) {
296
+ const closingSelection = createBackwardSelection(nextState);
297
+ if (
298
+ closingSelection &&
299
+ findScene(nextState, closingSelection.driverRouteKey)?.activity ===
300
+ "closing"
301
+ ) {
302
+ setSelection(closingSelection, false);
303
+ }
304
+ }
305
+ };
306
+
307
+ const handleDriverSignal = (signal: StackTransitionDriverSignal) => {
308
+ if (signal === StackTransitionDriverSignal.Idle) {
309
+ if (driverActivated) setSelection(null, true);
310
+ return;
311
+ }
312
+
313
+ const direction =
314
+ signal === StackTransitionDriverSignal.Forward ? "forward" : "backward";
315
+ const currentSelection = snapshot.selection;
316
+
317
+ if (currentSelection?.direction === direction) {
318
+ driverActivated = true;
319
+ return;
320
+ }
321
+
322
+ const selection =
323
+ direction === "forward"
324
+ ? createForwardSelection(state)
325
+ : createBackwardSelection(state);
326
+ if (!selection) return;
327
+
328
+ setSelection(selection, true);
329
+ driverActivated = true;
330
+ };
331
+
332
+ return {
333
+ getSnapshot: () => snapshot,
334
+ handleDriverSignal,
335
+ subscribe: (listener) => {
336
+ listeners.add(listener);
337
+ return () => listeners.delete(listener);
338
+ },
339
+ update,
340
+ };
341
+ };
@@ -0,0 +1,120 @@
1
+ import { type ReactNode, useMemo, useRef, useSyncExternalStore } from "react";
2
+ import { useAnimatedReaction } from "react-native-reanimated";
3
+ import { scheduleOnRN } from "react-native-worklets";
4
+ import { AnimationStore } from "../../../stores/animation.store";
5
+ import { GestureStore } from "../../../stores/gesture.store";
6
+ import { SystemStore } from "../../../stores/system.store";
7
+ import type { SnapPoint } from "../../../types/screen.types";
8
+ import createProvider from "../../../utils/create-provider";
9
+ import { useBlankStackStore } from "../blank-stack.provider";
10
+ import {
11
+ createStackTransitionController,
12
+ resolveStackTransitionDismissalBoundary,
13
+ resolveStackTransitionDriverSignal,
14
+ type StackTransitionController,
15
+ StackTransitionDriverSignal,
16
+ type StackTransitionSelection,
17
+ } from "./stack-transition-controller";
18
+
19
+ type StackTransitionProviderProps = {
20
+ children: ReactNode;
21
+ };
22
+
23
+ type StackTransitionStoreValue = {
24
+ selection: StackTransitionSelection | null;
25
+ };
26
+
27
+ const useDriverSignal = ({
28
+ controller,
29
+ driverRouteKey,
30
+ snapPoints,
31
+ }: {
32
+ controller: StackTransitionController;
33
+ driverRouteKey: string | undefined;
34
+ snapPoints: SnapPoint[] | undefined;
35
+ }) => {
36
+ const driver = useMemo(() => {
37
+ if (!driverRouteKey) return null;
38
+
39
+ return {
40
+ animations: AnimationStore.getBag(driverRouteKey),
41
+ gestures: GestureStore.getBag(driverRouteKey),
42
+ system: SystemStore.getBag(driverRouteKey),
43
+ };
44
+ }, [driverRouteKey]);
45
+
46
+ useAnimatedReaction(
47
+ () => {
48
+ if (!driver) return StackTransitionDriverSignal.Idle;
49
+ const progressBaseline = driver.gestures.internal.progressBaseline.get();
50
+
51
+ return resolveStackTransitionDriverSignal({
52
+ closing: driver.animations.closing.get(),
53
+ dismissalBoundary: resolveStackTransitionDismissalBoundary({
54
+ progressBaseline,
55
+ resolvedAutoSnapPoint: driver.system.resolvedAutoSnapPoint.get(),
56
+ snapPoints,
57
+ }),
58
+ dismissing: driver.gestures.dismissing.get(),
59
+ dragging: driver.gestures.dragging.get(),
60
+ entering: driver.animations.entering.get(),
61
+ progressBaseline,
62
+ progressSettled: driver.animations.progressSettled.get(),
63
+ settling: driver.gestures.settling.get(),
64
+ targetProgress: driver.system.targetProgress.get(),
65
+ visualProgress: driver.animations.visualProgress.get(),
66
+ });
67
+ },
68
+ (signal, previousSignal) => {
69
+ if (signal === previousSignal) return;
70
+
71
+ scheduleOnRN(controller.handleDriverSignal, signal);
72
+ },
73
+ [controller, driver, snapPoints],
74
+ );
75
+ };
76
+
77
+ export const { StackTransitionProvider, useStackTransitionStore } =
78
+ createProvider("StackTransition")<
79
+ StackTransitionProviderProps,
80
+ StackTransitionStoreValue
81
+ >(({ children }) => {
82
+ const focusedIndex = useBlankStackStore((store) => store.focusedIndex);
83
+ const scenes = useBlankStackStore((store) => store.scenes);
84
+ const controllerRef = useRef<StackTransitionController | null>(null);
85
+
86
+ if (!controllerRef.current) {
87
+ controllerRef.current = createStackTransitionController({
88
+ focusedIndex,
89
+ scenes,
90
+ });
91
+ }
92
+
93
+ const controller = controllerRef.current;
94
+ controller.update({ focusedIndex, scenes });
95
+
96
+ const snapshot = useSyncExternalStore(
97
+ controller.subscribe,
98
+ controller.getSnapshot,
99
+ controller.getSnapshot,
100
+ );
101
+ const focusedRouteKey = scenes[focusedIndex]?.route.key;
102
+ const driverRouteKey =
103
+ snapshot.selection?.driverRouteKey ?? focusedRouteKey;
104
+ const driverSnapPoints = scenes.find(
105
+ (scene) => scene.route.key === driverRouteKey,
106
+ )?.descriptor.options.snapPoints;
107
+
108
+ useDriverSignal({
109
+ controller,
110
+ driverRouteKey,
111
+ snapPoints: driverSnapPoints,
112
+ });
113
+
114
+ return {
115
+ children,
116
+ value: {
117
+ selection: snapshot.selection,
118
+ },
119
+ };
120
+ });
@@ -0,0 +1,77 @@
1
+ import { useMemo } from "react";
2
+ import { type DerivedValue, useDerivedValue } from "react-native-reanimated";
3
+ import { AnimationStore } from "../../../stores/animation.store";
4
+ import { SystemStore } from "../../../stores/system.store";
5
+ import type { BlankStackStoreValue } from "../../../types/providers/blank-stack-provider.types";
6
+ import { useBlankStackStore } from "../blank-stack.provider";
7
+ import { useStackTransitionStore } from "./stack-transition.provider";
8
+ import {
9
+ normalizeStackTransitionProgress,
10
+ resolveStackTransitionDismissalBoundary,
11
+ type StackTransitionDirection,
12
+ } from "./stack-transition-controller";
13
+
14
+ export type StackTransition = {
15
+ direction: StackTransitionDirection;
16
+ driver: BlankStackStoreValue["scenes"][number];
17
+ progress: DerivedValue<number>;
18
+ source: BlankStackStoreValue["scenes"][number];
19
+ target: BlankStackStoreValue["scenes"][number];
20
+ };
21
+
22
+ export const useStackTransition = (): StackTransition | null => {
23
+ const selection = useStackTransitionStore((store) => store.selection);
24
+ const scenesByKey = useBlankStackStore((store) => store.scenesByKey);
25
+ const driverProgress = useMemo(
26
+ () =>
27
+ selection
28
+ ? AnimationStore.getValue(selection.driverRouteKey, "visualProgress")
29
+ : null,
30
+ [selection],
31
+ );
32
+ const resolvedAutoSnapPoint = useMemo(
33
+ () =>
34
+ selection
35
+ ? SystemStore.getValue(
36
+ selection.driverRouteKey,
37
+ "resolvedAutoSnapPoint",
38
+ )
39
+ : null,
40
+ [selection],
41
+ );
42
+ const driverSnapPoints = selection
43
+ ? scenesByKey[selection.driverRouteKey]?.descriptor.options.snapPoints
44
+ : undefined;
45
+ const direction = selection?.direction ?? "forward";
46
+ const progress = useDerivedValue(() => {
47
+ if (!driverProgress) return 0;
48
+ const dismissalBoundary = resolveStackTransitionDismissalBoundary({
49
+ progressBaseline: 1,
50
+ resolvedAutoSnapPoint: resolvedAutoSnapPoint?.get() ?? -1,
51
+ snapPoints: driverSnapPoints,
52
+ });
53
+
54
+ return normalizeStackTransitionProgress(
55
+ direction,
56
+ driverProgress.get(),
57
+ dismissalBoundary,
58
+ );
59
+ }, [direction, driverProgress, driverSnapPoints, resolvedAutoSnapPoint]);
60
+
61
+ return useMemo(() => {
62
+ if (!selection) return null;
63
+
64
+ const source = scenesByKey[selection.sourceRouteKey];
65
+ const target = scenesByKey[selection.targetRouteKey];
66
+ const driver = scenesByKey[selection.driverRouteKey];
67
+ if (!source || !target || !driver) return null;
68
+
69
+ return {
70
+ direction: selection.direction,
71
+ driver,
72
+ progress,
73
+ source,
74
+ target,
75
+ };
76
+ }, [progress, scenesByKey, selection]);
77
+ };
@@ -171,11 +171,7 @@ export type ScreenTransitionDepthTarget = {
171
171
  depth: number;
172
172
  };
173
173
 
174
- export type ScreenTransitionTarget = ScreenTransitionDepthTarget;
175
-
176
- export type ScreenTransitionAccessor = (
177
- target?: ScreenTransitionTarget,
178
- ) => ScreenInterpolationProps | null;
174
+ export type ScreenTransitionTarget = ScreenTransitionDepthTarget | string;
179
175
 
180
176
  export interface ScreenInterpolationProps {
181
177
  /**
@@ -237,20 +233,6 @@ export interface ScreenInterpolationProps {
237
233
  */
238
234
  bounds: BoundsAccessor;
239
235
 
240
- /**
241
- * Resolves interpolation props for this screen's transition timeline or an
242
- * ancestor/descendant transition timeline.
243
- *
244
- * Calling without a target returns the current transition.
245
- * `transition({ depth: -1 })` returns the immediate parent transition.
246
- * `transition({ depth: 1 })` returns the immediate child transition.
247
- * `transition({ depth: 0 })` returns the current transition.
248
- *
249
- * When called from a returned transition scope, targets are resolved relative
250
- * to that scope.
251
- */
252
- transition: ScreenTransitionAccessor;
253
-
254
236
  /**
255
237
  * The screen state that is currently driving the transition (either current or next, whichever is focused).
256
238
  */
@@ -229,9 +229,6 @@ export type BoundsAccessor = (
229
229
  options: BoundsIdentityInput,
230
230
  ) => BoundsScopedAccessor;
231
231
 
232
- export type BoundsInterpolationProps = Omit<
233
- ScreenInterpolationProps,
234
- "bounds" | "transition"
235
- >;
232
+ export type BoundsInterpolationProps = Omit<ScreenInterpolationProps, "bounds">;
236
233
 
237
234
  export type { BoundsMotion, BoundsMotionFrame, BoundsMotionTransform };
@@ -5,7 +5,6 @@ export type {
5
5
  BoundaryHandoffTarget,
6
6
  ScreenInterpolationProps,
7
7
  ScreenStyleInterpolator,
8
- ScreenTransitionAccessor,
9
8
  ScreenTransitionDepthTarget,
10
9
  ScreenTransitionOptions,
11
10
  ScreenTransitionState,
@@ -5,7 +5,7 @@
5
5
  * 1. Gestures dismiss stacks, not screens
6
6
  * 2. Ownership is per-direction (4 independent directions)
7
7
  * 3. Shadowing: child claiming same direction blocks parent
8
- * 4. Inheritance: no local claim walks up tree to find owner
8
+ * 4. Inheritance: topology resolves the nearest claiming ancestor
9
9
  */
10
10
 
11
11
  /**
@@ -50,28 +50,3 @@ export const NO_CLAIMS: ClaimedDirections = {
50
50
  horizontal: false,
51
51
  "horizontal-inverted": false,
52
52
  };
53
-
54
- /**
55
- * Ownership status for a direction relative to the current screen.
56
- *
57
- * - 'self': Current screen owns this direction (should activate)
58
- * - 'ancestor': An ancestor owns this direction (should fail to bubble up)
59
- * - 'none': No one owns this direction (should fail, no gesture response)
60
- */
61
- export type OwnershipStatus = "self" | "ancestor" | "none";
62
-
63
- /**
64
- * Map of ownership status for all four directions.
65
- * Pre-computed during render for worklet access.
66
- */
67
- export type DirectionOwnership = Record<Direction, OwnershipStatus>;
68
-
69
- /**
70
- * Empty ownership - used when no gestures are configured anywhere.
71
- */
72
- export const NO_OWNERSHIP: DirectionOwnership = {
73
- vertical: "none",
74
- "vertical-inverted": "none",
75
- horizontal: "none",
76
- "horizontal-inverted": "none",
77
- };
@@ -205,6 +205,16 @@ export type TransitionAwareProps<T extends object> = AnimatedProps<T> & {
205
205
  };
206
206
 
207
207
  export type ScreenTransitionConfig = {
208
+ /**
209
+ * Globally identifies this mounted screen for keyed animation observation.
210
+ *
211
+ * The key must be unique among mounted screens.
212
+ *
213
+ * @example
214
+ * options={{ transitionKey: "feed" }}
215
+ */
216
+ transitionKey?: string;
217
+
208
218
  /**
209
219
  * The user-provided function to calculate styles based on animation progress.
210
220
  *