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

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 (215) hide show
  1. package/README.md +108 -37
  2. package/lib/commonjs/blank-stack/components/stack-view.js +0 -2
  3. package/lib/commonjs/blank-stack/components/stack-view.js.map +1 -1
  4. package/lib/commonjs/blank-stack/components/stack-view.native.js +0 -2
  5. package/lib/commonjs/blank-stack/components/stack-view.native.js.map +1 -1
  6. package/lib/commonjs/component-stack/components/component-screen.js +3 -1
  7. package/lib/commonjs/component-stack/components/component-screen.js.map +1 -1
  8. package/lib/commonjs/component-stack/components/stack-view.js +19 -22
  9. package/lib/commonjs/component-stack/components/stack-view.js.map +1 -1
  10. package/lib/commonjs/component-stack/navigators/create-component-stack-navigator.js +39 -9
  11. package/lib/commonjs/component-stack/navigators/create-component-stack-navigator.js.map +1 -1
  12. package/lib/commonjs/native-stack/views/NativeStackView.native.js +3 -3
  13. package/lib/commonjs/native-stack/views/NativeStackView.native.js.map +1 -1
  14. package/lib/commonjs/shared/components/overlay/variations/float-overlay.js +1 -6
  15. package/lib/commonjs/shared/components/overlay/variations/float-overlay.js.map +1 -1
  16. package/lib/commonjs/shared/components/overlay/variations/overlay-host.js +16 -64
  17. package/lib/commonjs/shared/components/overlay/variations/overlay-host.js.map +1 -1
  18. package/lib/commonjs/shared/components/overlay/variations/screen-overlay.js +5 -8
  19. package/lib/commonjs/shared/components/overlay/variations/screen-overlay.js.map +1 -1
  20. package/lib/commonjs/shared/components/root-transition-aware.js +5 -1
  21. package/lib/commonjs/shared/components/root-transition-aware.js.map +1 -1
  22. package/lib/commonjs/shared/components/screen-lifecycle.js +153 -0
  23. package/lib/commonjs/shared/components/screen-lifecycle.js.map +1 -0
  24. package/lib/commonjs/shared/constants.js +3 -2
  25. package/lib/commonjs/shared/constants.js.map +1 -1
  26. package/lib/commonjs/shared/hooks/animation/use-screen-animation.js.map +1 -1
  27. package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  28. package/lib/commonjs/shared/hooks/navigation/use-screen-state.js +45 -0
  29. package/lib/commonjs/shared/hooks/navigation/use-screen-state.js.map +1 -0
  30. package/lib/commonjs/shared/hooks/use-stable-callback-value.js +0 -2
  31. package/lib/commonjs/shared/hooks/use-stable-callback-value.js.map +1 -1
  32. package/lib/commonjs/shared/hooks/use-stack-pointer-events.js +23 -0
  33. package/lib/commonjs/shared/hooks/use-stack-pointer-events.js.map +1 -0
  34. package/lib/commonjs/shared/index.js +7 -0
  35. package/lib/commonjs/shared/index.js.map +1 -1
  36. package/lib/commonjs/shared/providers/gestures.provider.js +3 -0
  37. package/lib/commonjs/shared/providers/gestures.provider.js.map +1 -1
  38. package/lib/commonjs/shared/providers/screen/keys.provider.js +0 -2
  39. package/lib/commonjs/shared/providers/screen/keys.provider.js.map +1 -1
  40. package/lib/commonjs/shared/providers/screen/screen-composer.js +3 -3
  41. package/lib/commonjs/shared/providers/screen/screen-composer.js.map +1 -1
  42. package/lib/commonjs/shared/providers/screen/styles.provider.js +1 -1
  43. package/lib/commonjs/shared/providers/screen/styles.provider.js.map +1 -1
  44. package/lib/commonjs/shared/providers/stack/core.provider.js +1 -0
  45. package/lib/commonjs/shared/providers/stack/core.provider.js.map +1 -1
  46. package/lib/commonjs/shared/types/index.js +3 -3
  47. package/lib/commonjs/shared/types/index.js.map +1 -1
  48. package/lib/commonjs/shared/types/stack.types.js +5 -0
  49. package/lib/commonjs/shared/types/stack.types.js.map +1 -1
  50. package/lib/commonjs/shared/utils/animation/start-screen-transition.js +5 -5
  51. package/lib/commonjs/shared/utils/animation/start-screen-transition.js.map +1 -1
  52. package/lib/commonjs/shared/utils/bounds/index.js.map +1 -1
  53. package/lib/module/blank-stack/components/stack-view.js +0 -2
  54. package/lib/module/blank-stack/components/stack-view.js.map +1 -1
  55. package/lib/module/blank-stack/components/stack-view.native.js +0 -2
  56. package/lib/module/blank-stack/components/stack-view.native.js.map +1 -1
  57. package/lib/module/component-stack/components/component-screen.js +3 -1
  58. package/lib/module/component-stack/components/component-screen.js.map +1 -1
  59. package/lib/module/component-stack/components/stack-view.js +19 -22
  60. package/lib/module/component-stack/components/stack-view.js.map +1 -1
  61. package/lib/module/component-stack/navigators/create-component-stack-navigator.js +38 -9
  62. package/lib/module/component-stack/navigators/create-component-stack-navigator.js.map +1 -1
  63. package/lib/module/native-stack/views/NativeStackView.native.js +3 -3
  64. package/lib/module/native-stack/views/NativeStackView.native.js.map +1 -1
  65. package/lib/module/shared/components/overlay/variations/float-overlay.js +1 -6
  66. package/lib/module/shared/components/overlay/variations/float-overlay.js.map +1 -1
  67. package/lib/module/shared/components/overlay/variations/overlay-host.js +16 -64
  68. package/lib/module/shared/components/overlay/variations/overlay-host.js.map +1 -1
  69. package/lib/module/shared/components/overlay/variations/screen-overlay.js +5 -8
  70. package/lib/module/shared/components/overlay/variations/screen-overlay.js.map +1 -1
  71. package/lib/module/shared/components/root-transition-aware.js +5 -1
  72. package/lib/module/shared/components/root-transition-aware.js.map +1 -1
  73. package/lib/module/shared/components/screen-lifecycle.js +147 -0
  74. package/lib/module/shared/components/screen-lifecycle.js.map +1 -0
  75. package/lib/module/shared/constants.js +2 -1
  76. package/lib/module/shared/constants.js.map +1 -1
  77. package/lib/module/shared/hooks/animation/use-screen-animation.js.map +1 -1
  78. package/lib/module/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  79. package/lib/module/shared/hooks/navigation/use-screen-state.js +41 -0
  80. package/lib/module/shared/hooks/navigation/use-screen-state.js.map +1 -0
  81. package/lib/module/shared/hooks/use-stable-callback-value.js +0 -3
  82. package/lib/module/shared/hooks/use-stable-callback-value.js.map +1 -1
  83. package/lib/module/shared/hooks/use-stack-pointer-events.js +20 -0
  84. package/lib/module/shared/hooks/use-stack-pointer-events.js.map +1 -0
  85. package/lib/module/shared/index.js +1 -0
  86. package/lib/module/shared/index.js.map +1 -1
  87. package/lib/module/shared/providers/gestures.provider.js +3 -0
  88. package/lib/module/shared/providers/gestures.provider.js.map +1 -1
  89. package/lib/module/shared/providers/screen/keys.provider.js +0 -2
  90. package/lib/module/shared/providers/screen/keys.provider.js.map +1 -1
  91. package/lib/module/shared/providers/screen/screen-composer.js +3 -3
  92. package/lib/module/shared/providers/screen/screen-composer.js.map +1 -1
  93. package/lib/module/shared/providers/screen/styles.provider.js +1 -1
  94. package/lib/module/shared/providers/screen/styles.provider.js.map +1 -1
  95. package/lib/module/shared/providers/stack/core.provider.js +1 -0
  96. package/lib/module/shared/providers/stack/core.provider.js.map +1 -1
  97. package/lib/module/shared/types/index.js +1 -1
  98. package/lib/module/shared/types/index.js.map +1 -1
  99. package/lib/module/shared/types/stack.types.js +6 -0
  100. package/lib/module/shared/types/stack.types.js.map +1 -1
  101. package/lib/module/shared/utils/animation/start-screen-transition.js +1 -1
  102. package/lib/module/shared/utils/animation/start-screen-transition.js.map +1 -1
  103. package/lib/module/shared/utils/bounds/index.js.map +1 -1
  104. package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
  105. package/lib/typescript/blank-stack/components/stack-view.native.d.ts.map +1 -1
  106. package/lib/typescript/blank-stack/types.d.ts +4 -8
  107. package/lib/typescript/blank-stack/types.d.ts.map +1 -1
  108. package/lib/typescript/component-stack/components/component-screen.d.ts.map +1 -1
  109. package/lib/typescript/component-stack/components/stack-view.d.ts.map +1 -1
  110. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts +9 -2
  111. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts.map +1 -1
  112. package/lib/typescript/component-stack/types.d.ts +4 -8
  113. package/lib/typescript/component-stack/types.d.ts.map +1 -1
  114. package/lib/typescript/native-stack/types.d.ts +2 -3
  115. package/lib/typescript/native-stack/types.d.ts.map +1 -1
  116. package/lib/typescript/native-stack/views/NativeStackView.native.d.ts.map +1 -1
  117. package/lib/typescript/shared/components/overlay/variations/float-overlay.d.ts.map +1 -1
  118. package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts +1 -6
  119. package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts.map +1 -1
  120. package/lib/typescript/shared/components/overlay/variations/screen-overlay.d.ts +4 -0
  121. package/lib/typescript/shared/components/overlay/variations/screen-overlay.d.ts.map +1 -1
  122. package/lib/typescript/shared/components/root-transition-aware.d.ts.map +1 -1
  123. package/lib/typescript/shared/components/screen-lifecycle.d.ts +9 -0
  124. package/lib/typescript/shared/components/screen-lifecycle.d.ts.map +1 -0
  125. package/lib/typescript/shared/constants.d.ts +2 -1
  126. package/lib/typescript/shared/constants.d.ts.map +1 -1
  127. package/lib/typescript/shared/hooks/animation/use-screen-animation.d.ts.map +1 -1
  128. package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts.map +1 -1
  129. package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts +40 -0
  130. package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts.map +1 -0
  131. package/lib/typescript/shared/hooks/use-stable-callback-value.d.ts.map +1 -1
  132. package/lib/typescript/shared/hooks/use-stack-pointer-events.d.ts +10 -0
  133. package/lib/typescript/shared/hooks/use-stack-pointer-events.d.ts.map +1 -0
  134. package/lib/typescript/shared/index.d.ts +21 -20
  135. package/lib/typescript/shared/index.d.ts.map +1 -1
  136. package/lib/typescript/shared/providers/gestures.provider.d.ts.map +1 -1
  137. package/lib/typescript/shared/providers/screen/keys.provider.d.ts +2 -3
  138. package/lib/typescript/shared/providers/screen/keys.provider.d.ts.map +1 -1
  139. package/lib/typescript/shared/providers/screen/screen-composer.d.ts +1 -3
  140. package/lib/typescript/shared/providers/screen/screen-composer.d.ts.map +1 -1
  141. package/lib/typescript/shared/providers/stack/core.provider.d.ts.map +1 -1
  142. package/lib/typescript/shared/types/animation.types.d.ts +2 -6
  143. package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
  144. package/lib/typescript/shared/types/index.d.ts +2 -2
  145. package/lib/typescript/shared/types/index.d.ts.map +1 -1
  146. package/lib/typescript/shared/types/overlay.types.d.ts +21 -0
  147. package/lib/typescript/shared/types/overlay.types.d.ts.map +1 -1
  148. package/lib/typescript/shared/types/screen.types.d.ts +5 -4
  149. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  150. package/lib/typescript/shared/types/stack.types.d.ts +11 -1
  151. package/lib/typescript/shared/types/stack.types.d.ts.map +1 -1
  152. package/lib/typescript/shared/utils/animation/start-screen-transition.d.ts.map +1 -1
  153. package/lib/typescript/shared/utils/bounds/index.d.ts.map +1 -1
  154. package/package.json +1 -1
  155. package/src/blank-stack/components/stack-view.native.tsx +0 -2
  156. package/src/blank-stack/components/stack-view.tsx +0 -2
  157. package/src/blank-stack/types.ts +6 -8
  158. package/src/component-stack/components/component-screen.tsx +3 -3
  159. package/src/component-stack/components/stack-view.tsx +21 -25
  160. package/src/component-stack/navigators/create-component-stack-navigator.tsx +68 -37
  161. package/src/component-stack/types.ts +7 -8
  162. package/src/native-stack/types.ts +2 -3
  163. package/src/native-stack/views/NativeStackView.native.tsx +2 -3
  164. package/src/shared/components/overlay/variations/float-overlay.tsx +2 -8
  165. package/src/shared/components/overlay/variations/overlay-host.tsx +18 -84
  166. package/src/shared/components/overlay/variations/screen-overlay.tsx +6 -15
  167. package/src/shared/components/root-transition-aware.tsx +7 -2
  168. package/src/shared/components/screen-lifecycle.tsx +168 -0
  169. package/src/shared/constants.ts +3 -1
  170. package/src/shared/hooks/animation/use-screen-animation.tsx +3 -3
  171. package/src/shared/hooks/gestures/use-build-gestures.tsx +0 -2
  172. package/src/shared/hooks/navigation/use-screen-state.tsx +99 -0
  173. package/src/shared/hooks/use-stable-callback-value.ts +0 -1
  174. package/src/shared/hooks/use-stack-pointer-events.ts +15 -0
  175. package/src/shared/index.ts +4 -0
  176. package/src/shared/providers/gestures.provider.tsx +5 -1
  177. package/src/shared/providers/screen/keys.provider.tsx +1 -9
  178. package/src/shared/providers/screen/screen-composer.tsx +3 -5
  179. package/src/shared/providers/screen/styles.provider.tsx +1 -1
  180. package/src/shared/providers/stack/core.provider.tsx +6 -1
  181. package/src/shared/types/animation.types.ts +2 -6
  182. package/src/shared/types/index.ts +2 -7
  183. package/src/shared/types/overlay.types.ts +23 -0
  184. package/src/shared/types/screen.types.ts +5 -4
  185. package/src/shared/types/stack.types.ts +17 -1
  186. package/src/shared/utils/animation/start-screen-transition.ts +1 -1
  187. package/src/shared/utils/bounds/index.ts +6 -1
  188. package/lib/commonjs/component-stack/components/component-screen-container.js +0 -23
  189. package/lib/commonjs/component-stack/components/component-screen-container.js.map +0 -1
  190. package/lib/commonjs/native-stack/controllers/native-stack-lifecycle.js +0 -90
  191. package/lib/commonjs/native-stack/controllers/native-stack-lifecycle.js.map +0 -1
  192. package/lib/commonjs/shared/controller/managed-lifecycle.js +0 -78
  193. package/lib/commonjs/shared/controller/managed-lifecycle.js.map +0 -1
  194. package/lib/commonjs/shared/types/state.types.js +0 -9
  195. package/lib/commonjs/shared/types/state.types.js.map +0 -1
  196. package/lib/module/component-stack/components/component-screen-container.js +0 -18
  197. package/lib/module/component-stack/components/component-screen-container.js.map +0 -1
  198. package/lib/module/native-stack/controllers/native-stack-lifecycle.js +0 -83
  199. package/lib/module/native-stack/controllers/native-stack-lifecycle.js.map +0 -1
  200. package/lib/module/shared/controller/managed-lifecycle.js +0 -72
  201. package/lib/module/shared/controller/managed-lifecycle.js.map +0 -1
  202. package/lib/module/shared/types/state.types.js +0 -5
  203. package/lib/module/shared/types/state.types.js.map +0 -1
  204. package/lib/typescript/component-stack/components/component-screen-container.d.ts +0 -6
  205. package/lib/typescript/component-stack/components/component-screen-container.d.ts.map +0 -1
  206. package/lib/typescript/native-stack/controllers/native-stack-lifecycle.d.ts +0 -8
  207. package/lib/typescript/native-stack/controllers/native-stack-lifecycle.d.ts.map +0 -1
  208. package/lib/typescript/shared/controller/managed-lifecycle.d.ts +0 -9
  209. package/lib/typescript/shared/controller/managed-lifecycle.d.ts.map +0 -1
  210. package/lib/typescript/shared/types/state.types.d.ts +0 -3
  211. package/lib/typescript/shared/types/state.types.d.ts.map +0 -1
  212. package/src/component-stack/components/component-screen-container.tsx +0 -15
  213. package/src/native-stack/controllers/native-stack-lifecycle.tsx +0 -96
  214. package/src/shared/controller/managed-lifecycle.tsx +0 -73
  215. package/src/shared/types/state.types.ts +0 -2
