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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/README.md +103 -8
  2. package/lib/commonjs/blank-stack/components/adjusted-screen-container.js +36 -0
  3. package/lib/commonjs/blank-stack/components/adjusted-screen-container.js.map +1 -0
  4. package/lib/commonjs/blank-stack/components/{screens.js → adjusted-screen.js} +31 -11
  5. package/lib/commonjs/blank-stack/components/adjusted-screen.js.map +1 -0
  6. package/lib/commonjs/blank-stack/components/stack-view.js +33 -41
  7. package/lib/commonjs/blank-stack/components/stack-view.js.map +1 -1
  8. package/lib/commonjs/blank-stack/components/stack-view.native.js +81 -0
  9. package/lib/commonjs/blank-stack/components/stack-view.native.js.map +1 -0
  10. package/lib/commonjs/component-stack/components/component-screen-container.js +23 -0
  11. package/lib/commonjs/component-stack/components/component-screen-container.js.map +1 -0
  12. package/lib/commonjs/component-stack/components/component-screen.js +36 -0
  13. package/lib/commonjs/component-stack/components/component-screen.js.map +1 -0
  14. package/lib/commonjs/component-stack/components/stack-view.js +64 -0
  15. package/lib/commonjs/component-stack/components/stack-view.js.map +1 -0
  16. package/lib/commonjs/component-stack/index.js +3 -10
  17. package/lib/commonjs/component-stack/index.js.map +1 -1
  18. package/lib/commonjs/component-stack/navigators/create-component-stack-navigator.js +52 -0
  19. package/lib/commonjs/component-stack/navigators/create-component-stack-navigator.js.map +1 -0
  20. package/lib/commonjs/native-stack/views/NativeStackView.native.js +103 -105
  21. package/lib/commonjs/native-stack/views/NativeStackView.native.js.map +1 -1
  22. package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js +0 -25
  23. package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
  24. package/lib/commonjs/shared/components/overlay/index.js +1 -3
  25. package/lib/commonjs/shared/components/overlay/index.js.map +1 -1
  26. package/lib/commonjs/shared/constants.js +3 -1
  27. package/lib/commonjs/shared/constants.js.map +1 -1
  28. package/lib/commonjs/{blank-stack/controllers/blank-stack-lifecycle.js → shared/controller/managed-lifecycle.js} +16 -19
  29. package/lib/commonjs/shared/controller/managed-lifecycle.js.map +1 -0
  30. package/lib/commonjs/shared/hooks/animation/use-high-refresh-rate.js +7 -1
  31. package/lib/commonjs/shared/hooks/animation/use-high-refresh-rate.js.map +1 -1
  32. package/lib/commonjs/shared/hooks/animation/use-screen-animation.js +2 -2
  33. package/lib/commonjs/shared/hooks/animation/use-screen-animation.js.map +1 -1
  34. package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js +3 -1
  35. package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  36. package/lib/commonjs/shared/hooks/navigation/use-stack.js.map +1 -1
  37. package/lib/commonjs/shared/hooks/reanimated/use-shared-value-state.js +5 -0
  38. package/lib/commonjs/shared/hooks/reanimated/use-shared-value-state.js.map +1 -1
  39. package/lib/commonjs/shared/providers/layout-anchor.provider.js +73 -0
  40. package/lib/commonjs/shared/providers/layout-anchor.provider.js.map +1 -0
  41. package/lib/commonjs/shared/providers/register-bounds.provider.js +9 -4
  42. package/lib/commonjs/shared/providers/register-bounds.provider.js.map +1 -1
  43. package/lib/commonjs/shared/providers/screen/keys.provider.js +2 -2
  44. package/lib/commonjs/shared/providers/screen/styles.provider.js +38 -4
  45. package/lib/commonjs/shared/providers/screen/styles.provider.js.map +1 -1
  46. package/lib/commonjs/shared/providers/stack/core.provider.js +35 -12
  47. package/lib/commonjs/shared/providers/stack/core.provider.js.map +1 -1
  48. package/lib/commonjs/shared/providers/stack/direct.provider.js +6 -4
  49. package/lib/commonjs/shared/providers/stack/direct.provider.js.map +1 -1
  50. package/lib/commonjs/shared/providers/stack/managed.provider.js +7 -5
  51. package/lib/commonjs/shared/providers/stack/managed.provider.js.map +1 -1
  52. package/lib/commonjs/shared/types/index.js.map +1 -1
  53. package/lib/commonjs/shared/types/stack.types.js +26 -0
  54. package/lib/commonjs/shared/types/stack.types.js.map +1 -1
  55. package/lib/commonjs/shared/utils/bounds/index.js +13 -1
  56. package/lib/commonjs/shared/utils/bounds/index.js.map +1 -1
  57. package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js +20 -45
  58. package/lib/commonjs/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
  59. package/lib/module/blank-stack/components/adjusted-screen-container.js +31 -0
  60. package/lib/module/blank-stack/components/adjusted-screen-container.js.map +1 -0
  61. package/lib/module/blank-stack/components/{screens.js → adjusted-screen.js} +30 -10
  62. package/lib/module/blank-stack/components/adjusted-screen.js.map +1 -0
  63. package/lib/module/blank-stack/components/stack-view.js +33 -41
  64. package/lib/module/blank-stack/components/stack-view.js.map +1 -1
  65. package/lib/module/blank-stack/components/stack-view.native.js +76 -0
  66. package/lib/module/blank-stack/components/stack-view.native.js.map +1 -0
  67. package/lib/module/component-stack/components/component-screen-container.js +18 -0
  68. package/lib/module/component-stack/components/component-screen-container.js.map +1 -0
  69. package/lib/module/component-stack/components/component-screen.js +30 -0
  70. package/lib/module/component-stack/components/component-screen.js.map +1 -0
  71. package/lib/module/component-stack/components/stack-view.js +59 -0
  72. package/lib/module/component-stack/components/stack-view.js.map +1 -0
  73. package/lib/module/component-stack/index.js +1 -2
  74. package/lib/module/component-stack/index.js.map +1 -1
  75. package/lib/module/component-stack/navigators/create-component-stack-navigator.js +48 -0
  76. package/lib/module/component-stack/navigators/create-component-stack-navigator.js.map +1 -0
  77. package/lib/module/native-stack/views/NativeStackView.native.js +103 -105
  78. package/lib/module/native-stack/views/NativeStackView.native.js.map +1 -1
  79. package/lib/module/shared/components/overlay/helpers/get-active-overlay.js +0 -24
  80. package/lib/module/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
  81. package/lib/module/shared/components/overlay/index.js +1 -3
  82. package/lib/module/shared/components/overlay/index.js.map +1 -1
  83. package/lib/module/shared/constants.js +2 -0
  84. package/lib/module/shared/constants.js.map +1 -1
  85. package/lib/module/{blank-stack/controllers/blank-stack-lifecycle.js → shared/controller/managed-lifecycle.js} +14 -17
  86. package/lib/module/shared/controller/managed-lifecycle.js.map +1 -0
  87. package/lib/module/shared/hooks/animation/use-high-refresh-rate.js +8 -1
  88. package/lib/module/shared/hooks/animation/use-high-refresh-rate.js.map +1 -1
  89. package/lib/module/shared/hooks/animation/use-screen-animation.js +2 -2
  90. package/lib/module/shared/hooks/animation/use-screen-animation.js.map +1 -1
  91. package/lib/module/shared/hooks/gestures/use-build-gestures.js +4 -2
  92. package/lib/module/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  93. package/lib/module/shared/hooks/navigation/use-stack.js.map +1 -1
  94. package/lib/module/shared/hooks/reanimated/use-shared-value-state.js +5 -0
  95. package/lib/module/shared/hooks/reanimated/use-shared-value-state.js.map +1 -1
  96. package/lib/module/shared/providers/layout-anchor.provider.js +67 -0
  97. package/lib/module/shared/providers/layout-anchor.provider.js.map +1 -0
  98. package/lib/module/shared/providers/register-bounds.provider.js +9 -4
  99. package/lib/module/shared/providers/register-bounds.provider.js.map +1 -1
  100. package/lib/module/shared/providers/screen/keys.provider.js +2 -2
  101. package/lib/module/shared/providers/screen/styles.provider.js +39 -5
  102. package/lib/module/shared/providers/screen/styles.provider.js.map +1 -1
  103. package/lib/module/shared/providers/stack/core.provider.js +34 -11
  104. package/lib/module/shared/providers/stack/core.provider.js.map +1 -1
  105. package/lib/module/shared/providers/stack/direct.provider.js +6 -4
  106. package/lib/module/shared/providers/stack/direct.provider.js.map +1 -1
  107. package/lib/module/shared/providers/stack/managed.provider.js +7 -5
  108. package/lib/module/shared/providers/stack/managed.provider.js.map +1 -1
  109. package/lib/module/shared/types/index.js.map +1 -1
  110. package/lib/module/shared/types/stack.types.js +30 -1
  111. package/lib/module/shared/types/stack.types.js.map +1 -1
  112. package/lib/module/shared/utils/bounds/index.js +13 -1
  113. package/lib/module/shared/utils/bounds/index.js.map +1 -1
  114. package/lib/module/shared/utils/navigation/sync-routes-with-removed.js +20 -45
  115. package/lib/module/shared/utils/navigation/sync-routes-with-removed.js.map +1 -1
  116. package/lib/typescript/blank-stack/components/adjusted-screen-container.d.ts +6 -0
  117. package/lib/typescript/blank-stack/components/adjusted-screen-container.d.ts.map +1 -0
  118. package/lib/typescript/blank-stack/components/{screens.d.ts → adjusted-screen.d.ts} +2 -2
  119. package/lib/typescript/blank-stack/components/adjusted-screen.d.ts.map +1 -0
  120. package/lib/typescript/blank-stack/components/stack-view.d.ts +1 -1
  121. package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
  122. package/lib/typescript/blank-stack/components/stack-view.native.d.ts +4 -0
  123. package/lib/typescript/blank-stack/components/stack-view.native.d.ts.map +1 -0
  124. package/lib/typescript/blank-stack/types.d.ts +3 -1
  125. package/lib/typescript/blank-stack/types.d.ts.map +1 -1
  126. package/lib/typescript/component-stack/components/component-screen-container.d.ts +6 -0
  127. package/lib/typescript/component-stack/components/component-screen-container.d.ts.map +1 -0
  128. package/lib/typescript/component-stack/components/component-screen.d.ts +8 -0
  129. package/lib/typescript/component-stack/components/component-screen.d.ts.map +1 -0
  130. package/lib/typescript/component-stack/components/stack-view.d.ts +4 -0
  131. package/lib/typescript/component-stack/components/stack-view.d.ts.map +1 -0
  132. package/lib/typescript/component-stack/index.d.ts +2 -3
  133. package/lib/typescript/component-stack/index.d.ts.map +1 -1
  134. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts +16 -0
  135. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts.map +1 -0
  136. package/lib/typescript/component-stack/types.d.ts +24 -191
  137. package/lib/typescript/component-stack/types.d.ts.map +1 -1
  138. package/lib/typescript/native-stack/views/NativeStackView.native.d.ts +1 -1
  139. package/lib/typescript/native-stack/views/NativeStackView.native.d.ts.map +1 -1
  140. package/lib/typescript/shared/components/overlay/helpers/get-active-overlay.d.ts +0 -9
  141. package/lib/typescript/shared/components/overlay/helpers/get-active-overlay.d.ts.map +1 -1
  142. package/lib/typescript/shared/components/overlay/index.d.ts +0 -2
  143. package/lib/typescript/shared/components/overlay/index.d.ts.map +1 -1
  144. package/lib/typescript/shared/constants.d.ts +1 -0
  145. package/lib/typescript/shared/constants.d.ts.map +1 -1
  146. package/lib/typescript/shared/controller/managed-lifecycle.d.ts +9 -0
  147. package/lib/typescript/shared/controller/managed-lifecycle.d.ts.map +1 -0
  148. package/lib/typescript/shared/hooks/animation/use-high-refresh-rate.d.ts +7 -0
  149. package/lib/typescript/shared/hooks/animation/use-high-refresh-rate.d.ts.map +1 -1
  150. package/lib/typescript/shared/hooks/animation/use-screen-animation.d.ts +2 -1
  151. package/lib/typescript/shared/hooks/animation/use-screen-animation.d.ts.map +1 -1
  152. package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts.map +1 -1
  153. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +4 -9
  154. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
  155. package/lib/typescript/shared/hooks/reanimated/use-shared-value-state.d.ts.map +1 -1
  156. package/lib/typescript/shared/index.d.ts +13 -13
  157. package/lib/typescript/shared/index.d.ts.map +1 -1
  158. package/lib/typescript/shared/providers/layout-anchor.provider.d.ts +34 -0
  159. package/lib/typescript/shared/providers/layout-anchor.provider.d.ts.map +1 -0
  160. package/lib/typescript/shared/providers/register-bounds.provider.d.ts.map +1 -1
  161. package/lib/typescript/shared/providers/screen/keys.provider.d.ts +2 -2
  162. package/lib/typescript/shared/providers/screen/styles.provider.d.ts.map +1 -1
  163. package/lib/typescript/shared/providers/stack/core.provider.d.ts +15 -4
  164. package/lib/typescript/shared/providers/stack/core.provider.d.ts.map +1 -1
  165. package/lib/typescript/shared/providers/stack/direct.provider.d.ts.map +1 -1
  166. package/lib/typescript/shared/providers/stack/managed.provider.d.ts +1 -1
  167. package/lib/typescript/shared/providers/stack/managed.provider.d.ts.map +1 -1
  168. package/lib/typescript/shared/types/bounds.types.d.ts +1 -0
  169. package/lib/typescript/shared/types/bounds.types.d.ts.map +1 -1
  170. package/lib/typescript/shared/types/index.d.ts +1 -1
  171. package/lib/typescript/shared/types/index.d.ts.map +1 -1
  172. package/lib/typescript/shared/types/overlay.types.d.ts +1 -12
  173. package/lib/typescript/shared/types/overlay.types.d.ts.map +1 -1
  174. package/lib/typescript/shared/types/screen.types.d.ts +2 -2
  175. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  176. package/lib/typescript/shared/types/stack.types.d.ts +5 -2
  177. package/lib/typescript/shared/types/stack.types.d.ts.map +1 -1
  178. package/lib/typescript/shared/utils/bounds/index.d.ts.map +1 -1
  179. package/lib/typescript/shared/utils/navigation/sync-routes-with-removed.d.ts.map +1 -1
  180. package/package.json +1 -1
  181. package/src/blank-stack/components/adjusted-screen-container.tsx +25 -0
  182. package/src/blank-stack/components/{screens.tsx → adjusted-screen.tsx} +33 -12
  183. package/src/blank-stack/components/stack-view.native.tsx +94 -0
  184. package/src/blank-stack/components/stack-view.tsx +41 -47
  185. package/src/blank-stack/types.ts +3 -2
  186. package/src/component-stack/components/component-screen-container.tsx +15 -0
  187. package/src/component-stack/components/component-screen.tsx +40 -0
  188. package/src/component-stack/components/stack-view.tsx +74 -0
  189. package/src/component-stack/index.ts +6 -12
  190. package/src/component-stack/navigators/create-component-stack-navigator.tsx +88 -0
  191. package/src/component-stack/types.ts +80 -188
  192. package/src/native-stack/views/NativeStackView.native.tsx +104 -106
  193. package/src/shared/__tests__/sync-routes-with-removed.test.ts +0 -146
  194. package/src/shared/components/overlay/helpers/get-active-overlay.ts +0 -26
  195. package/src/shared/components/overlay/index.ts +0 -2
  196. package/src/shared/constants.ts +3 -0
  197. package/src/{blank-stack/controllers/blank-stack-lifecycle.tsx → shared/controller/managed-lifecycle.tsx} +14 -18
  198. package/src/shared/hooks/animation/use-high-refresh-rate.tsx +7 -1
  199. package/src/shared/hooks/animation/use-screen-animation.tsx +5 -3
  200. package/src/shared/hooks/gestures/use-build-gestures.tsx +9 -1
  201. package/src/shared/hooks/navigation/use-stack.tsx +4 -15
  202. package/src/shared/hooks/reanimated/use-shared-value-state.ts +5 -0
  203. package/src/shared/index.ts +2 -1
  204. package/src/shared/providers/layout-anchor.provider.tsx +81 -0
  205. package/src/shared/providers/register-bounds.provider.tsx +11 -4
  206. package/src/shared/providers/screen/keys.provider.tsx +2 -2
  207. package/src/shared/providers/screen/styles.provider.tsx +50 -5
  208. package/src/shared/providers/stack/core.provider.tsx +51 -28
  209. package/src/shared/providers/stack/direct.provider.tsx +4 -1
  210. package/src/shared/providers/stack/managed.provider.tsx +5 -2
  211. package/src/shared/types/bounds.types.ts +5 -0
  212. package/src/shared/types/index.ts +0 -1
  213. package/src/shared/types/overlay.types.ts +1 -14
  214. package/src/shared/types/screen.types.ts +2 -8
  215. package/src/shared/types/stack.types.ts +6 -2
  216. package/src/shared/utils/bounds/index.ts +18 -1
  217. package/src/shared/utils/navigation/sync-routes-with-removed.ts +28 -58
  218. package/lib/commonjs/blank-stack/components/screens.js.map +0 -1
  219. package/lib/commonjs/blank-stack/controllers/blank-stack-lifecycle.js.map +0 -1
  220. package/lib/commonjs/component-stack/components/component-view.js +0 -63
  221. package/lib/commonjs/component-stack/components/component-view.js.map +0 -1
  222. package/lib/commonjs/component-stack/components/screens.js +0 -64
  223. package/lib/commonjs/component-stack/components/screens.js.map +0 -1
  224. package/lib/commonjs/component-stack/controllers/component-stack-lifecycle.js +0 -82
  225. package/lib/commonjs/component-stack/controllers/component-stack-lifecycle.js.map +0 -1
  226. package/lib/commonjs/component-stack/hooks/use-component-navigation-builder.js +0 -321
  227. package/lib/commonjs/component-stack/hooks/use-component-navigation-builder.js.map +0 -1
  228. package/lib/commonjs/component-stack/hooks/use-component-navigation.js +0 -28
  229. package/lib/commonjs/component-stack/hooks/use-component-navigation.js.map +0 -1
  230. package/lib/commonjs/component-stack/navigators/create-component-navigator.js +0 -97
  231. package/lib/commonjs/component-stack/navigators/create-component-navigator.js.map +0 -1
  232. package/lib/commonjs/shared/components/overlay/variations/container-overlay.js +0 -99
  233. package/lib/commonjs/shared/components/overlay/variations/container-overlay.js.map +0 -1
  234. package/lib/module/blank-stack/components/screens.js.map +0 -1
  235. package/lib/module/blank-stack/controllers/blank-stack-lifecycle.js.map +0 -1
  236. package/lib/module/component-stack/components/component-view.js +0 -58
  237. package/lib/module/component-stack/components/component-view.js.map +0 -1
  238. package/lib/module/component-stack/components/screens.js +0 -58
  239. package/lib/module/component-stack/components/screens.js.map +0 -1
  240. package/lib/module/component-stack/controllers/component-stack-lifecycle.js +0 -76
  241. package/lib/module/component-stack/controllers/component-stack-lifecycle.js.map +0 -1
  242. package/lib/module/component-stack/hooks/use-component-navigation-builder.js +0 -316
  243. package/lib/module/component-stack/hooks/use-component-navigation-builder.js.map +0 -1
  244. package/lib/module/component-stack/hooks/use-component-navigation.js +0 -25
  245. package/lib/module/component-stack/hooks/use-component-navigation.js.map +0 -1
  246. package/lib/module/component-stack/navigators/create-component-navigator.js +0 -91
  247. package/lib/module/component-stack/navigators/create-component-navigator.js.map +0 -1
  248. package/lib/module/shared/components/overlay/variations/container-overlay.js +0 -97
  249. package/lib/module/shared/components/overlay/variations/container-overlay.js.map +0 -1
  250. package/lib/typescript/blank-stack/components/screens.d.ts.map +0 -1
  251. package/lib/typescript/blank-stack/controllers/blank-stack-lifecycle.d.ts +0 -9
  252. package/lib/typescript/blank-stack/controllers/blank-stack-lifecycle.d.ts.map +0 -1
  253. package/lib/typescript/component-stack/components/component-view.d.ts +0 -4
  254. package/lib/typescript/component-stack/components/component-view.d.ts.map +0 -1
  255. package/lib/typescript/component-stack/components/screens.d.ts +0 -9
  256. package/lib/typescript/component-stack/components/screens.d.ts.map +0 -1
  257. package/lib/typescript/component-stack/controllers/component-stack-lifecycle.d.ts +0 -10
  258. package/lib/typescript/component-stack/controllers/component-stack-lifecycle.d.ts.map +0 -1
  259. package/lib/typescript/component-stack/hooks/use-component-navigation-builder.d.ts +0 -19
  260. package/lib/typescript/component-stack/hooks/use-component-navigation-builder.d.ts.map +0 -1
  261. package/lib/typescript/component-stack/hooks/use-component-navigation.d.ts +0 -19
  262. package/lib/typescript/component-stack/hooks/use-component-navigation.d.ts.map +0 -1
  263. package/lib/typescript/component-stack/navigators/create-component-navigator.d.ts +0 -35
  264. package/lib/typescript/component-stack/navigators/create-component-navigator.d.ts.map +0 -1
  265. package/lib/typescript/shared/components/overlay/variations/container-overlay.d.ts +0 -8
  266. package/lib/typescript/shared/components/overlay/variations/container-overlay.d.ts.map +0 -1
  267. package/src/component-stack/components/component-view.tsx +0 -72
  268. package/src/component-stack/components/screens.tsx +0 -86
  269. package/src/component-stack/controllers/component-stack-lifecycle.tsx +0 -80
  270. package/src/component-stack/hooks/use-component-navigation-builder.tsx +0 -388
  271. package/src/component-stack/hooks/use-component-navigation.tsx +0 -22
  272. package/src/component-stack/navigators/create-component-navigator.tsx +0 -104
  273. package/src/shared/components/overlay/variations/container-overlay.tsx +0 -98
