react-native-screen-transitions 3.0.0-rc.3 → 3.0.0-rc.5

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 (127) hide show
  1. package/lib/commonjs/blank-stack/components/screens.js +22 -13
  2. package/lib/commonjs/blank-stack/components/screens.js.map +1 -1
  3. package/lib/commonjs/blank-stack/components/stack-view.js +42 -39
  4. package/lib/commonjs/blank-stack/components/stack-view.js.map +1 -1
  5. package/lib/commonjs/blank-stack/utils/with-stack-navigation/index.js +11 -10
  6. package/lib/commonjs/blank-stack/utils/with-stack-navigation/index.js.map +1 -1
  7. package/lib/commonjs/native-stack/views/NativeStackView.native.js +110 -103
  8. package/lib/commonjs/native-stack/views/NativeStackView.native.js.map +1 -1
  9. package/lib/commonjs/shared/components/controllers/blank-stack-lifecycle.js +72 -0
  10. package/lib/commonjs/shared/components/controllers/blank-stack-lifecycle.js.map +1 -0
  11. package/lib/commonjs/shared/components/controllers/native-stack-lifecycle.js +81 -0
  12. package/lib/commonjs/shared/components/controllers/native-stack-lifecycle.js.map +1 -0
  13. package/lib/commonjs/shared/hooks/animation/use-screen-animation.js +11 -1
  14. package/lib/commonjs/shared/hooks/animation/use-screen-animation.js.map +1 -1
  15. package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js +11 -6
  16. package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  17. package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js +7 -7
  18. package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
  19. package/lib/commonjs/shared/providers/gestures.provider.js +36 -20
  20. package/lib/commonjs/shared/providers/gestures.provider.js.map +1 -1
  21. package/lib/commonjs/shared/providers/register-bounds.provider.js +4 -3
  22. package/lib/commonjs/shared/providers/register-bounds.provider.js.map +1 -1
  23. package/lib/commonjs/shared/providers/routes.provider.js +48 -0
  24. package/lib/commonjs/shared/providers/routes.provider.js.map +1 -0
  25. package/lib/commonjs/shared/providers/screen-transition.provider.js.map +1 -1
  26. package/lib/commonjs/shared/types/state.types.js +9 -0
  27. package/lib/commonjs/shared/types/state.types.js.map +1 -0
  28. package/lib/commonjs/shared/utils/animation/compute-stack-progress.js +20 -0
  29. package/lib/commonjs/shared/utils/animation/compute-stack-progress.js.map +1 -0
  30. package/lib/commonjs/shared/utils/animation/derivations.js +1 -1
  31. package/lib/commonjs/shared/utils/animation/start-screen-transition.js +11 -11
  32. package/lib/commonjs/shared/utils/animation/start-screen-transition.js.map +1 -1
  33. package/lib/module/blank-stack/components/screens.js +22 -13
  34. package/lib/module/blank-stack/components/screens.js.map +1 -1
  35. package/lib/module/blank-stack/components/stack-view.js +42 -39
  36. package/lib/module/blank-stack/components/stack-view.js.map +1 -1
  37. package/lib/module/blank-stack/utils/with-stack-navigation/index.js +11 -10
  38. package/lib/module/blank-stack/utils/with-stack-navigation/index.js.map +1 -1
  39. package/lib/module/native-stack/views/NativeStackView.native.js +109 -102
  40. package/lib/module/native-stack/views/NativeStackView.native.js.map +1 -1
  41. package/lib/module/shared/components/controllers/blank-stack-lifecycle.js +66 -0
  42. package/lib/module/shared/components/controllers/blank-stack-lifecycle.js.map +1 -0
  43. package/lib/module/shared/components/controllers/native-stack-lifecycle.js +74 -0
  44. package/lib/module/shared/components/controllers/native-stack-lifecycle.js.map +1 -0
  45. package/lib/module/shared/hooks/animation/use-screen-animation.js +11 -1
  46. package/lib/module/shared/hooks/animation/use-screen-animation.js.map +1 -1
  47. package/lib/module/shared/hooks/gestures/use-build-gestures.js +11 -6
  48. package/lib/module/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  49. package/lib/module/shared/hooks/gestures/use-scroll-registry.js +7 -7
  50. package/lib/module/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
  51. package/lib/module/shared/providers/gestures.provider.js +36 -21
  52. package/lib/module/shared/providers/gestures.provider.js.map +1 -1
  53. package/lib/module/shared/providers/register-bounds.provider.js +4 -3
  54. package/lib/module/shared/providers/register-bounds.provider.js.map +1 -1
  55. package/lib/module/shared/providers/routes.provider.js +42 -0
  56. package/lib/module/shared/providers/routes.provider.js.map +1 -0
  57. package/lib/module/shared/providers/screen-transition.provider.js.map +1 -1
  58. package/lib/module/shared/types/state.types.js +5 -0
  59. package/lib/module/shared/types/state.types.js.map +1 -0
  60. package/lib/module/shared/utils/animation/compute-stack-progress.js +15 -0
  61. package/lib/module/shared/utils/animation/compute-stack-progress.js.map +1 -0
  62. package/lib/module/shared/utils/animation/derivations.js +1 -1
  63. package/lib/module/shared/utils/animation/start-screen-transition.js +11 -11
  64. package/lib/module/shared/utils/animation/start-screen-transition.js.map +1 -1
  65. package/lib/typescript/blank-stack/components/screens.d.ts +1 -3
  66. package/lib/typescript/blank-stack/components/screens.d.ts.map +1 -1
  67. package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
  68. package/lib/typescript/blank-stack/types.d.ts +1 -39
  69. package/lib/typescript/blank-stack/types.d.ts.map +1 -1
  70. package/lib/typescript/blank-stack/utils/with-stack-navigation/index.d.ts.map +1 -1
  71. package/lib/typescript/native-stack/views/NativeStackView.native.d.ts.map +1 -1
  72. package/lib/typescript/shared/components/controllers/blank-stack-lifecycle.d.ts +8 -0
  73. package/lib/typescript/shared/components/controllers/blank-stack-lifecycle.d.ts.map +1 -0
  74. package/lib/typescript/shared/components/controllers/native-stack-lifecycle.d.ts +8 -0
  75. package/lib/typescript/shared/components/controllers/native-stack-lifecycle.d.ts.map +1 -0
  76. package/lib/typescript/shared/hooks/animation/use-screen-animation.d.ts.map +1 -1
  77. package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts +2 -2
  78. package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts.map +1 -1
  79. package/lib/typescript/shared/providers/gestures.provider.d.ts +10 -7
  80. package/lib/typescript/shared/providers/gestures.provider.d.ts.map +1 -1
  81. package/lib/typescript/shared/providers/register-bounds.provider.d.ts.map +1 -1
  82. package/lib/typescript/shared/providers/routes.provider.d.ts +19 -0
  83. package/lib/typescript/shared/providers/routes.provider.d.ts.map +1 -0
  84. package/lib/typescript/shared/providers/screen-transition.provider.d.ts +2 -2
  85. package/lib/typescript/shared/providers/screen-transition.provider.d.ts.map +1 -1
  86. package/lib/typescript/shared/types/animation.types.d.ts +12 -0
  87. package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
  88. package/lib/typescript/shared/types/state.types.d.ts +3 -0
  89. package/lib/typescript/shared/types/state.types.d.ts.map +1 -0
  90. package/lib/typescript/shared/utils/animation/compute-stack-progress.d.ts +3 -0
  91. package/lib/typescript/shared/utils/animation/compute-stack-progress.d.ts.map +1 -0
  92. package/lib/typescript/shared/utils/animation/start-screen-transition.d.ts.map +1 -1
  93. package/package.json +1 -1
  94. package/src/blank-stack/components/screens.tsx +25 -19
  95. package/src/blank-stack/components/stack-view.tsx +57 -53
  96. package/src/blank-stack/types.ts +1 -24
  97. package/src/blank-stack/utils/with-stack-navigation/index.tsx +17 -3
  98. package/src/native-stack/views/NativeStackView.native.tsx +121 -112
  99. package/src/shared/__tests__/bounds.store.test.ts +14 -36
  100. package/src/shared/components/controllers/blank-stack-lifecycle.tsx +70 -0
  101. package/src/shared/components/controllers/native-stack-lifecycle.tsx +89 -0
  102. package/src/shared/hooks/animation/use-screen-animation.tsx +11 -6
  103. package/src/shared/hooks/gestures/use-build-gestures.tsx +12 -6
  104. package/src/shared/hooks/gestures/use-scroll-registry.tsx +7 -7
  105. package/src/shared/providers/gestures.provider.tsx +49 -48
  106. package/src/shared/providers/register-bounds.provider.tsx +4 -3
  107. package/src/shared/providers/routes.provider.tsx +54 -0
  108. package/src/shared/providers/screen-transition.provider.tsx +2 -2
  109. package/src/shared/types/animation.types.ts +13 -0
  110. package/src/shared/types/state.types.ts +2 -0
  111. package/src/shared/utils/animation/compute-stack-progress.ts +16 -0
  112. package/src/shared/utils/animation/derivations.ts +1 -1
  113. package/src/shared/utils/animation/start-screen-transition.ts +13 -10
  114. package/lib/commonjs/shared/components/controllers/screen-lifecycle.js +0 -142
  115. package/lib/commonjs/shared/components/controllers/screen-lifecycle.js.map +0 -1
  116. package/lib/commonjs/shared/hooks/gestures/use-parent-gesture-registry.js +0 -28
  117. package/lib/commonjs/shared/hooks/gestures/use-parent-gesture-registry.js.map +0 -1
  118. package/lib/module/shared/components/controllers/screen-lifecycle.js +0 -136
  119. package/lib/module/shared/components/controllers/screen-lifecycle.js.map +0 -1
  120. package/lib/module/shared/hooks/gestures/use-parent-gesture-registry.js +0 -23
  121. package/lib/module/shared/hooks/gestures/use-parent-gesture-registry.js.map +0 -1
  122. package/lib/typescript/shared/components/controllers/screen-lifecycle.d.ts +0 -12
  123. package/lib/typescript/shared/components/controllers/screen-lifecycle.d.ts.map +0 -1
  124. package/lib/typescript/shared/hooks/gestures/use-parent-gesture-registry.d.ts +0 -6
  125. package/lib/typescript/shared/hooks/gestures/use-parent-gesture-registry.d.ts.map +0 -1
  126. package/src/shared/components/controllers/screen-lifecycle.tsx +0 -154
  127. package/src/shared/hooks/gestures/use-parent-gesture-registry.tsx +0 -18