@@ -1,6 +1,12 @@
1
1
  import type { Route } from "@react-navigation/native";
2
2
  import type { DerivedValue } from "react-native-reanimated";
3
3
  import type { OverlayInterpolationProps, ScreenInterpolationProps } from "./animation.types";
4
+ import type { ScreenTransitionConfig } from "./screen.types";
5
+ /**
6
+ * @deprecated Overlay mode is no longer needed. Overlays now always render as "float" mode.
7
+ * For per-screen overlays, render an absolute-positioned view directly in your screen component
8
+ * and use `useScreenAnimation()` to access animation values.
9
+ */
4
10
  export type OverlayMode = "float" | "screen";
5
11
  /**
6
12
  * Props passed to overlay components.
@@ -27,12 +33,27 @@ export type OverlayProps<TNavigation = unknown> = {
27
33
  * Navigation prop for the overlay.
28
34
  */
29
35
  navigation: TNavigation;
36
+ /**
37
+ * Screen options for the currently focused screen.
38
+ */
39
+ options: ScreenTransitionConfig;
40
+ /**
41
+ * Stack progress relative to the overlay's position.
42
+ * This is equivalent to `useScreenAnimation().stackProgress`.
43
+ */
44
+ progress: DerivedValue<number>;
30
45
  /**
31
46
  * Animation values for the overlay.
47
+ *
48
+ * @deprecated Use `progress` prop or `useScreenAnimation()` instead.
49
+ * This prop will be removed in a future version.
32
50
  */