@@ -1,209 +1,101 @@
1
- import type { DerivedValue } from "react-native-reanimated";
2
- import type { ScreenTransitionConfig } from "../shared";
3
1
  import type {
4
- OverlayInterpolationProps,
5
- ScreenInterpolationProps,
6
- } from "../shared/types/animation.types";
7
- import type { OverlayMode } from "../shared/types/overlay.types";
2
+ DefaultNavigatorOptions,
3
+ Descriptor,
4
+ NavigationHelpers,
5
+ NavigationProp,
6
+ ParamListBase,
7
+ Route,
8
+ RouteProp,
9
+ StackActionHelpers,
10
+ StackNavigationState,
11
+ StackRouterOptions,
12
+ Theme,
13
+ } from "@react-navigation/native";
14
+ import type { ScreenTransitionConfig } from "../shared";
15
+ import type { OverlayProps } from "../shared/types/overlay.types";
8
16
 
9
- /**
10
- * A synthetic route object for component navigation.
11
- * Mimics React Navigation's Route type but without the navigation dependency.
12
- */
13
- export interface ComponentRoute<Params = Record<string, unknown>> {
14
- /** Unique identifier for this route instance */
15
- key: string;
16
- /** Name identifier for the screen */
17
- name: string;
18
- /** Optional parameters passed to the screen */
19
- params?: Params;
20
- }
17
+ export type ComponentStackNavigationEventMap = {};
21
18
 
