react-native-screen-transitions 3.6.0 → 3.7.0-beta.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 (397) hide show
  1. package/README.md +2 -2
  2. package/lib/commonjs/blank-stack/components/stack-view.js +35 -39
  3. package/lib/commonjs/blank-stack/components/stack-view.js.map +1 -1
  4. package/lib/commonjs/blank-stack/navigators/create-blank-stack-navigator.js +7 -14
  5. package/lib/commonjs/blank-stack/navigators/create-blank-stack-navigator.js.map +1 -1
  6. package/lib/commonjs/component-stack/components/stack-view.js +4 -11
  7. package/lib/commonjs/component-stack/components/stack-view.js.map +1 -1
  8. package/lib/commonjs/component-stack/navigators/create-component-stack-navigator.js +1 -1
  9. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js +6 -0
  10. package/lib/commonjs/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  11. package/lib/commonjs/shared/adapters/with-screen-transitions/context.js +28 -0
  12. package/lib/commonjs/shared/adapters/with-screen-transitions/context.js.map +1 -0
  13. package/lib/commonjs/shared/adapters/with-screen-transitions/index.js +69 -0
  14. package/lib/commonjs/shared/adapters/with-screen-transitions/index.js.map +1 -0
  15. package/lib/commonjs/shared/adapters/with-screen-transitions/options.js +57 -0
  16. package/lib/commonjs/shared/adapters/with-screen-transitions/options.js.map +1 -0
  17. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js +143 -0
  18. package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -0
  19. package/lib/commonjs/shared/adapters/with-screen-transitions/types.js +6 -0
  20. package/lib/commonjs/shared/adapters/with-screen-transitions/types.js.map +1 -0
  21. package/lib/commonjs/shared/components/activity/helpers.js +9 -0
  22. package/lib/commonjs/shared/components/activity/helpers.js.map +1 -0
  23. package/lib/commonjs/shared/components/activity/index.js +20 -0
  24. package/lib/commonjs/shared/components/activity/index.js.map +1 -0
  25. package/lib/commonjs/shared/components/activity/variants/activity-container.js +29 -0
  26. package/lib/commonjs/shared/components/activity/variants/activity-container.js.map +1 -0
  27. package/lib/commonjs/shared/components/activity/variants/activity-screen.js +107 -0
  28. package/lib/commonjs/shared/components/activity/variants/activity-screen.js.map +1 -0
  29. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-measurer.js +10 -4
  30. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-measurer.js.map +1 -1
  31. package/lib/commonjs/shared/components/create-boundary-component/utils/measured-bounds.js +13 -1
  32. package/lib/commonjs/shared/components/create-boundary-component/utils/measured-bounds.js.map +1 -1
  33. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -17
  34. package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  35. package/lib/commonjs/shared/components/screen-lifecycle/index.js +1 -1
  36. package/lib/commonjs/shared/components/screen-lifecycle/index.js.map +1 -1
  37. package/lib/commonjs/shared/hooks/navigation/use-navigation-helpers.js +10 -4
  38. package/lib/commonjs/shared/hooks/navigation/use-navigation-helpers.js.map +1 -1
  39. package/lib/commonjs/shared/hooks/navigation/use-stack.js +63 -6
  40. package/lib/commonjs/shared/hooks/navigation/use-stack.js.map +1 -1
  41. package/lib/commonjs/shared/index.js +8 -0
  42. package/lib/commonjs/shared/index.js.map +1 -1
  43. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js +18 -29
  44. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  45. package/lib/commonjs/shared/providers/screen/descriptors/index.js +6 -0
  46. package/lib/commonjs/shared/providers/screen/descriptors/index.js.map +1 -1
  47. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js +2 -1
  48. package/lib/commonjs/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  49. package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +1 -1
  50. package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
  51. package/lib/commonjs/shared/providers/screen/gestures/pan/pan-lifecycle.js +4 -1
  52. package/lib/commonjs/shared/providers/screen/gestures/pan/pan-lifecycle.js.map +1 -1
  53. package/lib/commonjs/shared/providers/screen/gestures/pan/use-pan-behavior.js +4 -3
  54. package/lib/commonjs/shared/providers/screen/gestures/pan/use-pan-behavior.js.map +1 -1
  55. package/lib/commonjs/shared/providers/screen/gestures/pinch/pinch-lifecycle.js +4 -1
  56. package/lib/commonjs/shared/providers/screen/gestures/pinch/pinch-lifecycle.js.map +1 -1
  57. package/lib/commonjs/shared/providers/screen/gestures/pinch/use-pinch-behavior.js +4 -3
  58. package/lib/commonjs/shared/providers/screen/gestures/pinch/use-pinch-behavior.js.map +1 -1
  59. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +7 -28
  60. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  61. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +16 -1
  62. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  63. package/lib/commonjs/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js +2 -14
  64. package/lib/commonjs/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js.map +1 -1
  65. package/lib/commonjs/shared/providers/stack/direct.provider.js +4 -3
  66. package/lib/commonjs/shared/providers/stack/direct.provider.js.map +1 -1
  67. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +197 -0
  68. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -0
  69. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js +58 -0
  70. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js.map +1 -0
  71. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js +92 -0
  72. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js.map +1 -0
  73. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js +118 -0
  74. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js.map +1 -0
  75. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/types.js +6 -0
  76. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/types.js.map +1 -0
  77. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/index.js +24 -0
  78. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/index.js.map +1 -0
  79. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js +131 -0
  80. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js.map +1 -0
  81. package/lib/commonjs/shared/providers/stack/managed.provider.js +18 -29
  82. package/lib/commonjs/shared/providers/stack/managed.provider.js.map +1 -1
  83. package/lib/commonjs/shared/types/stack.types.js.map +1 -1
  84. package/lib/commonjs/shared/utils/bounds/navigation/reveal/build.js +4 -4
  85. package/lib/commonjs/shared/utils/bounds/navigation/reveal/build.js.map +1 -1
  86. package/lib/commonjs/shared/utils/bounds/navigation/reveal/config.js +2 -1
  87. package/lib/commonjs/shared/utils/bounds/navigation/reveal/config.js.map +1 -1
  88. package/lib/commonjs/shared/utils/create-provider.js +99 -10
  89. package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
  90. package/lib/commonjs/shared/utils/navigation/resolve-scene-neighbors.js +8 -5
  91. package/lib/commonjs/shared/utils/navigation/resolve-scene-neighbors.js.map +1 -1
  92. package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js +23 -6
  93. package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
  94. package/lib/commonjs/shared/utils/visibility-block-offset.js +13 -0
  95. package/lib/commonjs/shared/utils/visibility-block-offset.js.map +1 -0
  96. package/lib/module/blank-stack/components/stack-view.js +36 -40
  97. package/lib/module/blank-stack/components/stack-view.js.map +1 -1
  98. package/lib/module/blank-stack/navigators/create-blank-stack-navigator.js +7 -14
  99. package/lib/module/blank-stack/navigators/create-blank-stack-navigator.js.map +1 -1
  100. package/lib/module/component-stack/components/stack-view.js +4 -11
  101. package/lib/module/component-stack/components/stack-view.js.map +1 -1
  102. package/lib/module/component-stack/navigators/create-component-stack-navigator.js +1 -1
  103. package/lib/module/native-stack/navigators/createNativeStackNavigator.js +6 -0
  104. package/lib/module/native-stack/navigators/createNativeStackNavigator.js.map +1 -1
  105. package/lib/module/shared/adapters/with-screen-transitions/context.js +23 -0
  106. package/lib/module/shared/adapters/with-screen-transitions/context.js.map +1 -0
  107. package/lib/module/shared/adapters/with-screen-transitions/index.js +65 -0
  108. package/lib/module/shared/adapters/with-screen-transitions/index.js.map +1 -0
  109. package/lib/module/shared/adapters/with-screen-transitions/options.js +52 -0
  110. package/lib/module/shared/adapters/with-screen-transitions/options.js.map +1 -0
  111. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js +138 -0
  112. package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -0
  113. package/lib/module/shared/adapters/with-screen-transitions/types.js +4 -0
  114. package/lib/module/shared/adapters/with-screen-transitions/types.js.map +1 -0
  115. package/lib/module/shared/components/activity/helpers.js +5 -0
  116. package/lib/module/shared/components/activity/helpers.js.map +1 -0
  117. package/lib/module/shared/components/activity/index.js +5 -0
  118. package/lib/module/shared/components/activity/index.js.map +1 -0
  119. package/lib/module/shared/components/activity/variants/activity-container.js +24 -0
  120. package/lib/module/shared/components/activity/variants/activity-container.js.map +1 -0
  121. package/lib/module/shared/components/activity/variants/activity-screen.js +103 -0
  122. package/lib/module/shared/components/activity/variants/activity-screen.js.map +1 -0
  123. package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js +11 -5
  124. package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js.map +1 -1
  125. package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js +11 -0
  126. package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js.map +1 -1
  127. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +8 -17
  128. package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
  129. package/lib/module/shared/components/screen-lifecycle/index.js +1 -1
  130. package/lib/module/shared/components/screen-lifecycle/index.js.map +1 -1
  131. package/lib/module/shared/hooks/navigation/use-navigation-helpers.js +11 -5
  132. package/lib/module/shared/hooks/navigation/use-navigation-helpers.js.map +1 -1
  133. package/lib/module/shared/hooks/navigation/use-stack.js +63 -6
  134. package/lib/module/shared/hooks/navigation/use-stack.js.map +1 -1
  135. package/lib/module/shared/index.js +3 -0
  136. package/lib/module/shared/index.js.map +1 -1
  137. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js +17 -29
  138. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  139. package/lib/module/shared/providers/screen/descriptors/index.js +1 -1
  140. package/lib/module/shared/providers/screen/descriptors/index.js.map +1 -1
  141. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js +2 -1
  142. package/lib/module/shared/providers/screen/gestures/ownership/resolve-ownership.js.map +1 -1
  143. package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +2 -2
  144. package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
  145. package/lib/module/shared/providers/screen/gestures/pan/pan-lifecycle.js +5 -2
  146. package/lib/module/shared/providers/screen/gestures/pan/pan-lifecycle.js.map +1 -1
  147. package/lib/module/shared/providers/screen/gestures/pan/use-pan-behavior.js +4 -3
  148. package/lib/module/shared/providers/screen/gestures/pan/use-pan-behavior.js.map +1 -1
  149. package/lib/module/shared/providers/screen/gestures/pinch/pinch-lifecycle.js +5 -2
  150. package/lib/module/shared/providers/screen/gestures/pinch/pinch-lifecycle.js.map +1 -1
  151. package/lib/module/shared/providers/screen/gestures/pinch/use-pinch-behavior.js +4 -3
  152. package/lib/module/shared/providers/screen/gestures/pinch/use-pinch-behavior.js.map +1 -1
  153. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +7 -28
  154. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  155. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +16 -1
  156. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  157. package/lib/module/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js +3 -15
  158. package/lib/module/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js.map +1 -1
  159. package/lib/module/shared/providers/stack/direct.provider.js +5 -4
  160. package/lib/module/shared/providers/stack/direct.provider.js.map +1 -1
  161. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +192 -0
  162. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -0
  163. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js +53 -0
  164. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.js.map +1 -0
  165. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js +78 -0
  166. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.js.map +1 -0
  167. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js +113 -0
  168. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.js.map +1 -0
  169. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/types.js +4 -0
  170. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/types.js.map +1 -0
  171. package/lib/module/shared/providers/stack/helpers/managed-stack-state/index.js +19 -0
  172. package/lib/module/shared/providers/stack/helpers/managed-stack-state/index.js.map +1 -0
  173. package/lib/module/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js +126 -0
  174. package/lib/module/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.js.map +1 -0
  175. package/lib/module/shared/providers/stack/managed.provider.js +19 -30
  176. package/lib/module/shared/providers/stack/managed.provider.js.map +1 -1
  177. package/lib/module/shared/types/stack.types.js.map +1 -1
  178. package/lib/module/shared/utils/bounds/navigation/reveal/build.js +5 -5
  179. package/lib/module/shared/utils/bounds/navigation/reveal/build.js.map +1 -1
  180. package/lib/module/shared/utils/bounds/navigation/reveal/config.js +1 -0
  181. package/lib/module/shared/utils/bounds/navigation/reveal/config.js.map +1 -1
  182. package/lib/module/shared/utils/create-provider.js +100 -11
  183. package/lib/module/shared/utils/create-provider.js.map +1 -1
  184. package/lib/module/shared/utils/navigation/resolve-scene-neighbors.js +8 -5
  185. package/lib/module/shared/utils/navigation/resolve-scene-neighbors.js.map +1 -1
  186. package/lib/module/shared/utils/navigation/sync-routes-with-removed.js +23 -6
  187. package/lib/module/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
  188. package/lib/module/shared/utils/visibility-block-offset.js +8 -0
  189. package/lib/module/shared/utils/visibility-block-offset.js.map +1 -0
  190. package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
  191. package/lib/typescript/blank-stack/index.d.ts +1 -1
  192. package/lib/typescript/blank-stack/index.d.ts.map +1 -1
  193. package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts +4 -6
  194. package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts.map +1 -1
  195. package/lib/typescript/blank-stack/types.d.ts +41 -29
  196. package/lib/typescript/blank-stack/types.d.ts.map +1 -1
  197. package/lib/typescript/component-stack/components/stack-view.d.ts.map +1 -1
  198. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts +1 -1
  199. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +5 -0
  200. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -1
  201. package/lib/typescript/native-stack/types.d.ts +25 -0
  202. package/lib/typescript/native-stack/types.d.ts.map +1 -1
  203. package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts +15 -0
  204. package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts.map +1 -0
  205. package/lib/typescript/shared/adapters/with-screen-transitions/index.d.ts +10 -0
  206. package/lib/typescript/shared/adapters/with-screen-transitions/index.d.ts.map +1 -0
  207. package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts +9 -0
  208. package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts.map +1 -0
  209. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts +12 -0
  210. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -0
  211. package/lib/typescript/shared/adapters/with-screen-transitions/types.d.ts +24 -0
  212. package/lib/typescript/shared/adapters/with-screen-transitions/types.d.ts.map +1 -0
  213. package/lib/typescript/shared/components/activity/helpers.d.ts +4 -0
  214. package/lib/typescript/shared/components/activity/helpers.d.ts.map +1 -0
  215. package/lib/typescript/shared/components/activity/index.d.ts +3 -0
  216. package/lib/typescript/shared/components/activity/index.d.ts.map +1 -0
  217. package/lib/typescript/shared/components/activity/variants/activity-container.d.ts +6 -0
  218. package/lib/typescript/shared/components/activity/variants/activity-container.d.ts.map +1 -0
  219. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts +13 -0
  220. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -0
  221. package/lib/typescript/shared/components/create-boundary-component/hooks/use-measurer.d.ts.map +1 -1
  222. package/lib/typescript/shared/components/create-boundary-component/index.d.ts +2 -2
  223. package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts +1 -0
  224. package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts.map +1 -1
  225. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts +1 -2
  226. package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts.map +1 -1
  227. package/lib/typescript/shared/hooks/navigation/use-navigation-helpers.d.ts +1 -0
  228. package/lib/typescript/shared/hooks/navigation/use-navigation-helpers.d.ts.map +1 -1
  229. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +13 -1
  230. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
  231. package/lib/typescript/shared/index.d.ts +15 -11
  232. package/lib/typescript/shared/index.d.ts.map +1 -1
  233. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts +11 -3
  234. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  235. package/lib/typescript/shared/providers/screen/descriptors/index.d.ts +1 -1
  236. package/lib/typescript/shared/providers/screen/descriptors/index.d.ts.map +1 -1
  237. package/lib/typescript/shared/providers/screen/gestures/ownership/resolve-ownership.d.ts.map +1 -1
  238. package/lib/typescript/shared/providers/screen/gestures/pan/pan-lifecycle.d.ts +1 -1
  239. package/lib/typescript/shared/providers/screen/gestures/pan/pan-lifecycle.d.ts.map +1 -1
  240. package/lib/typescript/shared/providers/screen/gestures/pan/use-pan-behavior.d.ts.map +1 -1
  241. package/lib/typescript/shared/providers/screen/gestures/pinch/pinch-lifecycle.d.ts +1 -1
  242. package/lib/typescript/shared/providers/screen/gestures/pinch/pinch-lifecycle.d.ts.map +1 -1
  243. package/lib/typescript/shared/providers/screen/gestures/pinch/use-pinch-behavior.d.ts.map +1 -1
  244. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts +1 -2
  245. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts.map +1 -1
  246. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +3 -1
  247. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
  248. package/lib/typescript/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.d.ts.map +1 -1
  249. package/lib/typescript/shared/providers/stack/direct.provider.d.ts.map +1 -1
  250. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts +13 -0
  251. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts.map +1 -0
  252. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.d.ts +12 -0
  253. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.d.ts.map +1 -0
  254. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.d.ts +13 -0
  255. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.d.ts.map +1 -0
  256. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.d.ts +12 -0
  257. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.d.ts.map +1 -0
  258. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts +40 -0
  259. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts.map +1 -0
  260. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/index.d.ts +12 -0
  261. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/index.d.ts.map +1 -0
  262. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.d.ts +13 -0
  263. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.d.ts.map +1 -0
  264. package/lib/typescript/shared/providers/stack/managed.provider.d.ts.map +1 -1
  265. package/lib/typescript/shared/types/bounds.types.d.ts +19 -0
  266. package/lib/typescript/shared/types/bounds.types.d.ts.map +1 -1
  267. package/lib/typescript/shared/types/index.d.ts +2 -2
  268. package/lib/typescript/shared/types/index.d.ts.map +1 -1
  269. package/lib/typescript/shared/types/providers/managed-stack.types.d.ts +3 -9
  270. package/lib/typescript/shared/types/providers/managed-stack.types.d.ts.map +1 -1
  271. package/lib/typescript/shared/types/screen.types.d.ts +24 -0
  272. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  273. package/lib/typescript/shared/types/stack.types.d.ts +7 -0
  274. package/lib/typescript/shared/types/stack.types.d.ts.map +1 -1
  275. package/lib/typescript/shared/utils/bounds/navigation/reveal/build.d.ts.map +1 -1
  276. package/lib/typescript/shared/utils/bounds/navigation/reveal/config.d.ts +1 -0
  277. package/lib/typescript/shared/utils/bounds/navigation/reveal/config.d.ts.map +1 -1
  278. package/lib/typescript/shared/utils/create-provider.d.ts +17 -3
  279. package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
  280. package/lib/typescript/shared/utils/navigation/resolve-scene-neighbors.d.ts +2 -1
  281. package/lib/typescript/shared/utils/navigation/resolve-scene-neighbors.d.ts.map +1 -1
  282. package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts +2 -1
  283. package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts.map +1 -1
  284. package/lib/typescript/shared/utils/visibility-block-offset.d.ts +2 -0
  285. package/lib/typescript/shared/utils/visibility-block-offset.d.ts.map +1 -0
  286. package/package.json +11 -1
  287. package/src/blank-stack/components/stack-view.tsx +54 -48
  288. package/src/blank-stack/index.ts +1 -0
  289. package/src/blank-stack/navigators/create-blank-stack-navigator.tsx +7 -15
  290. package/src/blank-stack/types.ts +44 -29
  291. package/src/component-stack/components/stack-view.tsx +4 -11
  292. package/src/component-stack/navigators/create-component-stack-navigator.tsx +1 -1
  293. package/src/native-stack/navigators/createNativeStackNavigator.tsx +5 -0
  294. package/src/native-stack/types.ts +25 -0
  295. package/src/shared/adapters/with-screen-transitions/context.tsx +42 -0
  296. package/src/shared/adapters/with-screen-transitions/index.tsx +150 -0
  297. package/src/shared/adapters/with-screen-transitions/options.ts +101 -0
  298. package/src/shared/adapters/with-screen-transitions/stack-layout.tsx +233 -0
  299. package/src/shared/adapters/with-screen-transitions/types.ts +28 -0
  300. package/src/shared/components/activity/helpers.ts +8 -0
  301. package/src/shared/components/activity/index.tsx +2 -0
  302. package/src/shared/components/activity/variants/activity-container.tsx +25 -0
  303. package/src/shared/components/activity/variants/activity-screen.tsx +133 -0
  304. package/src/shared/components/create-boundary-component/hooks/use-measurer.ts +23 -4
  305. package/src/shared/components/create-boundary-component/utils/measured-bounds.ts +15 -0
  306. package/src/shared/components/screen-lifecycle/hooks/use-close-transition-intent.ts +9 -26
  307. package/src/shared/components/screen-lifecycle/index.tsx +1 -1
  308. package/src/shared/hooks/navigation/use-navigation-helpers.ts +9 -3
  309. package/src/shared/hooks/navigation/use-stack.tsx +115 -6
  310. package/src/shared/index.ts +5 -0
  311. package/src/shared/providers/screen/descriptors/descriptors.provider.tsx +31 -31
  312. package/src/shared/providers/screen/descriptors/index.tsx +1 -0
  313. package/src/shared/providers/screen/gestures/ownership/resolve-ownership.ts +2 -1
  314. package/src/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.ts +2 -2
  315. package/src/shared/providers/screen/gestures/pan/pan-lifecycle.ts +7 -2
  316. package/src/shared/providers/screen/gestures/pan/use-pan-behavior.ts +10 -2
  317. package/src/shared/providers/screen/gestures/pinch/pinch-lifecycle.ts +7 -2
  318. package/src/shared/providers/screen/gestures/pinch/use-pinch-behavior.ts +8 -3
  319. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/index.ts +12 -53
  320. package/src/shared/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +17 -1
  321. package/src/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.tsx +3 -16
  322. package/src/shared/providers/stack/direct.provider.tsx +13 -4
  323. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.ts +365 -0
  324. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/derive-managed-stack-state.ts +121 -0
  325. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/helpers.ts +158 -0
  326. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/reconcile-managed-routes.ts +188 -0
  327. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/types.ts +57 -0
  328. package/src/shared/providers/stack/helpers/managed-stack-state/index.ts +40 -0
  329. package/src/shared/providers/stack/helpers/managed-stack-state/managed-stack-controller.ts +160 -0
  330. package/src/shared/providers/stack/managed.provider.tsx +23 -39
  331. package/src/shared/types/bounds.types.ts +19 -0
  332. package/src/shared/types/index.ts +3 -0
  333. package/src/shared/types/providers/managed-stack.types.ts +6 -8
  334. package/src/shared/types/screen.types.ts +25 -0
  335. package/src/shared/types/stack.types.ts +11 -0
  336. package/src/shared/utils/bounds/navigation/reveal/build.ts +10 -6
  337. package/src/shared/utils/bounds/navigation/reveal/config.ts +1 -0
  338. package/src/shared/utils/create-provider.tsx +183 -8
  339. package/src/shared/utils/navigation/resolve-scene-neighbors.ts +9 -4
  340. package/src/shared/utils/navigation/sync-routes-with-removed.ts +38 -7
  341. package/src/shared/utils/visibility-block-offset.ts +4 -0
  342. package/lib/commonjs/blank-stack/components/stack-view.native.js +0 -64
  343. package/lib/commonjs/blank-stack/components/stack-view.native.js.map +0 -1
  344. package/lib/commonjs/shared/components/native-screen-container.js +0 -42
  345. package/lib/commonjs/shared/components/native-screen-container.js.map +0 -1
  346. package/lib/commonjs/shared/components/native-screen.js +0 -125
  347. package/lib/commonjs/shared/components/native-screen.js.map +0 -1
  348. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js +0 -51
  349. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js.map +0 -1
  350. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js +0 -15
  351. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js.map +0 -1
  352. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js +0 -14
  353. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js.map +0 -1
  354. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js +0 -13
  355. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js.map +0 -1
  356. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/index.js +0 -101
  357. package/lib/commonjs/shared/providers/stack/helpers/use-local-routes/index.js.map +0 -1
  358. package/lib/module/blank-stack/components/stack-view.native.js +0 -60
  359. package/lib/module/blank-stack/components/stack-view.native.js.map +0 -1
  360. package/lib/module/shared/components/native-screen-container.js +0 -37
  361. package/lib/module/shared/components/native-screen-container.js.map +0 -1
  362. package/lib/module/shared/components/native-screen.js +0 -119
  363. package/lib/module/shared/components/native-screen.js.map +0 -1
  364. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js +0 -47
  365. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.js.map +0 -1
  366. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js +0 -10
  367. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.js.map +0 -1
  368. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js +0 -9
  369. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.js.map +0 -1
  370. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js +0 -8
  371. package/lib/module/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.js.map +0 -1
  372. package/lib/module/shared/providers/stack/helpers/use-local-routes/index.js +0 -95
  373. package/lib/module/shared/providers/stack/helpers/use-local-routes/index.js.map +0 -1
  374. package/lib/typescript/blank-stack/components/stack-view.native.d.ts +0 -3
  375. package/lib/typescript/blank-stack/components/stack-view.native.d.ts.map +0 -1
  376. package/lib/typescript/shared/components/native-screen-container.d.ts +0 -6
  377. package/lib/typescript/shared/components/native-screen-container.d.ts.map +0 -1
  378. package/lib/typescript/shared/components/native-screen.d.ts +0 -12
  379. package/lib/typescript/shared/components/native-screen.d.ts.map +0 -1
  380. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.d.ts +0 -10
  381. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.d.ts.map +0 -1
  382. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.d.ts +0 -2
  383. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.d.ts.map +0 -1
  384. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.d.ts +0 -3
  385. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.d.ts.map +0 -1
  386. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.d.ts +0 -3
  387. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.d.ts.map +0 -1
  388. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/index.d.ts +0 -19
  389. package/lib/typescript/shared/providers/stack/helpers/use-local-routes/index.d.ts.map +0 -1
  390. package/src/blank-stack/components/stack-view.native.tsx +0 -74
  391. package/src/shared/components/native-screen-container.tsx +0 -33
  392. package/src/shared/components/native-screen.tsx +0 -176
  393. package/src/shared/providers/stack/helpers/use-local-routes/helpers/align-routes-with-latest.ts +0 -65
  394. package/src/shared/providers/stack/helpers/use-local-routes/helpers/are-descriptors-equal.ts +0 -15
  395. package/src/shared/providers/stack/helpers/use-local-routes/helpers/have-same-route-keys.ts +0 -12
  396. package/src/shared/providers/stack/helpers/use-local-routes/helpers/routes-are-identical.ts +0 -11
  397. package/src/shared/providers/stack/helpers/use-local-routes/index.ts +0 -147