33
51
  overlayAnimation: DerivedValue<OverlayInterpolationProps>;
34
52
  /**
35
53
  * Animation values for the screen.
54
+ *
55
+ * @deprecated Use `useScreenAnimation()` hook directly instead.
56
+ * This prop will be removed in a future version.
36
57
  */
37
58
  screenAnimation: DerivedValue<ScreenInterpolationProps>;
38
59
  };
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/overlay.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EACX,yBAAyB,EACzB,wBAAwB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,WAAW,GAAG,OAAO,IAAI;IACjD;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE5B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IAExB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;OAEG;IACH,UAAU,EAAE,WAAW,CAAC;IAExB;;OAEG;IACH,gBAAgB,EAAE,YAAY,CAAC,yBAAyB,CAAC,CAAC;IAE1D;;OAEG;IACH,eAAe,EAAE,YAAY,CAAC,wBAAwB,CAAC,CAAC;CACxD,CAAC"}
1
+ {"version":3,"file":"overlay.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/overlay.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EACX,yBAAyB,EACzB,wBAAwB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,WAAW,GAAG,OAAO,IAAI;IACjD;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE5B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IAExB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;OAEG;IACH,UAAU,EAAE,WAAW,CAAC;IAExB;;OAEG;IACH,OAAO,EAAE,sBAAsB,CAAC;IAEhC;;;OAGG;IACH,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAE/B;;;;;OAKG;IACH,gBAAgB,EAAE,YAAY,CAAC,yBAAyB,CAAC,CAAC;IAE1D;;;;;OAKG;IACH,eAAe,EAAE,YAAY,CAAC,wBAAwB,CAAC,CAAC;CACxD,CAAC"}
@@ -93,10 +93,11 @@ export type ScreenTransitionConfig = {
93
93
  overlay?: (props: OverlayProps) => React.ReactNode;
94
94
  /**
95
95
  * How the overlay is positioned relative to screens.
96
- * - 'float': Single persistent overlay above all screens (like iOS tab bar)
97
- * - 'screen': Per-screen overlay that transitions with content
98
- * - 'container': Wraps all screen content, receives children prop (for MaskedView, custom containers)
99
- * @default 'screen'
96
+ *
97
+ * @deprecated This option is no longer needed. Overlays now always render as "float" mode
98
+ * (single persistent overlay above all screens). For per-screen overlays, render an
99
+ * absolute-positioned view directly in your screen component and use `useScreenAnimation()`
100
+ * to access animation values.
100
101
  */
101
102
  overlayMode?: OverlayMode;
102
103
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"screen.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/screen.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACX,uBAAuB,EACvB,cAAc,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IACvE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC;;OAEG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAElD;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAEzD;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,KAAK,CAAC,SAAS,CAAC;IAEnD;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;OASG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC7C,CAAC"}
1
+ {"version":3,"file":"screen.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/screen.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EACX,uBAAuB,EACvB,cAAc,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG;IACvE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC;;OAEG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAElD;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAEzD;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAE9C;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,KAAK,CAAC,SAAS,CAAC;IAEnD;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;OASG;IACH,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC7C,CAAC"}
@@ -18,8 +18,10 @@ export interface BaseStackNavigation {
18
18
  key: string;
19
19
  }>;