22
- /**
23
- * Navigation action for dispatch method.
24
- */
25
- type ComponentNavigationAction =
26
- | { type: "PUSH"; name: string; params?: Record<string, unknown> }
27
- | { type: "POP" }
28
- | { type: "POP_BY_KEY"; key: string }
29
- | { type: "NAVIGATE"; name: string; params?: Record<string, unknown> }
30
- | { type: "RESET"; name?: string; params?: Record<string, unknown> }
31
- | { type: string; source?: string; target?: string; payload?: unknown };
19
+ export type ComponentStackNavigationProp<
20
+ ParamList extends ParamListBase,
21
+ RouteName extends keyof ParamList = string,
22
+ NavigatorID extends string | undefined = undefined,
23
+ > = NavigationProp<
24
+ ParamList,
25
+ RouteName,
26
+ NavigatorID,
27
+ StackNavigationState<ParamList>,
28
+ ComponentStackNavigationOptions,
29
+ ComponentStackNavigationEventMap
30
+ > &
31
+ StackActionHelpers<ParamList>;
32
32
 
33
- /**
34
- * Navigation object provided to screens and available via useComponentNavigation hook.
35
- */
36
- export interface ComponentNavigation {
37
- /** Push a new screen by name */
38
- push: (name: string, params?: Record<string, unknown>) => void;
39
- /** Pop the current screen */
40
- pop: () => void;
41
- /** Navigate back (alias for pop) */
42
- goBack: () => void;
43
- /** Navigate to a specific screen by name, reusing existing if present */
44
- navigate: (name: string, params?: Record<string, unknown>) => void;
45
- /** Check if we can go back */
46
- canGoBack: () => boolean;
47
- /** Reset to a specific screen or initial state */
48
- reset: (name?: string, params?: Record<string, unknown>) => void;
49
- /** Dispatch a navigation action (compatible with React Navigation's StackActions) */
50
- dispatch: (action: ComponentNavigationAction) => void;
51
- /** Get current navigation state (for gesture handling compatibility) */
52
- getState: () => ComponentStackState;
53
- /** Current index in the stack */
54
- index: number;
55
- }
33
+ export type ComponentStackScreenProps<
34
+ ParamList extends ParamListBase,
35
+ RouteName extends keyof ParamList = string,
36
+ NavigatorID extends string | undefined = undefined,
37
+ > = {
38
+ navigation: ComponentStackNavigationProp<ParamList, RouteName, NavigatorID>;
39
+ route: RouteProp<ParamList, RouteName>;
40
+ };
41
+
42
+ export type ComponentStackOptionsArgs<
43
+ ParamList extends ParamListBase,
44
+ RouteName extends keyof ParamList = keyof ParamList,
45
+ NavigatorID extends string | undefined = undefined,
46
+ > = ComponentStackScreenProps<ParamList, RouteName, NavigatorID> & {
47
+ theme: Theme;
48
+ };
49
+
50
+ export type ComponentStackNavigationHelpers = NavigationHelpers<
51
+ ParamListBase,
52
+ ComponentStackNavigationEventMap
53
+ >;
54
+
55
+ export type ComponentStackScene = {
56
+ route: Route<string>;
57
+ descriptor: ComponentStackDescriptor;
58
+ };
59
+
60
+ type ComponentStackNavigationConfig = {};
56
61
 