@@ -1,4 +1,4 @@
1
- import type { GestureType } from "react-native-gesture-handler";
1
+ import { type GestureType } from "react-native-gesture-handler";
2
2
  import type { SharedValue } from "react-native-reanimated";
3
3
  import type { GestureStoreMap } from "../stores/gesture.store";
4
4
  export type ScrollConfig = {
@@ -14,12 +14,15 @@ export interface GestureContextType {
14
14
  nativeGesture: GestureType;
15
15
  scrollConfig: SharedValue<ScrollConfig | null>;
16
16
  gestureAnimationValues: GestureStoreMap;
17
- parentContext: GestureContextType | null;
17
+ ancestorContext: GestureContextType | null;
18
18
  }
19
- type GestureProviderProps = {
19
+ /**
20
+ * Provider that creates gesture handling for a screen.
21
+ * If the current screen doesn't have gestures enabled but an ancestor does,
22
+ * we pass through the ancestor's context so scrollable children can coordinate
23
+ * with the ancestor's gestures.
24
+ */
25
+ export declare const ScreenGestureProvider: import("react").FC<{
20
26
  children: React.ReactNode;
21
- };
22
- export declare const ScreenGestureProvider: ({ children }: GestureProviderProps) => import("react/jsx-runtime").JSX.Element;
23
- export declare const useGestureContext: () => GestureContextType;
24
- export {};
27
+ }>, useGestureContext: () => GestureContextType | null;
25
28
  //# sourceMappingURL=gestures.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gestures.provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/gestures.provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAClC,UAAU,EAAE,WAAW,CAAC;IACxB,aAAa,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC/C,sBAAsB,EAAE,eAAe,CAAC;IACxC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACzC;AAED,KAAK,oBAAoB,GAAG;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC;AAIF,eAAO,MAAM,qBAAqB,GAAI,cAAc,oBAAoB,4CAmCvE,CAAC;AAEF,eAAO,MAAM,iBAAiB,0BAU7B,CAAC"}
1
+ {"version":3,"file":"gestures.provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/gestures.provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGN,KAAK,WAAW,EAChB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,MAAM,MAAM,YAAY,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAClC,UAAU,EAAE,WAAW,CAAC;IACxB,aAAa,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC/C,sBAAsB,EAAE,eAAe,CAAC;IACxC,eAAe,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;GAKG;AACH,eAAO,MACN,qBAAqB;cAGT,KAAK,CAAC,SAAS;IAFF,iBAAiB,iCAyCzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-bounds.provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/register-bounds.provider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACN,KAAK,WAAW,EAIhB,KAAK,UAAU,EAGf,MAAM,yBAAyB,CAAC;AAgBjC,UAAU,yBAAyB;IAClC,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,oBAAoB,EAAE,MAAM,IAAI,CAAC;CACjC;AAED,UAAU,2BAA2B;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,SAAS,CAAC;CAC1D;AA4JD,QAAA,MAAQ,sBAAsB,iDA4H7B,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"register-bounds.provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/register-bounds.provider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAgC,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACN,KAAK,WAAW,EAIhB,KAAK,UAAU,EAGf,MAAM,yBAAyB,CAAC;AAgBjC,UAAU,yBAAyB;IAClC,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,oBAAoB,EAAE,MAAM,IAAI,CAAC;CACjC;AAED,UAAU,2BAA2B;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,SAAS,CAAC;CAC1D;AA6JD,QAAA,MAAQ,sBAAsB,iDA4H7B,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type AnimationStoreMap } from "../stores/animation.store";
2
+ interface RoutesProviderProps {
3
+ children: React.ReactNode;
4
+ routeKeys: string[];
5
+ }
6
+ interface RoutesContextValue {
7
+ /**
8
+ * Array of route keys for all routes in the stack, in order.
9
+ */
10
+ routeKeys: string[];
11
+ }
12
+ declare const RoutesProvider: import("react").FC<RoutesProviderProps>, useRoutesContext: () => RoutesContextValue | null;
13
+ export { RoutesProvider, useRoutesContext };
14
+ /**
15
+ * Hook to get animation values for all screens from a given index onwards.
16
+ * Useful for computing accumulated progress across multiple screens.
17
+ */
18
+ export declare function useStackAnimationValues(currentRouteKey: string | undefined): AnimationStoreMap[];
19
+ //# sourceMappingURL=routes.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/routes.provider.tsx"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,iBAAiB,EACtB,MAAM,2BAA2B,CAAC;AAGnC,UAAU,mBAAmB;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC3B;;OAEG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,QAAA,MAAQ,cAAc,2CAAE,gBAAgB,iCAIrC,CAAC;AAEJ,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,uBAAuB,CACtC,eAAe,EAAE,MAAM,GAAG,SAAS,GACjC,iBAAiB,EAAE,CAoBrB"}
@@ -1,13 +1,13 @@
1
1
  import type React from "react";
2
2
  import type { ComponentType } from "react";
3
- import type { ScreenLifecycleProps } from "../components/controllers/screen-lifecycle";
3
+ import type { Any } from "../types/utils.types";
4
4
  import { type TransitionDescriptor } from "./keys.provider";
5
5
  type Props<TDescriptor extends TransitionDescriptor> = {
6
6
  previous?: TDescriptor;
7
7
  current: TDescriptor;
8
8
  next?: TDescriptor;
9
9
  children: React.ReactNode;
10
- LifecycleController: ComponentType<ScreenLifecycleProps>;
10
+ LifecycleController: ComponentType<Any>;
11
11
  };
12
12
  export declare function ScreenTransitionProvider<TDescriptor extends TransitionDescriptor>({ previous, current, next, children, LifecycleController, }: Props<TDescriptor>): import("react/jsx-runtime").JSX.Element;
13
13
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"screen-transition.provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/screen-transition.provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAGvF,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG1E,KAAK,KAAK,CAAC,WAAW,SAAS,oBAAoB,IAAI;IACtD,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,mBAAmB,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAgB,wBAAwB,CACvC,WAAW,SAAS,oBAAoB,EACvC,EACD,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,mBAAmB,GACnB,EAAE,KAAK,CAAC,WAAW,CAAC,2CAgBpB"}
1
+ {"version":3,"file":"screen-transition.provider.d.ts","sourceRoot":"","sources":["../../../../src/shared/providers/screen-transition.provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG1E,KAAK,KAAK,CAAC,WAAW,SAAS,oBAAoB,IAAI;IACtD,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,mBAAmB,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;CACxC,CAAC;AAEF,wBAAgB,wBAAwB,CACvC,WAAW,SAAS,oBAAoB,EACvC,EACD,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,mBAAmB,GACnB,EAAE,KAAK,CAAC,WAAW,CAAC,2CAgBpB"}
@@ -60,6 +60,18 @@ export interface ScreenInterpolationProps {
60
60
  * Combined progress of current and next screen transitions, ranging from 0-2.
61
61
  */
62
62
  progress: number;
63
+ /**
64
+ * Accumulated progress from the current screen's position onwards in the stack.
65
+ * Unlike `progress` (0-2), this ranges from 0-N where N is the number of screens
66
+ * above the current screen. Each screen at index I sees stackProgress as the
67
+ * sum of all progress values from index I to the top of the stack.
68
+ *
69
+ * Example: With 4 screens pushed, screen at index 1 would see stackProgress = 3
70
+ * when all screens are fully transitioned.
71
+ *
72
+ * Falls back to `progress` when not in blank-stack.
73
+ */
74
+ stackProgress: number;
63
75
  /**
64
76
  * Function that provides access to bounds builders for creating shared element transitions.
65
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"animation.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/animation.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACR;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACxC;;OAEG;IACH,QAAQ,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAE5C;;OAEG;IACH,OAAO,EAAE,qBAAqB,CAAC;IAE/B;;OAEG;IACH,IAAI,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAExC;;OAEG;IACH,OAAO,EAAE;QACR;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;IAEtB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,qBAAqB,CAAC;IAE9B;;OAEG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,uBAAuB,GAAG,CACrC,KAAK,EAAE,wBAAwB,KAC3B,2BAA2B,CAAC;AAEjC,MAAM,MAAM,2BAA2B,GAAG;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB"}
1
+ {"version":3,"file":"animation.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/animation.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACR;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACxC;;OAEG;IACH,QAAQ,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAE5C;;OAEG;IACH,OAAO,EAAE,qBAAqB,CAAC;IAE/B;;OAEG;IACH,IAAI,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAExC;;OAEG;IACH,OAAO,EAAE;QACR;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;IAEtB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;OAUG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,MAAM,EAAE,qBAAqB,CAAC;IAE9B;;OAEG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,uBAAuB,GAAG,CACrC,KAAK,EAAE,wBAAwB,KAC3B,2BAA2B,CAAC;AAEjC,MAAM,MAAM,2BAA2B,GAAG;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB"}
@@ -0,0 +1,3 @@
1
+ export declare const TRUE = 1;
2
+ export declare const FALSE = 0;
3
+ //# sourceMappingURL=state.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/types/state.types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,IAAI,CAAC;AACtB,eAAO,MAAM,KAAK,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AnimationStoreMap } from "../../stores/animation.store";
2
+ export declare const computeStackProgress: (stackAnimationValues: AnimationStoreMap[], fallback?: number) => number;
3
+ //# sourceMappingURL=compute-stack-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute-stack-progress.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/animation/compute-stack-progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,eAAO,MAAM,oBAAoB,GAChC,sBAAsB,iBAAiB,EAAE,EACzC,WAAU,MAAU,WAWpB,CAAC"}
@@ -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;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,SAwC5B,CAAC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-screen-transitions",
3
- "version": "3.0.0-rc.3",
3
+ "version": "3.0.0-rc.5",
4
4
  "description": "Easy screen transitions for React Native and Expo",
5
5
  "author": "Ed",
6
6
  "license": "MIT",
@@ -8,54 +8,58 @@ import Animated, {
8
8
  } from "react-native-reanimated";
9
9
  import { Screen as RNSScreen } from "react-native-screens";
10
10
  import { AnimationStore } from "../../shared/stores/animation.store";
11
+ import { useStackNavigationContext } from "../utils/with-stack-navigation";
11
12
 
12
13
  interface ScreenProps {
13
14
  routeKey: string;
14
15
  index: number;
15
- routesLength: number;
16
16
  isPreloaded: boolean;
17
17
  children: React.ReactNode;
18
18
  freezeOnBlur?: boolean;
19
19
  shouldFreeze?: boolean;
20
- activeScreensLimit: number;
20
+ }
21
+ enum ScreenActivity {
22
+ INACTIVE = 0,
23
+ TRANSITIONING_OR_BELOW_TOP = 1,
24
+ ON_TOP = 2,
21
25
  }
22
26
 
23
27
  const EPSILON = 1e-5;
24
28
 
25
- const STATE_INACTIVE = 0;
26
- const STATE_TRANSITIONING_OR_BELOW_TOP = 1;
27
- const STATE_ON_TOP = 2;
28
-
29
29
  const AnimatedScreen = Animated.createAnimatedComponent(RNSScreen);
30
30
 
31
31
  export const Screen = ({
32
32
  routeKey,
33
33
  index,
34
- routesLength,
35
34
  isPreloaded,
36
- activeScreensLimit,
37
35
  children,
38
36
  freezeOnBlur,
39
37
  shouldFreeze,
40
38
  }: ScreenProps) => {
39
+ const { activeScreensLimit, routes } = useStackNavigationContext();
40
+ const routesLength = routes.length;
41
+
41
42
  const sceneProgress = AnimationStore.getAnimation(routeKey, "progress");
42
- const screenActivity = useSharedValue<0 | 1 | 2>(1);
43
+ const sceneClosing = AnimationStore.getAnimation(routeKey, "closing");
44
+ const screenActivity = useSharedValue<ScreenActivity>(
45
+ ScreenActivity.TRANSITIONING_OR_BELOW_TOP,
46
+ );
43
47
 
44
48
  useDerivedValue(() => {
45
49
  if (!sceneProgress) {
46
- screenActivity.set(STATE_TRANSITIONING_OR_BELOW_TOP);
50
+ screenActivity.set(ScreenActivity.TRANSITIONING_OR_BELOW_TOP);
47
51
  return;
48
52
  }
49
53
 
50
54
  if (index < routesLength - activeScreensLimit - 1 || isPreloaded) {
51
- screenActivity.set(STATE_INACTIVE);
55
+ screenActivity.set(ScreenActivity.INACTIVE);
52
56
  } else {
53
57
  const outputValue =
54
58
  index === routesLength - 1
55
- ? STATE_ON_TOP
59
+ ? ScreenActivity.ON_TOP
56
60
  : index >= routesLength - activeScreensLimit
57
- ? STATE_TRANSITIONING_OR_BELOW_TOP
58
- : STATE_INACTIVE;
61
+ ? ScreenActivity.TRANSITIONING_OR_BELOW_TOP
62
+ : ScreenActivity.INACTIVE;
59
63
 
60
64
  const v = interpolate(
61
65
  sceneProgress.get(),
@@ -64,8 +68,7 @@ export const Screen = ({
64
68
  "clamp",
65
69
  );
66
70
 
67
- const next =
68
- (Math.trunc(v) as 0 | 1 | 2) ?? STATE_TRANSITIONING_OR_BELOW_TOP;
71
+ const next = Math.trunc(v) ?? ScreenActivity.TRANSITIONING_OR_BELOW_TOP;
69
72
 
70
73
  if (next !== screenActivity.get()) {
71
74
  screenActivity.set(next);
@@ -74,9 +77,13 @@ export const Screen = ({
74
77
  });
75
78
 
76
79
  const animatedProps = useAnimatedProps(() => {
80
+ const activity = screenActivity.get();
77
81
  return {
78
- activityState: screenActivity.get(),
79
- shouldFreeze: screenActivity.get() === STATE_INACTIVE && shouldFreeze,
82
+ activityState: activity,
83
+ shouldFreeze: activity === ScreenActivity.INACTIVE && shouldFreeze,
84
+ pointerEvents: sceneClosing.get()
85
+ ? ("none" as const)
86
+ : ("box-none" as const),
80
87
  };
81
88
  });
82
89
 
@@ -84,7 +91,6 @@ export const Screen = ({
84
91
  <AnimatedScreen
85
92
  enabled
86
93
  style={StyleSheet.absoluteFill}
87
- pointerEvents="box-none"
88
94
  freezeOnBlur={freezeOnBlur}
89
95
  animatedProps={animatedProps}
90
96
  >
@@ -7,8 +7,9 @@ import * as React from "react";
7
7
  import { StyleSheet } from "react-native";
8
8
  import { GestureHandlerRootView } from "react-native-gesture-handler";
9
9
  import { ScreenContainer } from "react-native-screens";
10
- import { BlankStackScreenLifecycleController } from "../../shared/components/controllers/screen-lifecycle";
10
+ import { BlankStackScreenLifecycleController } from "../../shared/components/controllers/blank-stack-lifecycle";
11
11
  import { FlagsProvider } from "../../shared/providers/flags.provider";
12
+ import { RoutesProvider } from "../../shared/providers/routes.provider";
12
13
  import { ScreenTransitionProvider } from "../../shared/providers/screen-transition.provider";
13
14
  import type { BlankStackDescriptor } from "../types";
14
15
  import { withStackNavigationProvider } from "../utils/with-stack-navigation";
@@ -23,7 +24,9 @@ type SceneViewProps = {
23
24
  descriptor: BlankStackDescriptor;
24
25
  };
25
26
 
26
- const SceneView = React.memo(({ descriptor }: SceneViewProps) => {
27
+ const SceneView = React.memo(function SceneView({
28
+ descriptor,
29
+ }: SceneViewProps) {
27
30
  const { route, navigation, render } = descriptor;
28
31
 
29
32
  return (
@@ -37,63 +40,64 @@ const SceneView = React.memo(({ descriptor }: SceneViewProps) => {
37
40
  });
38
41
 
39
42
  export const StackView = withStackNavigationProvider(
40
- ({
41
- activeScreensLimit,
42
- descriptors,
43
- focusedIndex,
44
- routes,
45
- scenes,
46
- shouldShowFloatOverlay,
47
- }) => {
43
+ ({ descriptors, focusedIndex, routes, scenes, shouldShowFloatOverlay }) => {
44
+ // Memoize route keys array for ScenesProvider
45
+ const routeKeys = React.useMemo(
46
+ () => routes.map((route) => route.key),
47
+ [routes],
48
+ );
49
+
48
50
  return (
49
51
  <FlagsProvider TRANSITIONS_ALWAYS_ON>
50
- <GestureHandlerRootView>
51
- <SafeAreaProviderCompat>
52
- {shouldShowFloatOverlay ? <Overlay.Float /> : null}
53
- <ScreenContainer style={styles.container}>
54
- {scenes.map((scene, sceneIndex) => {
55
- const descriptor = scene.descriptor;
56
- const route = scene.route;
57
- const isFocused = focusedIndex === sceneIndex;
58
- const isBelowFocused = focusedIndex - 1 === sceneIndex;
52
+ <RoutesProvider routeKeys={routeKeys}>
53
+ <GestureHandlerRootView>
54
+ <SafeAreaProviderCompat>
55
+ {shouldShowFloatOverlay ? <Overlay.Float /> : null}
56
+ <ScreenContainer style={styles.container}>
57
+ {scenes.map((scene, sceneIndex) => {
58
+ const descriptor = scene.descriptor;
59
+ const route = scene.route;
60
+ const isFocused = focusedIndex === sceneIndex;
61
+ const isBelowFocused = focusedIndex - 1 === sceneIndex;
59
62
 
60
- const previousDescriptor =
61
- scenes[sceneIndex - 1]?.descriptor ?? undefined;
62
- const nextDescriptor =
63
- scenes[sceneIndex + 1]?.descriptor ?? undefined;
63
+ const previousDescriptor =
64
+ scenes[sceneIndex - 1]?.descriptor ?? undefined;
65
+ const nextDescriptor =
66
+ scenes[sceneIndex + 1]?.descriptor ?? undefined;
64
67
 
65
- const isPreloaded = descriptors[route.key] === undefined;
68
+ const isPreloaded = descriptors[route.key] === undefined;
66
69
 
67
- // On Fabric, when screen is frozen, animated and reanimated values are not updated
68
- // due to component being unmounted. To avoid this, we don't freeze the previous screen there
69
- const shouldFreeze = isFabric()
70
- ? !isPreloaded && !isFocused && !isBelowFocused
71
- : !isPreloaded && !isFocused;
72
- return (
73
- <Screen
74
- key={route.key}
75
- isPreloaded={isPreloaded}
76
- index={sceneIndex}
77
- activeScreensLimit={activeScreensLimit}
78
- routeKey={route.key}
79
- routesLength={routes.length}
80
- shouldFreeze={shouldFreeze}
81
- freezeOnBlur={descriptor.options.freezeOnBlur}
82
- >
83
- <ScreenTransitionProvider
84
- previous={previousDescriptor}
85
- current={descriptor}
86
- next={nextDescriptor}
87
- LifecycleController={BlankStackScreenLifecycleController}
70
+ // On Fabric, when screen is frozen, animated and reanimated values are not updated
71
+ // due to component being unmounted. To avoid this, we don't freeze the previous screen there
72
+ const shouldFreeze = isFabric()
73
+ ? !isPreloaded && !isFocused && !isBelowFocused
74
+ : !isPreloaded && !isFocused;
75
+ return (
76
+ <Screen
77
+ key={route.key}
78
+ isPreloaded={isPreloaded}
79
+ index={sceneIndex}
80
+ routeKey={route.key}
81
+ shouldFreeze={shouldFreeze}
82
+ freezeOnBlur={descriptor.options.freezeOnBlur}
88
83
  >
89
- <SceneView key={route.key} descriptor={descriptor} />
90
- </ScreenTransitionProvider>
91
- </Screen>
92
- );
93
- })}
94
- </ScreenContainer>
95
- </SafeAreaProviderCompat>
96
- </GestureHandlerRootView>
84
+ <ScreenTransitionProvider
85
+ previous={previousDescriptor}
86
+ current={descriptor}
87
+ next={nextDescriptor}
88
+ LifecycleController={
89
+ BlankStackScreenLifecycleController
90
+ }
91
+ >
92
+ <SceneView key={route.key} descriptor={descriptor} />
93
+ </ScreenTransitionProvider>
94
+ </Screen>
95
+ );
96
+ })}
97
+ </ScreenContainer>
98
+ </SafeAreaProviderCompat>
99
+ </GestureHandlerRootView>
100
+ </RoutesProvider>
97
101
  </FlagsProvider>
98
102
  );
99
103
  },
@@ -18,29 +18,7 @@ import type {
18
18
  ScreenInterpolationProps,
19
19
  } from "../shared/types/animation.types";
20
20
 
21
- export type BlankStackNavigationEventMap = {
22
- /**
23
- * Event which fires when a transition animation starts.
24
- */
25
- transitionStart: { data: { closing: boolean } };
26
- /**
27
- * Event which fires when a transition animation ends.
28
- */
29
- transitionEnd: { data: { closing: boolean } };
30
- /**
31
- * Event which fires when a swipe back is canceled on iOS.
32
- */
33
- gestureCancel: { data: undefined };
34
- /**
35
- * Event which fires when screen is in sheet presentation & it's detent changes.
36
- *
37
- * In payload it caries two fields:
38
- *
39
- * * `index` - current detent index in the `sheetAllowedDetents` array,
40
- * * `stable` - on Android `false` value means that the user is dragging the sheet or it is settling; on iOS it is always `true`.
41
- */
42
- sheetDetentChange: { data: { index: number; stable: boolean } };
43
- };
21
+ export type BlankStackNavigationEventMap = {};
44
22
 
45
23
  export type BlankStackNavigationProp<
46
24
  ParamList extends ParamListBase,
@@ -132,7 +110,6 @@ export type BlankStackScreenTransitionConfig = ScreenTransitionConfig & {
132
110
  * Whether to detach the previous screen from the view hierarchy to save memory.
133
111
  * Set it to `false` if you need the previous screen to be seen through the active screen.
134
112
  * Only applicable if `detachInactiveScreens` isn't set to `false`.
135
- * Defaults to `false` for the last screen for modals, otherwise `true`.
136
113
  */
137
114
  detachPreviousScreen?: boolean;
138
115
  };
@@ -43,8 +43,8 @@ const { withStackNavigationProvider, useStackNavigationContext } =
43
43
  };
44
44
  }, [state.routes, state.descriptors]);
45
45
 
46
- return {
47
- value: {
46
+ const value = useMemo(
47
+ () => ({
48
48
  routes: state.routes,
49
49
  focusedIndex: props.state.index,
50
50
  descriptors: state.descriptors,
@@ -53,7 +53,21 @@ const { withStackNavigationProvider, useStackNavigationContext } =
53
53
  handleCloseRoute,
54
54
  scenes,
55
55
  shouldShowFloatOverlay,
56
- },
56
+ }),
57
+ [
58
+ state.routes,
59
+ state.descriptors,
60
+ props.state.index,
61
+ closingRouteKeys.shared,
62
+ activeScreensLimit,
63
+ handleCloseRoute,
64
+ scenes,
65
+ shouldShowFloatOverlay,
66
+ ],
67
+ );
68
+
69
+ return {
70
+ value,
57
71
  };
58
72
  });
59
73