20
20
  key: string;
21
+ index: number;
21
22
  };
22
23
  dispatch: (action: any) => void;
24
+ addListener?: (event: any, callback: any) => () => void;
23
25
  }
24
26
  /**
25
27
  * Base descriptor interface - generic over route, navigation, and options.
@@ -48,8 +50,16 @@ export interface BaseStackState<TRoute extends BaseStackRoute = BaseStackRoute>
48
50
  index: number;
49
51
  key: string;
50
52
  }
53
+ /**
54
+ * Generic descriptor map - keyed by route key.
55
+ * Use this instead of defining stack-specific DescriptorMap types.
56
+ */
57
+ export type DescriptorMap<TDescriptor extends BaseStackDescriptor = BaseStackDescriptor> = {
58
+ [key: string]: TDescriptor;
59
+ };
51
60
  export declare enum StackType {
52
61
  NATIVE = "native",
53
- BLANK = "blank"
62
+ BLANK = "blank",
63
+ COMPONENT = "component"
54
64
  }
55
65
  //# sourceMappingURL=stack.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stack.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/stack.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,MAAM;QAAE,MAAM,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CACnC,MAAM,SAAS,cAAc,GAAG,cAAc,EAC9C,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,EAC7D,QAAQ,SAAS,sBAAsB,GAAG,sBAAsB;IAEhE,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc,CAC9B,WAAW,SAAS,mBAAmB,GAAG,mBAAmB;IAE7D,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,UAAU,EAAE,WAAW,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc,CAC9B,MAAM,SAAS,cAAc,GAAG,cAAc;IAE9C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,oBAAY,SAAS;IACpB,MAAM,WAAW;IACjB,KAAK,UAAU;CACf"}