57
62
  /**
58
- * Screen options for component stack, extending the base transition config.
63
+ * Props passed to overlay components in component-stack.
64
+ * Uses the shared OverlayProps type with component-stack's navigation type.
59
65
  */
60
- export type ComponentStackScreenTransitionConfig = ScreenTransitionConfig & {
66
+ export type ComponentStackOverlayProps = OverlayProps<
67
+ ComponentStackNavigationProp<ParamListBase>
68
+ >;
69
+
70
+ type ComponentStackScreenTransitionConfig = ScreenTransitionConfig & {
61
71
  /**
62
72
  * Whether to detach the previous screen from the view hierarchy to save memory.
63
73
  * Set it to `false` if you need the previous screen to be seen through the active screen.
74
+ * Only applicable if `detachInactiveScreens` isn't set to `false`.
64
75
  */
65
76
  detachPreviousScreen?: boolean;
66
77
  };
67
78
 
68
- /**
69
- * Props passed to overlay components.
70
- */
71
- export type ComponentStackOverlayProps = {
72
- /** Route of the currently focused screen in the stack. */
73
- focusedRoute: ComponentRoute;
74
- /** Index of the focused route in the stack. */
75
- focusedIndex: number;
76
- /** All routes currently in the stack. */
77
- routes: ComponentRoute[];
78
- /** Custom metadata from the focused screen's options. */
79
- meta?: Record<string, unknown>;
80
- /** Navigation object for the overlay. */
81
- navigation: ComponentNavigation;
82
- /** Animation values for the overlay. */
83
- overlayAnimation: DerivedValue<OverlayInterpolationProps>;
84
- /** Animation values for the screen. */
85
- screenAnimation: DerivedValue<ScreenInterpolationProps>;
86
- };
87
-
88
- /**
89
- * Props passed to container overlay components.
90
- * Extends overlay props with children to wrap screen content.
91
- */
92
- export type ComponentStackContainerOverlayProps = ComponentStackOverlayProps & {
93
- /** The screen content to be wrapped by the container overlay. */
94
- children: React.ReactNode;
95
- };
96
-
97
- /**
98
- * Full navigation options for a component stack screen.
99
- */
100
79
  export type ComponentStackNavigationOptions =
101
- ComponentStackScreenTransitionConfig & {
102
- /** Function that returns a React Element to display as overlay. */
103
- overlay?:
104
- | ((props: ComponentStackOverlayProps) => React.ReactNode)
105
- | ((props: ComponentStackContainerOverlayProps) => React.ReactNode);
106
- /**
107
- * Layout: How the Overlay is positioned
108
- * - 'float': Single persistent overlay above all screens (like iOS)
109
- * - 'screen': Per-screen overlay that transitions with content
110
- * - 'container': Wraps all screen content (for MaskedView, custom containers)
111
- * @default 'screen'
112
- */
113
- overlayMode?: OverlayMode;
114
- /** Whether to show the overlay. Defaults to true when overlay is provided. */
115
- overlayShown?: boolean;
116
- /**
117
- * Whether inactive screens should be suspended from re-rendering.
118
- * Defaults to `true` when `enableFreeze()` is run at the top of the application.
119
- */
120
- freezeOnBlur?: boolean;
121
- };
80
+ ComponentStackScreenTransitionConfig & {};
122
81
 
123
- /**
124
- * Descriptor for a component stack screen.
125
- * Similar to React Navigation's Descriptor but simplified.
126
- */
127
- export interface ComponentStackDescriptor {
128
- /** The route object for this screen */
129
- route: ComponentRoute;
130
- /** Navigation object */
131
- navigation: ComponentNavigation;
132
- /** Render function for the screen content */
133
- render: () => React.JSX.Element | null;
134
- /** Screen options/configuration */
135
- options: ComponentStackNavigationOptions;
136
- }
82
+ export type ComponentStackNavigatorProps = DefaultNavigatorOptions<
83
+ ParamListBase,
84
+ string | undefined,
85
+ StackNavigationState<ParamListBase>,
86
+ ComponentStackNavigationOptions,
87
+ ComponentStackNavigationEventMap,
88
+ ComponentStackNavigationProp<ParamListBase>
89
+ > &
90
+ StackRouterOptions &
91
+ ComponentStackNavigationConfig;
137
92
 
138
- /**
139
- * A scene in the component stack (route + descriptor pair).
140
- */
141
- export interface ComponentStackScene {
142
- route: ComponentRoute;
143
- descriptor: ComponentStackDescriptor;
144
- }
93
+ export type ComponentStackDescriptor = Descriptor<
94
+ ComponentStackNavigationOptions,
95
+ ComponentStackNavigationProp<ParamListBase>,
96
+ RouteProp<ParamListBase>
97
+ >;
145
98
 
146
- /**
147
- * Map of route keys to descriptors.
148
- */
149
99
  export type ComponentStackDescriptorMap = {
150
100
  [key: string]: ComponentStackDescriptor;
151
101
  };
152
-
153
- /**
154
- * Props passed to screen components.
155
- */
156
- export interface ComponentStackScreenProps<Params = Record<string, unknown>> {
157
- /** Navigation object for controlling the stack */
158
- navigation: ComponentNavigation;
159
- /** Route object with params */
160
- route: ComponentRoute<Params>;
161
- }
162
-
163
- /**
164
- * State of the component navigation stack.
165
- */
166
- export interface ComponentStackState {
167
- /** All routes in the stack */
168
- routes: ComponentRoute[];
169
- /** Index of the currently focused route */
170
- index: number;
171
- /** Unique key for this stack instance */
172
- key: string;
173
- }
174
-
175
- /**
176
- * Screen definition for the component navigator.
177
- */
178
- export interface ComponentScreenConfig {
179
- /** Unique name for this screen */
180
- name: string;
181
- /** Component to render for this screen */
182
- component: React.ComponentType<ComponentStackScreenProps<any>>;
183
- /** Screen-specific options */
184
- options?: ComponentStackNavigationOptions;
185
- }
186
-
187
- /**
188
- * Props for the ComponentNavigator component.
189
- */
190
- export interface ComponentNavigatorProps {
191
- /** Screen definitions */
192
- children: React.ReactNode;
193
- /** Initial screen name to display */
194
- initialRouteName?: string;
195
- /** Default options applied to all screens */
196
- screenOptions?: ComponentStackNavigationOptions;
197
- }
198
-
199
- /**
200
- * Props for the ComponentScreen component.
201
- */
202
- export interface ComponentScreenProps {
203
- /** Unique name for this screen */
204
- name: string;
205
- /** Component to render */
206
- component: React.ComponentType<ComponentStackScreenProps<any>>;
207
- /** Screen-specific options */
208
- options?: ComponentStackNavigationOptions;
209
- }
@@ -501,112 +501,110 @@ export const NativeStackView = withStackCore(
501
501
  return (
502
502
  <>
503
503
  {shouldShowFloatOverlay ? <Overlay.Float /> : null}
504
- <Overlay.Container>
505
- <ScreenStack style={styles.container}>
506
- {scenes.map((scene, index) => {
507
- const { route, descriptor, isPreloaded } = scene;
508
- const isFocused = focusedIndex === index;
509
- const isBelowFocused = focusedIndex - 1 === index;
510
-
511
- // Get previous/next descriptors from state.routes (not scenes) for proper navigation
512
- const previousKey = state.routes[index - 1]?.key;
513
- const nextKey = state.routes[index + 1]?.key;
514
- const previousDescriptor = previousKey
515
- ? descriptors[previousKey]
516
- : undefined;
517
- const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;
518
-
519
- const isModal = modalRouteKeys.includes(route.key);
520
-
521
- // On Fabric, when screen is frozen, animated and reanimated values are not updated
522
- // due to component being unmounted. To avoid this, we don't freeze the previous screen there
523
- const shouldFreeze = isFabric()
524
- ? !isPreloaded && !isFocused && !isBelowFocused
525
- : !isPreloaded && !isFocused;
526
-
527
- return (
528
- <SceneView
529
- key={route.key}
530
- index={index}
531
- focused={isFocused}
532
- shouldFreeze={shouldFreeze}
533
- descriptor={descriptor}
534
- previousDescriptor={previousDescriptor}
535
- nextDescriptor={nextDescriptor}
536
- isPresentationModal={isModal}
537
- isPreloaded={isPreloaded}
538
- onWillDisappear={() => {
539
- navigation.emit({
540
- type: "transitionStart",
541
- data: { closing: true },
542
- target: route.key,
543
- });
544
- }}
545
- onWillAppear={() => {
546
- navigation.emit({
547
- type: "transitionStart",
548
- data: { closing: false },
549
- target: route.key,
550
- });
551
- }}
552
- onAppear={() => {
553
- navigation.emit({
554
- type: "transitionEnd",
555
- data: { closing: false },
556
- target: route.key,
557
- });
558
- }}
559
- onDisappear={() => {
560
- navigation.emit({
561
- type: "transitionEnd",
562
- data: { closing: true },
563
- target: route.key,
564
- });
565
- }}
566
- onDismissed={(event) => {
567
- navigation.dispatch({
568
- ...StackActions.pop(event.nativeEvent.dismissCount),
569
- source: route.key,
570
- target: state.key,
571
- });
572
-
573
- setNextDismissedKey(route.key);
574
- }}
575
- onHeaderBackButtonClicked={() => {
576
- navigation.dispatch({
577
- ...StackActions.pop(),
578
- source: route.key,
579
- target: state.key,
580
- });
581
- }}
582
- onNativeDismissCancelled={(event) => {
583
- navigation.dispatch({
584
- ...StackActions.pop(event.nativeEvent.dismissCount),
585
- source: route.key,
586
- target: state.key,
587
- });
588
- }}
589
- onGestureCancel={() => {
590
- navigation.emit({
591
- type: "gestureCancel",
592
- target: route.key,
593
- });
594
- }}
595
- onSheetDetentChanged={(event) => {
596
- navigation.emit({
597
- type: "sheetDetentChange",
598
- target: route.key,
599
- data: {
600
- index: event.nativeEvent.index,
601
- stable: event.nativeEvent.isStable,
602
- },
603
- });
604
- }}
605
- />
606
- );
607
- })}
608
- </ScreenStack>
609
- </Overlay.Container>
504
+ <ScreenStack style={styles.container}>
505
+ {scenes.map((scene, index) => {
506
+ const { route, descriptor, isPreloaded } = scene;
507
+ const isFocused = focusedIndex === index;
508
+ const isBelowFocused = focusedIndex - 1 === index;
509
+
510
+ // Get previous/next descriptors from state.routes (not scenes) for proper navigation
511
+ const previousKey = state.routes[index - 1]?.key;
512
+ const nextKey = state.routes[index + 1]?.key;
513
+ const previousDescriptor = previousKey
514
+ ? descriptors[previousKey]
515
+ : undefined;
516
+ const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;
517
+
518
+ const isModal = modalRouteKeys.includes(route.key);
519
+
520
+ // On Fabric, when screen is frozen, animated and reanimated values are not updated
521
+ // due to component being unmounted. To avoid this, we don't freeze the previous screen there
522
+ const shouldFreeze = isFabric()
523
+ ? !isPreloaded && !isFocused && !isBelowFocused
524
+ : !isPreloaded && !isFocused;
525
+
526
+ return (
527
+ <SceneView
528
+ key={route.key}
529
+ index={index}
530
+ focused={isFocused}
531
+ shouldFreeze={shouldFreeze}
532
+ descriptor={descriptor}
533
+ previousDescriptor={previousDescriptor}
534
+ nextDescriptor={nextDescriptor}
535
+ isPresentationModal={isModal}
536
+ isPreloaded={isPreloaded}
537
+ onWillDisappear={() => {
538
+ navigation.emit({
539
+ type: "transitionStart",
540
+ data: { closing: true },
541
+ target: route.key,
542
+ });
543
+ }}
544
+ onWillAppear={() => {
545
+ navigation.emit({
546
+ type: "transitionStart",
547
+ data: { closing: false },
548
+ target: route.key,
549
+ });
550
+ }}
551
+ onAppear={() => {
552
+ navigation.emit({
553
+ type: "transitionEnd",
554
+ data: { closing: false },
555
+ target: route.key,
556
+ });
557
+ }}
558
+ onDisappear={() => {
559
+ navigation.emit({
560
+ type: "transitionEnd",
561
+ data: { closing: true },
562
+ target: route.key,
563
+ });
564
+ }}
565
+ onDismissed={(event) => {
566
+ navigation.dispatch({
567
+ ...StackActions.pop(event.nativeEvent.dismissCount),
568
+ source: route.key,
569
+ target: state.key,
570
+ });
571
+
572
+ setNextDismissedKey(route.key);
573
+ }}
574
+ onHeaderBackButtonClicked={() => {
575
+ navigation.dispatch({
576
+ ...StackActions.pop(),
577
+ source: route.key,
578
+ target: state.key,
579
+ });
580
+ }}
581
+ onNativeDismissCancelled={(event) => {
582
+ navigation.dispatch({
583
+ ...StackActions.pop(event.nativeEvent.dismissCount),
584
+ source: route.key,
585
+ target: state.key,
586
+ });
587
+ }}
588
+ onGestureCancel={() => {
589
+ navigation.emit({
590
+ type: "gestureCancel",
591
+ target: route.key,
592
+ });
593
+ }}
594
+ onSheetDetentChanged={(event) => {
595
+ navigation.emit({
596
+ type: "sheetDetentChange",
597
+ target: route.key,
598
+ data: {
599
+ index: event.nativeEvent.index,
600
+ stable: event.nativeEvent.isStable,
601
+ },
602
+ });
603
+ }}
604
+ />
605
+ );
606
+ })}
607
+ </ScreenStack>
610
608
  </>
611
609
  );
612
610
  }),