@@ -1,6 +1,5 @@
1
1
  /** biome-ignore-all lint/correctness/useHookAtTopLevel: STACK_TYPE is stable per navigator */
2
2
  import { useLayoutEffect, useMemo, useRef } from "react";
3
- import { useAnimatedReaction } from "react-native-reanimated";
4
3
  import useStableCallback from "../../../hooks/use-stable-callback";
5
4
  import {
6
5
  type BaseDescriptor,
@@ -8,7 +7,6 @@ import {
8
7
  } from "../../../providers/screen/descriptors";
9
8
  import { useStackCoreContext } from "../../../providers/stack/core.provider";
10
9
  import { useManagedStackContext } from "../../../providers/stack/managed.provider";
11
- import type { AnimationStoreMap } from "../../../stores/animation.store";
12
10
  import { GestureStore } from "../../../stores/gesture.store";
13
11
  import {
14
12
  LifecycleTransitionRequestKind,
@@ -20,22 +18,24 @@ import { resetStoresForScreen } from "./helpers/reset-stores-for-screen";
20
18
 
21
19
  interface CloseHookParams {
22
20
  current: BaseDescriptor;
23
- animations: AnimationStoreMap;
24
21
  requestLifecycleTransition: SystemStoreActions["requestLifecycleTransition"];
25
22
  resetStores: () => void;
26
23
  }
27
24
 
28
- /**
29
- * Managed close - reacts to closingRouteKeysShared from ManagedStackContext.
30
- * Used by blank-stack and component-stack.
31
- */
32
25
  const useManagedClose = ({
33
26
  current,
34
27
  requestLifecycleTransition,
35
28
  resetStores,
36
29
  }: CloseHookParams) => {
37
- const { handleCloseRoute, closingRouteKeysShared } = useManagedStackContext();
38
- const routeKey = current.route.key;
30
+ const { handleCloseRoute } = useManagedStackContext();
31
+
32
+ useLayoutEffect(() => {
33
+ if (current.activity !== "closing") {
34
+ return;
35
+ }
36
+
37
+ requestLifecycleTransition(LifecycleTransitionRequestKind.ManagedClose, 0);
38
+ }, [current.activity, requestLifecycleTransition]);
39
39
 
40
40
  const handleManagedCloseEnd = useStableCallback((finished: boolean) => {
41
41
  if (!finished) return;
@@ -45,21 +45,6 @@ const useManagedClose = ({
45
45
  });
46
46
  });
47
47
 
48
- useAnimatedReaction(
49
- () => {
50
- const keys = closingRouteKeysShared.get();
51
- return keys?.includes(routeKey) ?? false;
52
- },
53
- (isClosing, wasClosing) => {
54
- if (!isClosing || wasClosing) return;
55
-
56
- requestLifecycleTransition(
57
- LifecycleTransitionRequestKind.ManagedClose,
58
- 0,
59
- );
60
- },
61
- );
62
-
63
48
  return { handleManagedCloseEnd };
64
49
  };
65
50
 
@@ -127,7 +112,6 @@ const useNativeStackClose = ({
127
112
  */
128
113
  export function useCloseTransitionIntent(
129
114
  current: BaseDescriptor,
130
- animations: AnimationStoreMap,
131
115
  system: SystemStoreMap,
132
116
  ): {
133
117
  handleManagedCloseEnd?: (finished: boolean) => void;
@@ -144,7 +128,6 @@ export function useCloseTransitionIntent(
144
128
 
145
129
  const closeParams: CloseHookParams = {
146
130
  current,
147
- animations,
148
131
  requestLifecycleTransition,
149
132
  resetStores,
150
133
  };
@@ -21,7 +21,7 @@ export const ScreenLifecycle = ({ children }: Props) => {
21
21
  const system = SystemStore.getBag(current.route.key);
22
22
 
23
23
  const { handleManagedCloseEnd, handleNativeCloseEnd } =
24
- useCloseTransitionIntent(current, animations, system);
24
+ useCloseTransitionIntent(current, system);
25
25
 
26
26
  useOpenTransitionIntent(current, animations, system);
27
27
 
@@ -1,9 +1,15 @@
1
1
  import { StackActions } from "@react-navigation/native";
2
2
  import { useCallback } from "react";
3
- import { useDescriptors } from "../../providers/screen/descriptors";
3
+ import { useDescriptorsStore } from "../../providers/screen/descriptors";
4
+ import { useStack } from "./use-stack";
4
5
 
5
6
  export function useNavigationHelpers() {
6
- const { current } = useDescriptors();
7
+ const current = useDescriptorsStore((store) => store.descriptors.current);
8
+ const requestStackDismiss = useStack((stack) => stack.requestDismiss);
9
+
10
+ const requestDismiss = useCallback((): boolean => {
11
+ return requestStackDismiss?.({ route: current.route }) ?? false;
12
+ }, [current.route, requestStackDismiss]);
7
13
 
8
14
  const dismissScreen = useCallback((): boolean => {
9
15
  const state = current.navigation.getState();
@@ -21,5 +27,5 @@ export function useNavigationHelpers() {
21
27
  return true;
22
28
  }, [current]);
23
29
 
24
- return { dismissScreen };
30
+ return { dismissScreen, requestDismiss };
25
31
  }
@@ -1,5 +1,13 @@
1
1
  import type { Route } from "@react-navigation/native";
2
- import { createContext, useContext } from "react";
2
+ import {
3
+ createContext,
4
+ type ReactNode,
5
+ useCallback,
6
+ useContext,
7
+ useLayoutEffect,
8
+ useRef,
9
+ useSyncExternalStore,
10
+ } from "react";
3
11
  import type { DerivedValue } from "react-native-reanimated";
4
12
  import type { StackCoreContextValue } from "../../providers/stack/core.provider";
5
13
  import type { OverlayProps } from "../../types/overlay.types";
@@ -25,23 +33,124 @@ export interface StackDescriptor<
25
33
  export type StackScene<TDescriptor extends StackDescriptor = StackDescriptor> =
26
34
  BaseStackScene<TDescriptor>;
27
35
 
36
+ type StackDismissRequest = (payload: { route: BaseStackRoute }) => boolean;
37
+ type StackSelector<T> = (stack: StackContextValue) => T;
38
+
28
39
  export interface StackContextValue extends StackCoreContextValue {
29
40
  navigatorKey: string;
30
41
  routeKeys: string[];
31
42
  routes: Route<string>[];
32
43
  scenes: StackScene[];
33
44
  optimisticFocusedIndex: DerivedValue<number>;
45
+ focusedIndex: number;
46
+ requestDismiss?: StackDismissRequest;
47
+ }
48
+
49
+ interface StackStoreApi {
50
+ getSnapshot: () => StackContextValue;
51
+ subscribe: (listener: () => void) => () => void;
34
52
  }
35
53
 
36
- export const StackContext = createContext<StackContextValue | null>(null);
54
+ interface MutableStackStoreApi extends StackStoreApi {
55
+ notify: () => void;
56
+ setSnapshot: (snapshot: StackContextValue) => boolean;
57
+ }
58
+
59
+ const createStackStore = (
60
+ initialSnapshot: StackContextValue,
61
+ ): MutableStackStoreApi => {
62
+ let snapshot = initialSnapshot;
63
+ const listeners = new Set<() => void>();
64
+
65
+ return {
66
+ getSnapshot: () => snapshot,
67
+ notify: () => {
68
+ for (const listener of listeners) {
69
+ listener();
70
+ }
71
+ },
72
+ setSnapshot: (nextSnapshot) => {
73
+ if (Object.is(snapshot, nextSnapshot)) {
74
+ return false;
75
+ }
76
+
77
+ snapshot = nextSnapshot;
78
+ return true;
79
+ },
80
+ subscribe: (listener) => {
81
+ listeners.add(listener);
82
+ return () => {
83
+ listeners.delete(listener);
84
+ };
85
+ },
86
+ };
87
+ };
88
+
89
+ const StackContext = createContext<StackStoreApi | null>(null);
37
90
  StackContext.displayName = "Stack";
38
91
 
39
- export function useStack<T extends StackContextValue = StackContextValue>(): T {
40
- const context = useContext(StackContext);
92
+ export function StackProvider({
93
+ children,
94
+ value,
95
+ }: {
96
+ children: ReactNode;
97
+ value: StackContextValue;
98
+ }) {
99
+ const storeRef = useRef<MutableStackStoreApi | null>(null);
100
+ const pendingNotifyRef = useRef(false);
101
+
102
+ let store = storeRef.current;
103
+ if (!store) {
104
+ store = createStackStore(value);
105
+ storeRef.current = store;
106
+ }
41
107
 
42
- if (context === null) {
108
+ pendingNotifyRef.current =
109
+ store.setSnapshot(value) || pendingNotifyRef.current;
110
+
111
+ useLayoutEffect(() => {
112
+ if (!pendingNotifyRef.current) {
113
+ return;
114
+ }
115
+
116
+ pendingNotifyRef.current = false;
117
+ store.notify();
118
+ });
119
+
120
+ return (
121
+ <StackContext.Provider value={store}>{children}</StackContext.Provider>
122
+ );
123
+ }
124
+
125
+ function useStackStore(): StackStoreApi {
126
+ const store = useContext(StackContext);
127
+
128
+ if (store === null) {
43
129
  throw new Error("useStack must be used within a Stack provider");
44
130
  }
45
131
 
46
- return context as T;
132
+ return store;
133
+ }
134
+
135
+ export function useStack<T extends StackContextValue = StackContextValue>(): T;
136
+ export function useStack<T>(selector: StackSelector<T>): T;
137
+ export function useStack<T>(
138
+ selector?: StackSelector<T>,
139
+ ): StackContextValue | T {
140
+ const store = useStackStore();
141
+ const selectorRef = useRef<StackSelector<StackContextValue | T>>(
142
+ selector ?? ((stack) => stack),
143
+ );
144
+ selectorRef.current = selector ?? ((stack) => stack);
145
+
146
+ const getSelectedSnapshot = useCallback(
147
+ () => selectorRef.current(store.getSnapshot()),
148
+ [store],
149
+ );
150
+
151
+ return useSyncExternalStore(
152
+ store.subscribe,
153
+ getSelectedSnapshot,
154
+ getSelectedSnapshot,
155
+ );
47
156
  }
@@ -1,4 +1,5 @@
1
1
  import { FlatList, Pressable, ScrollView, View } from "react-native";
2
+ import { withScreenTransitions } from "./adapters/with-screen-transitions";
2
3
  import {
3
4
  Boundary,
4
5
  createBoundaryComponent,
@@ -10,6 +11,7 @@ import { Presets, Specs } from "./configs";
10
11
  export default {
11
12
  createTransitionAwareComponent,
12
13
  createBoundaryComponent,
14
+ withScreenTransitions,
13
15
  Boundary,
14
16
  View: createTransitionAwareComponent(View),
15
17
  Pressable: createTransitionAwareComponent(Pressable),
@@ -24,6 +26,8 @@ export default {
24
26
  Specs,
25
27
  };
26
28
 
29
+ export type { NativeStackAdapterOptions } from "./adapters/with-screen-transitions";
30
+ export { withScreenTransitions } from "./adapters/with-screen-transitions";
27
31
  export { snapTo } from "./animation/snap-to";
28
32
  export {
29
33
  NAVIGATION_MASK_CONTAINER_STYLE_ID,
@@ -53,6 +57,7 @@ export type {
53
57
  BoundsNavigationZoomOpacityRanges,
54
58
  BoundsNavigationZoomOptions,
55
59
  BoundsNavigationZoomStyle,
60
+ InactiveBehavior,
56
61
  OverlayProps,
57
62
  ScreenInterpolationProps,
58
63
  ScreenStyleInterpolator,
@@ -8,8 +8,8 @@ import { getAncestorKeys } from "./helpers/get-ancestor-keys";
8
8
 
9
9
  /**
10
10
  * Base descriptor interface - minimal contract for all stack types.
11
- * This allows blank-stack and native-stack to work with the shared
12
- * providers without tight coupling to React Navigation.
11
+ * This allows stack implementations to work with the shared providers without
12
+ * tight coupling to React Navigation.
13
13
  */
14
14
  export type BaseDescriptor = BaseStackDescriptor;
15
15
 
@@ -23,6 +23,13 @@ export interface DescriptorsContextValue<
23
23
 
24
24
  export type DescriptorDerivationsContextValue = DescriptorDerivations;
25
25
 
26
+ interface DescriptorStoreValue<
27
+ TDescriptor extends BaseDescriptor = BaseDescriptor,
28
+ > {
29
+ descriptors: DescriptorsContextValue<TDescriptor>;
30
+ derivations: DescriptorDerivationsContextValue;
31
+ }
32
+
26
33
  interface DescriptorsProviderProps<TDescriptor extends BaseDescriptor> {
27
34
  children: ReactNode;
28
35
  previous?: TDescriptor;
@@ -30,35 +37,21 @@ interface DescriptorsProviderProps<TDescriptor extends BaseDescriptor> {
30
37
  next?: TDescriptor;
31
38
  }
32
39
 
33
- type InternalProviderProps = DescriptorsProviderProps<BaseDescriptor>;
34
-
35
40
  const {
36
41
  DescriptorsProvider: InternalDescriptorsProvider,
37
- useDescriptorsContext,
42
+ useDescriptorsStore,
38
43
  } = createProvider("Descriptors", { guarded: true })<
39
- InternalProviderProps,
40
- DescriptorsContextValue<BaseDescriptor>
41
- >(({ previous, current, next }) => {
42
- const value = useMemo(
44
+ DescriptorsProviderProps<BaseDescriptor>,
45
+ DescriptorStoreValue<BaseDescriptor>
46
+ >(({ previous, current, next, children }) => {
47
+ const descriptors = useMemo(
43
48
  () => ({ previous, current, next }),
44
49
  [previous, current, next],
45
50
  );
46
51
 
47
- return {
48
- value,
49
- };
50
- });
51
-
52
- const {
53
- DescriptorDerivationsProvider: InternalDescriptorDerivationsProvider,
54
- useDescriptorDerivationsContext,
55
- } = createProvider("DescriptorDerivations", { guarded: true })<
56
- InternalProviderProps,
57
- DescriptorDerivationsContextValue
58
- >(({ previous, current, next, children }) => {
59
52
  const ancestorKeys = useMemo(() => getAncestorKeys(current), [current]);
60
53
 
61
- const value = useMemo(
54
+ const derivations = useMemo(
62
55
  () =>
63
56
  deriveDescriptorDerivations({
64
57
  previous,
@@ -69,6 +62,14 @@ const {
69
62
  [previous, current, next, ancestorKeys],
70
63
  );
71
64
 
65
+ const value = useMemo(
66
+ () => ({
67
+ descriptors,
68
+ derivations,
69
+ }),
70
+ [descriptors, derivations],
71
+ );
72
+
72
73
  return {
73
74
  value,
74
75
  children,
@@ -85,23 +86,22 @@ export function DescriptorsProvider<TDescriptor extends BaseDescriptor>({
85
86
  previous,
86
87
  current,
87
88
  next,
89
+ children,
88
90
  };
89
91
 
90
- return (
91
- <InternalDescriptorsProvider {...providerProps}>
92
- <InternalDescriptorDerivationsProvider {...providerProps}>
93
- {children}
94
- </InternalDescriptorDerivationsProvider>
95
- </InternalDescriptorsProvider>
96
- );
92
+ return <InternalDescriptorsProvider {...providerProps} />;
97
93
  }
98
94
 
99
95
  export function useDescriptors<
100
96
  TDescriptor extends BaseDescriptor = BaseDescriptor,
101
97
  >() {
102
- return useDescriptorsContext() as DescriptorsContextValue<TDescriptor>;
98
+ return useDescriptorsStore(
99
+ (store) => store.descriptors,
100
+ ) as DescriptorsContextValue<TDescriptor>;
103
101
  }
104
102
 
105
103
  export function useDescriptorDerivations(): DescriptorDerivationsContextValue {
106
- return useDescriptorDerivationsContext();
104
+ return useDescriptorsStore((store) => store.derivations);
107
105
  }
106
+
107
+ export { useDescriptorsStore };
@@ -3,4 +3,5 @@ export {
3
3
  DescriptorsProvider,
4
4
  useDescriptorDerivations,
5
5
  useDescriptors,
6
+ useDescriptorsStore,
6
7
  } from "./descriptors.provider";
@@ -87,6 +87,7 @@ export function shouldDeferToChildClaim(
87
87
  "worklet";
88
88
  if (!childClaim) return false;
89
89
  if (childClaim.routeKey === selfRouteKey) return false;
90
- if (childClaim.isDismissing.get()) return false;
90
+ // A closing child still owns its axis until its claim is cleaned up; otherwise
91
+ // an ancestor can steal the next drag while the previous screen is visible.
91
92
  return true;
92
93
  }
@@ -1,4 +1,4 @@
1
- import { useEffect, useMemo } from "react";
1
+ import { useLayoutEffect, useMemo } from "react";
2
2
  import { GestureStore } from "../../../../stores/gesture.store";
3
3
  import {
4
4
  type ClaimedDirections,
@@ -115,7 +115,7 @@ export function useWalkUpAndRegisterShadowingClaims(
115
115
  [parentContext, claimedDirections],
116
116
  );
117
117
 
118
- useEffect(() => {
118
+ useLayoutEffect(() => {
119
119
  if (!isTopMostScreen || !shadowedAncestors.length) {
120
120
  return;
121
121
  }
@@ -1,4 +1,4 @@
1
- import { clamp } from "react-native-reanimated";
1
+ import { clamp, runOnJS } from "react-native-reanimated";
2
2
  import { EPSILON, FALSE, TRUE } from "../../../../constants";
3
3
  import { animateToProgress } from "../../../../utils/animation/animate-to-progress";
4
4
  import { emit } from "../../../../utils/animation/emit";
@@ -94,9 +94,10 @@ export const trackPanGesture = (
94
94
  export const finalizePanRelease = (
95
95
  release: PanReleaseResult,
96
96
  runtime: PanGestureRuntime,
97
- dismissScreen: (() => void) | undefined,
97
+ dismissScreen: ((finished: boolean) => void) | undefined,
98
98
  dimensions: GestureDimensions,
99
99
  rawEvent: PanGestureEvent,
100
+ requestDismiss?: () => void,
100
101
  ) => {
101
102
  "worklet";
102
103
  const {
@@ -132,6 +133,10 @@ export const finalizePanRelease = (
132
133
  return;
133
134
  }
134
135
 
136
+ if (plan.shouldDismiss && requestDismiss) {
137
+ runOnJS(requestDismiss)();
138
+ }
139
+
135
140
  animateToProgress({
136
141
  target: plan.target,
137
142
  onAnimationFinish: plan.shouldDismiss ? dismissScreen : undefined,
@@ -26,7 +26,7 @@ export const usePanBehavior = (
26
26
  screenOptions: ScreenOptionsContextValue,
27
27
  dimensions: GestureDimensions,
28
28
  ): PanBehavior => {
29
- const { dismissScreen } = useNavigationHelpers();
29
+ const { dismissScreen, requestDismiss } = useNavigationHelpers();
30
30
  const { withSensitivity, resetSensitivity } =
31
31
  usePanGestureSensitivity(screenOptions);
32
32
 
@@ -76,9 +76,17 @@ export const usePanBehavior = (
76
76
  dismissScreen,
77
77
  dimensions,
78
78
  rawEvent,
79
+ requestDismiss,
79
80
  );
80
81
  },
81
- [runtime, screenOptions, dimensions, dismissScreen, withSensitivity],
82
+ [
83
+ runtime,
84
+ screenOptions,
85
+ dimensions,
86
+ dismissScreen,
87
+ requestDismiss,
88
+ withSensitivity,
89
+ ],
82
90
  );
83
91
 
84
92
  return useMemo(
@@ -1,4 +1,4 @@
1
- import { clamp } from "react-native-reanimated";
1
+ import { clamp, runOnJS } from "react-native-reanimated";
2
2
  import { EPSILON, FALSE, TRUE } from "../../../../constants";
3
3
  import { animateToProgress } from "../../../../utils/animation/animate-to-progress";
4
4
  import { emit } from "../../../../utils/animation/emit";
@@ -73,7 +73,8 @@ export const trackPinchGesture = (
73
73
  export const finalizePinchRelease = (
74
74
  release: PinchReleaseResult,
75
75
  runtime: PinchGestureRuntime,
76
- dismissScreen: (() => void) | undefined,
76
+ dismissScreen: ((finished: boolean) => void) | undefined,
77
+ requestDismiss?: () => void,
77
78
  ) => {
78
79
  "worklet";
79
80
  const {
@@ -92,6 +93,10 @@ export const finalizePinchRelease = (
92
93
  resetValuesImmediately: release.resetValuesImmediately,
93
94
  });
94
95
 
96
+ if (release.shouldDismiss && requestDismiss) {
97
+ runOnJS(requestDismiss)();
98
+ }
99
+
95
100
  animateToProgress({
96
101
  target: release.target,
97
102
  onAnimationFinish: release.shouldDismiss ? dismissScreen : undefined,
@@ -24,7 +24,7 @@ export const usePinchBehavior = (
24
24
  runtime: SharedValue<PinchGestureRuntime>,
25
25
  screenOptions: ScreenOptionsContextValue,
26
26
  ): PinchBehavior => {
27
- const { dismissScreen } = useNavigationHelpers();
27
+ const { dismissScreen, requestDismiss } = useNavigationHelpers();
28
28
  const { withSensitivity, resetSensitivity } =
29
29
  usePinchGestureSensitivity(screenOptions);
30
30
 
@@ -69,9 +69,14 @@ export const usePinchBehavior = (
69
69
  .hasSnapPoints
70
70
  ? resolveSnapPinchRelease(event, latestRuntime)
71
71
  : resolvePinchRelease(event, latestRuntime);
72
- finalizePinchRelease(release, latestRuntime, dismissScreen);
72
+ finalizePinchRelease(
73
+ release,
74
+ latestRuntime,
75
+ dismissScreen,
76
+ requestDismiss,
77
+ );
73
78
  },
74
- [runtime, screenOptions, dismissScreen, withSensitivity],
79
+ [runtime, screenOptions, dismissScreen, requestDismiss, withSensitivity],
75
80
  );
76
81
 
77
82
  return useMemo(
@@ -17,7 +17,6 @@ type ResolveSlotStylesContext = {
17
17
  localStylesMaps: LocalStyleLayers;
18
18
  ancestorStylesMap: NormalizedTransitionInterpolatedStyle;
19
19
  previousStyleStatesBySlot: ResettableStyleStatesBySlot;
20
- deferLocalSlotResets: boolean;
21
20
  resolvedStylesMap: NormalizedTransitionInterpolatedStyle;
22
21
  nextPreviousStyleStatesBySlot: ResettableStyleStatesBySlot;
23
22
  };
@@ -75,42 +74,32 @@ const hasResettableDisappearedKeys = (
75
74
  const getResolvedSlotOutput = ({
76
75
  slot,
77
76
  previousState,
78
- resetDroppedKeys,
79
- carryPreviousState,
80
77
  }: {
81
78
  slot: NormalizedTransitionSlotStyle | undefined;
82
79
  previousState: ResettableStyleState | undefined;
83
- resetDroppedKeys: boolean;
84
- carryPreviousState: boolean;
85
80
  }) => {
86
81
  "worklet";
87
82
  const state = getResolvedSlotState(slot);
88
83
 
89
- const hasStyleResetPatch =
90
- resetDroppedKeys &&
91
- hasResettableDisappearedKeys(
92
- previousState?.styleKeys,
93
- previousState?.styleResetValues,
94
- state.styleKeys,
95
- );
96
- const hasPropResetPatch =
97
- resetDroppedKeys &&
98
- hasResettableDisappearedKeys(
99
- previousState?.propKeys,
100
- previousState?.propResetValues,
101
- state.propKeys,
102
- );
84
+ const hasStyleResetPatch = hasResettableDisappearedKeys(
85
+ previousState?.styleKeys,
86
+ previousState?.styleResetValues,
87
+ state.styleKeys,
88
+ );
89
+ const hasPropResetPatch = hasResettableDisappearedKeys(
90
+ previousState?.propKeys,
91
+ previousState?.propResetValues,
92
+ state.propKeys,
93
+ );
103
94
  const hasResetPatch = hasEitherResetPatch(
104
95
  hasStyleResetPatch,
105
96
  hasPropResetPatch,
106
97
  );
107
- const nextState =
108
- state.nextState ?? (carryPreviousState ? previousState : undefined);
109
98
 
110
99
  if (!hasResetPatch) {
111
100
  return {
112
101
  resolvedSlot: getForwardedSlot(slot, state.hasAnyKeys),
113
- nextState,
102
+ nextState: state.nextState,
114
103
  };
115
104
  }
116
105
 
@@ -126,15 +115,10 @@ const getResolvedSlotOutput = ({
126
115
  hasStyleResetPatch,
127
116
  hasPropResetPatch,
128
117
  }),
129
- nextState,
118
+ nextState: state.nextState,
130
119
  };
131
120
  };
132
121
 
133
- const hasLocalStyleSource = (context: ResolveSlotStylesContext) => {
134
- "worklet";
135
- return context.localStylesMaps.length > 0;
136
- };
137
-
138
122
  const hasLocalSlot = (context: ResolveSlotStylesContext, slotId: string) => {
139
123
  "worklet";
140
124
 
@@ -147,25 +131,6 @@ const hasLocalSlot = (context: ResolveSlotStylesContext, slotId: string) => {
147
131
  return false;
148
132
  };
149
133
 
150
- const shouldDeferMissingLocalSlotReset = (
151
- context: ResolveSlotStylesContext,
152
- slotId: string,
153
- ) => {
154
- "worklet";
155
- const canInherit = shouldSlotInherit(slotId);
156
- const localSlotExists = hasLocalSlot(context, slotId);
157
- const hasInheritedSlot =
158
- canInherit && context.ancestorStylesMap[slotId] !== undefined;
159
-
160
- return (
161
- context.deferLocalSlotResets &&
162
- !hasLocalStyleSource(context) &&
163
- !canInherit &&
164
- !localSlotExists &&
165
- !hasInheritedSlot
166
- );
167
- };
168
-
169
134
  const mergeBucket = (
170
135
  resolvedBucket: Record<string, unknown> | undefined,
171
136
  source: Record<string, unknown> | undefined,
@@ -421,12 +386,9 @@ const appendResolvedSlot = (
421
386
  slotId: string,
422
387
  ) => {
423
388
  "worklet";
424
- const shouldDeferReset = shouldDeferMissingLocalSlotReset(context, slotId);
425
389
  const { resolvedSlot, nextState } = getResolvedSlotOutput({
426
390
  slot: getSlotForId(context, slotId),
427
391
  previousState: context.previousStyleStatesBySlot[slotId],
428
- resetDroppedKeys: !shouldDeferReset,
429
- carryPreviousState: shouldDeferReset,
430
392
  });
431
393
 
432
394
  writeResolvedSlotOutput({
@@ -505,12 +467,10 @@ export const resolveSlotStyles = ({
505
467
  localStylesMaps,
506
468
  ancestorStylesMap,
507
469
  previousStyleStatesBySlot,
508
- deferLocalSlotResets = false,
509
470
  }: {
510
471
  localStylesMaps: LocalStyleLayers;
511
472
  ancestorStylesMap: NormalizedTransitionInterpolatedStyle;
512
473
  previousStyleStatesBySlot: ResettableStyleStatesBySlot;
513
- deferLocalSlotResets?: boolean;
514
474
  }) => {
515
475
  "worklet";
516
476
  const resolvedStylesMap: NormalizedTransitionInterpolatedStyle = {};
@@ -519,7 +479,6 @@ export const resolveSlotStyles = ({
519
479
  localStylesMaps,
520
480
  ancestorStylesMap,
521
481
  previousStyleStatesBySlot,
522
- deferLocalSlotResets,
523
482
  resolvedStylesMap,
524
483
  nextPreviousStyleStatesBySlot,
525
484
  };