1
+ {"version":3,"file":"stack.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/stack.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,MAAM;QACf,MAAM,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/B,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,MAAM,IAAI,CAAC;CACxD;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CACnC,MAAM,SAAS,cAAc,GAAG,cAAc,EAC9C,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,EAC7D,QAAQ,SAAS,sBAAsB,GAAG,sBAAsB;IAEhE,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc,CAC9B,WAAW,SAAS,mBAAmB,GAAG,mBAAmB;IAE7D,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,UAAU,EAAE,WAAW,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc,CAC9B,MAAM,SAAS,cAAc,GAAG,cAAc;IAE9C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,CACxB,WAAW,SAAS,mBAAmB,GAAG,mBAAmB,IAC1D;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;CAC3B,CAAC;AAEF,oBAAY,SAAS;IACpB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,SAAS,cAAc;CACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"start-screen-transition.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/animation/start-screen-transition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAIlE,UAAU,0BAA0B;IACnC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,qBAAqB,GAAI,mEAMnC,0BAA0B,SA0C5B,CAAC"}
1
+ {"version":3,"file":"start-screen-transition.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/animation/start-screen-transition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAGlE,UAAU,0BAA0B;IACnC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,qBAAqB,GAAI,mEAMnC,0BAA0B,SA0C5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/bounds/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACX,wBAAwB,EAExB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AAkK3E,eAAO,MAAM,YAAY,GACxB,OAAO,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,KAC7C,cA0EF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/bounds/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACX,wBAAwB,EAExB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AAkK3E,eAAO,MAAM,YAAY,GACxB,OAAO,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,KAC7C,cA+EF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-screen-transitions",
3
- "version": "3.2.0-beta.1",
3
+ "version": "3.2.0-beta.3",
4
4
  "description": "Easy screen transitions for React Native and Expo",
5
5
  "author": "Ed",
6
6
  "license": "MIT",
@@ -5,7 +5,6 @@ import {
5
5
  import * as React from "react";
6
6
  import { Fragment } from "react";
7
7
  import { Overlay } from "../../shared/components/overlay";
8
- import { ManagedLifecycle } from "../../shared/controller/managed-lifecycle";
9
8
  import { ScreenComposer } from "../../shared/providers/screen/screen-composer";
10
9
  import { withStackCore } from "../../shared/providers/stack/core.provider";
11
10
  import { withManagedStack } from "../../shared/providers/stack/managed.provider";
@@ -79,7 +78,6 @@ export const StackView = withStackCore(
79
78
  previous={previousDescriptor}
80
79
  current={descriptor}
81
80
  next={nextDescriptor}
82
- LifecycleController={ManagedLifecycle}
83
81
  >
84
82
  <SceneView key={route.key} descriptor={descriptor} />
85
83
  </ScreenComposer>
@@ -5,7 +5,6 @@ import {
5
5
  import * as React from "react";
6
6
  import { Fragment } from "react";
7
7
  import { Overlay } from "../../shared/components/overlay";
8
- import { ManagedLifecycle } from "../../shared/controller/managed-lifecycle";
9
8
  import { ScreenComposer } from "../../shared/providers/screen/screen-composer";
10
9
  import { withStackCore } from "../../shared/providers/stack/core.provider";
11
10
  import { withManagedStack } from "../../shared/providers/stack/managed.provider";
@@ -79,7 +78,6 @@ export const StackView = withStackCore(
79
78
  previous={previousDescriptor}
80
79
  current={descriptor}
81
80
  next={nextDescriptor}
82
- LifecycleController={ManagedLifecycle}
83
81
  >
84
82
  <SceneView key={route.key} descriptor={descriptor} />
85
83
  </ScreenComposer>
@@ -4,7 +4,6 @@ import type {
4
4
  NavigationHelpers,
5
5
  NavigationProp,
6
6
  ParamListBase,
7
- Route,
8
7
  RouteProp,
9
8
  StackActionHelpers,
10
9
  StackNavigationState,
@@ -13,6 +12,10 @@ import type {
13
12
  } from "@react-navigation/native";
14
13
  import type { ScreenTransitionConfig } from "../shared";
15
14
  import type { OverlayProps } from "../shared/types/overlay.types";
15
+ import type {
16
+ BaseStackScene,
17
+ DescriptorMap,
18
+ } from "../shared/types/stack.types";
16
19
 
17
20
  export type BlankStackNavigationEventMap = {};
18
21
 
@@ -52,10 +55,7 @@ export type BlankStackNavigationHelpers = NavigationHelpers<
52
55
  BlankStackNavigationEventMap
53
56
  >;
54
57
 
55
- export type BlankStackScene = {
56
- route: Route<string>;
57
- descriptor: BlankStackDescriptor;
58
- };
58
+ export type BlankStackScene = BaseStackScene<BlankStackDescriptor>;
59
59
 
60
60
  type BlankStackNavigationConfig = {
61
61
  DISABLE_NATIVE_SCREENS?: boolean;
@@ -106,6 +106,4 @@ export type BlankStackDescriptor = Descriptor<
106
106
  RouteProp<ParamListBase>
107
107
  >;
108
108
 
109
- export type BlankStackDescriptorMap = {
110
- [key: string]: BlankStackDescriptor;
111
- };
109
+ export type BlankStackDescriptorMap = DescriptorMap<BlankStackDescriptor>;
@@ -11,6 +11,8 @@ interface ScreenProps {
11
11
  routeKey: string;
12
12
  children: React.ReactNode;
13
13
  }
14
+ const POINT_NONE = "none" as const;
15
+ const POINT_BOX_NONE = "box-none" as const;
14
16
 
15
17
  export const ComponentScreen = ({ routeKey, children }: ScreenProps) => {
16
18
  const sceneClosing = AnimationStore.getAnimation(routeKey, "closing");
@@ -18,9 +20,7 @@ export const ComponentScreen = ({ routeKey, children }: ScreenProps) => {
18
20
 
19
21
  const animatedProps = useAnimatedProps(() => {
20
22
  return {
21
- pointerEvents: sceneClosing.get()
22
- ? ("none" as const)
23
- : ("box-none" as const),
23
+ pointerEvents: sceneClosing.get() ? POINT_NONE : POINT_BOX_NONE,
24
24
  };
25
25
  });
26
26
 
@@ -5,16 +5,15 @@ import {
5
5
  import * as React from "react";
6
6
  import { Fragment } from "react";
7
7
  import { Overlay } from "../../shared/components/overlay";
8
- import { ManagedLifecycle } from "../../shared/controller/managed-lifecycle";
9
8
  import { ScreenComposer } from "../../shared/providers/screen/screen-composer";
10
9
  import { withStackCore } from "../../shared/providers/stack/core.provider";
11
10
  import { withManagedStack } from "../../shared/providers/stack/managed.provider";
11
+ import { StackType } from "../../shared/types/stack.types";
12
12
  import type {
13
13
  ComponentStackDescriptor,
14
14
  ComponentStackNavigationHelpers,
15
15
  } from "../types";
16
16
  import { ComponentScreen } from "./component-screen";
17
- import { ComponentScreenContainer } from "./component-screen-container";
18
17
 
19
18
  type SceneViewProps = {
20
19
  descriptor: ComponentStackDescriptor;
@@ -36,37 +35,34 @@ const SceneView = React.memo(function SceneView({
36
35
  });
37
36
 
38
37
  export const StackView = withStackCore(
39
- { TRANSITIONS_ALWAYS_ON: true },
38
+ { TRANSITIONS_ALWAYS_ON: true, STACK_TYPE: StackType.COMPONENT },
40
39
  withManagedStack<ComponentStackDescriptor, ComponentStackNavigationHelpers>(
41
40
  ({ scenes, shouldShowFloatOverlay }) => {
42
41
  return (
43
42
  <Fragment>
44
43
  {shouldShowFloatOverlay ? <Overlay.Float /> : null}
45
44
 
46
- <ComponentScreenContainer>
47
- {scenes.map((scene, sceneIndex) => {
48
- const descriptor = scene.descriptor;
49
- const route = scene.route;
45
+ {scenes.map((scene, sceneIndex) => {
46
+ const descriptor = scene.descriptor;
47
+ const route = scene.route;
50
48
 
51
- const previousDescriptor =
52
- scenes[sceneIndex - 1]?.descriptor ?? undefined;
53
- const nextDescriptor =
54
- scenes[sceneIndex + 1]?.descriptor ?? undefined;
49
+ const previousDescriptor =
50
+ scenes[sceneIndex - 1]?.descriptor ?? undefined;
51
+ const nextDescriptor =
52
+ scenes[sceneIndex + 1]?.descriptor ?? undefined;
55
53
 
56
- return (
57
- <ComponentScreen key={route.key} routeKey={route.key}>
58
- <ScreenComposer
59
- previous={previousDescriptor}
60
- current={descriptor}
61
- next={nextDescriptor}
62
- LifecycleController={ManagedLifecycle}
63
- >
64
- <SceneView key={route.key} descriptor={descriptor} />
65
- </ScreenComposer>
66
- </ComponentScreen>
67
- );
68
- })}
69
- </ComponentScreenContainer>
54
+ return (
55
+ <ComponentScreen key={route.key} routeKey={route.key}>
56
+ <ScreenComposer
57
+ previous={previousDescriptor}
58
+ current={descriptor}
59
+ next={nextDescriptor}
60
+ >
61
+ <SceneView key={route.key} descriptor={descriptor} />
62
+ </ScreenComposer>
63
+ </ComponentScreen>
64
+ );
65
+ })}
70
66
  </Fragment>
71
67
  );
72
68
  },
@@ -12,6 +12,7 @@ import {
12
12
  type TypedNavigator,
13
13
  useNavigationBuilder,
14
14
  } from "@react-navigation/native";
15
+ import * as React from "react";
15
16
  import { StackView } from "../components/stack-view";
16
17
  import type {
17
18
  ComponentStackNavigationEventMap,
@@ -20,45 +21,75 @@ import type {
20
21
  ComponentStackNavigatorProps,
21
22
  } from "../types";
22
23
 
23
- function ComponentStackNavigator({
24
- id,
25
- initialRouteName,
26
- children,
27
- layout,
28
- screenListeners,
29
- screenOptions,
30
- screenLayout,
31
- ...rest
32
- }: ComponentStackNavigatorProps) {
33
- const { state, describe, descriptors, navigation, NavigationContent } =
34
- useNavigationBuilder<
35
- StackNavigationState<ParamListBase>,
36
- StackRouterOptions,
37
- StackActionHelpers<ParamListBase>,
38
- ComponentStackNavigationOptions,
39
- ComponentStackNavigationEventMap
40
- >(StackRouter, {
41
- id,
42
- initialRouteName,
43
- children,
44
- layout,
45
- screenListeners,
46
- screenOptions,
47
- screenLayout,
48
- });
24
+ /**
25
+ * Context to detect if we're inside a ComponentStack.
26
+ * Used to avoid double-wrapping nested ComponentStacks in NavigationIndependentTree.
27
+ */
28
+ const ComponentStackContext = React.createContext<boolean>(false);
29
+ ComponentStackContext.displayName = "ComponentStackContext";
30
+
31
+ const ComponentStackNavigatorInner = React.memo(
32
+ function ComponentStackNavigatorInner({
33
+ id,
34
+ initialRouteName,
35
+ children,
36
+ layout,
37
+ screenListeners,
38
+ screenOptions,
39
+ screenLayout,
40
+ ...rest
41
+ }: ComponentStackNavigatorProps) {
42
+ const { state, describe, descriptors, navigation, NavigationContent } =
43
+ useNavigationBuilder<
44
+ StackNavigationState<ParamListBase>,
45
+ StackRouterOptions,
46
+ StackActionHelpers<ParamListBase>,
47
+ ComponentStackNavigationOptions,
48
+ ComponentStackNavigationEventMap
49
+ >(StackRouter, {
50
+ id,
51
+ initialRouteName,
52
+ children,
53
+ layout,
54
+ screenListeners,
55
+ screenOptions,
56
+ screenLayout,
57
+ });
58
+
59
+ return (
60
+ <NavigationContent>
61
+ <StackView
62
+ {...rest}
63
+ state={state}
64
+ navigation={navigation}
65
+ descriptors={descriptors}
66
+ describe={describe}
67
+ />
68
+ </NavigationContent>
69
+ );
70
+ },
71
+ );
72
+
73
+ /**
74
+ * ComponentStackNavigator conditionally wraps in NavigationIndependentTree.
75
+ * - If already inside a ComponentStack (nested), just render the inner navigator
76
+ * so it participates in the parent's navigation tree and goBack() works.
77
+ * - If top-level, wrap in NavigationIndependentTree + NavigationContainer
78
+ * to isolate from Expo Router / React Navigation.
79
+ */
80
+ function IsolatedComponentStackNavigator(props: ComponentStackNavigatorProps) {
81
+ const isNested = React.useContext(ComponentStackContext);
82
+
83
+ if (isNested) {
84
+ return <ComponentStackNavigatorInner {...props} />;
85
+ }
49
86
 
50
87
  return (
51
88
  <NavigationIndependentTree>
52
89
  <NavigationContainer>
53
- <NavigationContent>
54
- <StackView
55
- {...rest}
56
- state={state}
57
- navigation={navigation}
58
- descriptors={descriptors}
59
- describe={describe}
60
- />
61
- </NavigationContent>
90
+ <ComponentStackContext.Provider value={true}>
91
+ <ComponentStackNavigatorInner {...props} />
92
+ </ComponentStackContext.Provider>
62
93
  </NavigationContainer>
63
94
  </NavigationIndependentTree>
64
95
  );
@@ -80,9 +111,9 @@ export function createComponentStackNavigator<
80
111
  NavigatorID
81
112
  >;
82
113
  };
83
- Navigator: typeof ComponentStackNavigator;
114
+ Navigator: typeof IsolatedComponentStackNavigator;
84
115
  },
85
116
  const Config extends StaticConfig<TypeBag> = StaticConfig<TypeBag>,
86
117
  >(config?: Config): TypedNavigator<TypeBag, Config> {
87
- return createNavigatorFactory(ComponentStackNavigator)(config);
118
+ return createNavigatorFactory(IsolatedComponentStackNavigator)(config);
88
119
  }
@@ -4,7 +4,6 @@ import type {
4
4
  NavigationHelpers,
5
5
  NavigationProp,
6
6
  ParamListBase,
7
- Route,
8
7
  RouteProp,
9
8
  StackActionHelpers,
10
9
  StackNavigationState,
@@ -13,6 +12,10 @@ import type {
13
12
  } from "@react-navigation/native";
14
13
  import type { ScreenTransitionConfig } from "../shared";
15
14
  import type { OverlayProps } from "../shared/types/overlay.types";
15
+ import type {
16
+ BaseStackScene,
17
+ DescriptorMap,
18
+ } from "../shared/types/stack.types";
16
19
 
17
20
  export type ComponentStackNavigationEventMap = {};
18
21
 
@@ -52,10 +55,7 @@ export type ComponentStackNavigationHelpers = NavigationHelpers<
52
55
  ComponentStackNavigationEventMap
53
56
  >;
54
57
 
55
- export type ComponentStackScene = {
56
- route: Route<string>;
57
- descriptor: ComponentStackDescriptor;
58
- };
58
+ export type ComponentStackScene = BaseStackScene<ComponentStackDescriptor>;
59
59
 
60
60
  type ComponentStackNavigationConfig = {};
61
61
 
@@ -96,6 +96,5 @@ export type ComponentStackDescriptor = Descriptor<
96
96
  RouteProp<ParamListBase>
97
97
  >;
98
98
 
99
- export type ComponentStackDescriptorMap = {
100
- [key: string]: ComponentStackDescriptor;
101
- };
99
+ export type ComponentStackDescriptorMap =
100
+ DescriptorMap<ComponentStackDescriptor>;
@@ -24,6 +24,7 @@ import type {
24
24
  } from "react-native-screens";
25
25
  import type { OverlayProps } from "../shared/types/overlay.types";
26
26
  import type { ScreenTransitionConfig } from "../shared/types/screen.types";
27
+ import type { DescriptorMap } from "../shared/types/stack.types";
27
28
 
28
29
  export type NativeStackNavigationEventMap = {
29
30
  /**
@@ -717,6 +718,4 @@ export type NativeStackDescriptor = Descriptor<
717
718
  RouteProp<ParamListBase>
718
719
  >;
719
720
 
720
- export type NativeStackDescriptorMap = {
721
- [key: string]: NativeStackDescriptor;
722
- };
721
+ export type NativeStackDescriptorMap = DescriptorMap<NativeStackDescriptor>;
@@ -35,7 +35,7 @@ import {
35
35
  type DirectStackContextValue,
36
36
  withDirectStack,
37
37
  } from "../../shared/providers/stack/direct.provider";
38
- import { NativeStackScreenLifecycleController } from "../controllers/native-stack-lifecycle";
38
+ import { StackType } from "../../shared/types/stack.types";
39
39
  import type { NativeStackDescriptor } from "../types";
40
40
  import { debounce } from "../utils/debounce";
41
41
  import { getModalRouteKeys } from "../utils/getModalRoutesKeys";
@@ -468,7 +468,6 @@ const SceneView = ({
468
468
  previous={previousDescriptor}
469
469
  current={descriptor}
470
470
  next={nextDescriptor}
471
- LifecycleController={NativeStackScreenLifecycleController}
472
471
  >
473
472
  {render()}
474
473
  </ScreenComposer>
@@ -483,7 +482,7 @@ const SceneView = ({
483
482
  };
484
483
 
485
484
  export const NativeStackView = withStackCore(
486
- { TRANSITIONS_ALWAYS_ON: false },
485
+ { TRANSITIONS_ALWAYS_ON: false, STACK_TYPE: StackType.NATIVE },
487
486
  withDirectStack(function NativeStackViewContent({
488
487
  state,
489
488
  navigation,
@@ -10,7 +10,7 @@ import { OverlayHost } from "./overlay-host";
10
10
  * Gets routes and descriptors from stack context.
11
11
  */
12
12
  export function FloatOverlay() {
13
- const { routes, scenes, focusedIndex, flags } = useStack();
13
+ const { scenes, focusedIndex, flags } = useStack();
14
14
 
15
15
  const activeOverlay = useMemo(
16
16
  () =>
@@ -31,13 +31,7 @@ export function FloatOverlay() {
31
31
  return (
32
32
  <KeysProvider current={current} previous={previous} next={next}>
33
33
  <ScreenStylesProvider>
34
- <OverlayHost
35
- scene={scene}
36
- scenes={scenes}
37
- routes={routes}
38
- overlayIndex={overlayIndex}
39
- isFloating
40
- />
34
+ <OverlayHost scene={scene} />
41
35
  </ScreenStylesProvider>
42
36
  </KeysProvider>
43
37
  );