@@ -112,152 +112,6 @@ describe("syncRoutesWithRemoved", () => {
112
112
  });
113
113
  });
114
114
 
115
- describe("mid-dismiss route reordering", () => {
116
- it("moves mid-dismiss route to end when pushing while swiping (progress < 0.5)", () => {
117
- const closingRouteKeys = createClosingRouteKeys();
118
-
119
- setRouteState("a", { progress: 1 });
120
- setRouteState("b-old", { progress: 0.3 }); // Mid-dismiss
121
- setRouteState("b-new", { progress: 0 }); // Just pushed
122
-
123
- const result = syncRoutesWithRemoved({
124
- prevRoutes: [createRoute("a"), createRoute("b-old")],
125
- prevDescriptors: { a: {}, "b-old": {} },
126
- nextRoutes: [
127
- createRoute("a"),
128
- createRoute("b-old"),
129
- createRoute("b-new"),
130
- ],
131
- nextDescriptors: { a: {}, "b-old": {}, "b-new": {} },
132
- closingRouteKeys,
133
- });
134
-
135
- expect(result.routes.map((r) => r.key)).toEqual(["a", "b-new", "b-old"]);
136
- });
137
-
138
- it("marks moved route as closing", () => {
139
- const closingRouteKeys = createClosingRouteKeys();
140
-
141
- setRouteState("a", { progress: 1 });
142
- setRouteState("b-old", { progress: 0.3 });
143
- setRouteState("b-new", { progress: 0 });
144
-
145
- syncRoutesWithRemoved({
146
- prevRoutes: [createRoute("a"), createRoute("b-old")],
147
- prevDescriptors: { a: {}, "b-old": {} },
148
- nextRoutes: [
149
- createRoute("a"),
150
- createRoute("b-old"),
151
- createRoute("b-new"),
152
- ],
153
- nextDescriptors: { a: {}, "b-old": {}, "b-new": {} },
154
- closingRouteKeys,
155
- });
156
-
157
- expect(closingRouteKeys.ref.current.has("b-old")).toBe(true);
158
- });
159
-
160
- it("detects dismissing via isDragging flag", () => {
161
- const closingRouteKeys = createClosingRouteKeys();
162
-
163
- setRouteState("a", { progress: 1 });
164
- setRouteState("b-old", { progress: 1, isDragging: 1 }); // Being dragged
165
- setRouteState("b-new", { progress: 0 });
166
-
167
- const result = syncRoutesWithRemoved({
168
- prevRoutes: [createRoute("a"), createRoute("b-old")],
169
- prevDescriptors: { a: {}, "b-old": {} },
170
- nextRoutes: [
171
- createRoute("a"),
172
- createRoute("b-old"),
173
- createRoute("b-new"),
174
- ],
175
- nextDescriptors: { a: {}, "b-old": {}, "b-new": {} },
176
- closingRouteKeys,
177
- });
178
-
179
- expect(result.routes.map((r) => r.key)).toEqual(["a", "b-new", "b-old"]);
180
- });
181
-
182
- it("detects dismissing via isDismissing flag", () => {
183
- const closingRouteKeys = createClosingRouteKeys();
184
-
185
- setRouteState("a", { progress: 1 });
186
- setRouteState("b-old", { progress: 1, isDismissing: 1 });
187
- setRouteState("b-new", { progress: 0 });
188
-
189
- const result = syncRoutesWithRemoved({
190
- prevRoutes: [createRoute("a"), createRoute("b-old")],
191
- prevDescriptors: { a: {}, "b-old": {} },
192
- nextRoutes: [
193
- createRoute("a"),
194
- createRoute("b-old"),
195
- createRoute("b-new"),
196
- ],
197
- nextDescriptors: { a: {}, "b-old": {}, "b-new": {} },
198
- closingRouteKeys,
199
- });
200
-
201
- expect(result.routes.map((r) => r.key)).toEqual(["a", "b-new", "b-old"]);
202
- });
203
-
204
- it("detects dismissing via closing flag", () => {
205
- const closingRouteKeys = createClosingRouteKeys();
206
-
207
- setRouteState("a", { progress: 1 });
208
- setRouteState("b-old", { progress: 1, closing: 1 });
209
- setRouteState("b-new", { progress: 0 });
210
-
211
- const result = syncRoutesWithRemoved({
212
- prevRoutes: [createRoute("a"), createRoute("b-old")],
213
- prevDescriptors: { a: {}, "b-old": {} },
214
- nextRoutes: [
215
- createRoute("a"),
216
- createRoute("b-old"),
217
- createRoute("b-new"),
218
- ],
219
- nextDescriptors: { a: {}, "b-old": {}, "b-new": {} },
220
- closingRouteKeys,
221
- });
222
-
223
- expect(result.routes.map((r) => r.key)).toEqual(["a", "b-new", "b-old"]);
224
- });
225
-
226
- it("does not move first route even if dismissing", () => {
227
- const closingRouteKeys = createClosingRouteKeys();
228
-
229
- setRouteState("a", { progress: 0.3 }); // First route, low progress
230
- setRouteState("b", { progress: 1 });
231
-
232
- const result = syncRoutesWithRemoved({
233
- prevRoutes: [createRoute("a")],
234
- prevDescriptors: { a: {} },
235
- nextRoutes: [createRoute("a"), createRoute("b")],
236
- nextDescriptors: { a: {}, b: {} },
237
- closingRouteKeys,
238
- });
239
-
240
- expect(result.routes.map((r) => r.key)).toEqual(["a", "b"]);
241
- });
242
-
243
- it("does not move last route even if low progress (newly pushed)", () => {
244
- const closingRouteKeys = createClosingRouteKeys();
245
-
246
- setRouteState("a", { progress: 1 });
247
- setRouteState("b", { progress: 1 });
248
- setRouteState("c", { progress: 0.1 }); // Last route, low progress (just pushed)
249
-
250
- const result = syncRoutesWithRemoved({
251
- prevRoutes: [createRoute("a"), createRoute("b")],
252
- prevDescriptors: { a: {}, b: {} },
253
- nextRoutes: [createRoute("a"), createRoute("b"), createRoute("c")],
254
- nextDescriptors: { a: {}, b: {}, c: {} },
255
- closingRouteKeys,
256
- });
257
-
258
- expect(result.routes.map((r) => r.key)).toEqual(["a", "b", "c"]);
259
- });
260
- });
261
115
 
262
116
  describe("normal back navigation", () => {
263
117
  it("keeps closing route at end for normal back (C -> B)", () => {