react-native-screens 3.15.0 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +34 -1
  2. package/RNScreens.podspec +1 -4
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +50 -21
  5. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +22 -21
  6. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +7 -5
  7. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +1 -2
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +9 -0
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +3 -6
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +1 -1
  11. package/ios/RNSScreen.h +1 -0
  12. package/ios/RNSScreen.mm +24 -4
  13. package/ios/RNSScreenStack.mm +2 -2
  14. package/ios/RNSScreenStackHeaderConfig.mm +2 -2
  15. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
  16. package/lib/commonjs/index.js +4 -1
  17. package/lib/commonjs/index.js.map +1 -1
  18. package/lib/commonjs/index.native.js +36 -30
  19. package/lib/commonjs/index.native.js.map +1 -1
  20. package/lib/commonjs/native-stack/views/NativeStackView.js +3 -1
  21. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  22. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +1 -1
  23. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  24. package/lib/commonjs/reanimated/ReanimatedScreen.js +1 -1
  25. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  26. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  27. package/lib/module/index.js +1 -0
  28. package/lib/module/index.js.map +1 -1
  29. package/lib/module/index.native.js +37 -30
  30. package/lib/module/index.native.js.map +1 -1
  31. package/lib/module/native-stack/views/NativeStackView.js +3 -1
  32. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  33. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +2 -2
  34. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  35. package/lib/module/reanimated/ReanimatedScreen.js +2 -2
  36. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  37. package/lib/typescript/index.d.ts +1 -0
  38. package/lib/typescript/native-stack/types.d.ts +5 -0
  39. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
  40. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
  41. package/lib/typescript/types.d.ts +5 -0
  42. package/native-stack/README.md +6 -0
  43. package/package.json +1 -1
  44. package/src/fabric/ScreenNativeComponent.js +1 -1
  45. package/src/index.native.tsx +39 -26
  46. package/src/index.tsx +2 -0
  47. package/src/native-stack/types.tsx +5 -0
  48. package/src/native-stack/views/NativeStackView.tsx +2 -0
  49. package/src/reanimated/ReanimatedNativeStackScreen.tsx +2 -2
  50. package/src/reanimated/ReanimatedScreen.tsx +2 -2
  51. package/src/types.tsx +5 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","Freeze","version","TransitionProgressContext","useTransitionProgress","isSearchBarAvailableForCurrentPlatform","executeNativeBackPress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","DelayedFreeze","freeze","children","freezeState","setFreezeState","useState","setImmediate","MaybeFreeze","ScreenStack","props","rest","size","Children","count","childrenWithFreeze","map","child","index","Screen","Component","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","gestureResponseDistance","undefined","handleRef","viewConfig","validAttributes","style","display","setRef","start","end","top","bottom","event","nativeEvent","progress","closing","goingForward","useNativeDriver","ScreenContainer","hasTwoStates","styles","create","headerSubview","position","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction MaybeFreeze({ freeze, children }: FreezeWrapperProps) {\n if (ENABLE_FREEZE) {\n return <DelayedFreeze freeze={freeze}>{children}</DelayedFreeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => (\n <DelayedFreeze freeze={size - index > 1}>{child}</DelayedFreeze>\n ));\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n gestureResponseDistance,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const handleRef = (ref: ViewConfig) => {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n this.setRef(ref);\n }\n };\n\n return (\n <MaybeFreeze freeze={activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n activityState={activityState}\n gestureResponseDistance={{\n start: gestureResponseDistance?.start ?? -1,\n end: gestureResponseDistance?.end ?? -1,\n top: gestureResponseDistance?.top ?? -1,\n bottom: gestureResponseDistance?.bottom ?? -1,\n }}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={handleRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </MaybeFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
1
+ {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","Freeze","version","TransitionProgressContext","useTransitionProgress","isSearchBarAvailableForCurrentPlatform","executeNativeBackPress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","DelayedFreeze","freeze","children","freezeState","setFreezeState","useState","setImmediate","ScreenStack","props","rest","size","Children","count","childrenWithFreeze","map","child","index","key","descriptor","descriptors","freezeEnabled","options","freezeOnBlur","InnerScreen","Component","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","gestureResponseDistance","undefined","handleRef","viewConfig","validAttributes","style","display","setRef","start","end","top","bottom","event","nativeEvent","progress","closing","goingForward","useNativeDriver","ScreenContainer","hasTwoStates","styles","create","headerSubview","position","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","Screen","ScreenWrapper","context","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => {\n // @ts-expect-error it's either SceneView in v6 or RouteView in v5\n const { props, key } = child;\n const descriptor = props?.descriptor ?? props?.descriptors?.[key];\n const freezeEnabled = descriptor?.options?.freezeOnBlur ?? ENABLE_FREEZE;\n\n return (\n <DelayedFreeze freeze={freezeEnabled && size - index > 1}>\n {child}\n </DelayedFreeze>\n );\n });\n\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass InnerScreen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const {\n enabled = ENABLE_SCREENS,\n freezeOnBlur = ENABLE_FREEZE,\n ...rest\n } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n gestureResponseDistance,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const handleRef = (ref: ViewConfig) => {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n this.setRef(ref);\n }\n };\n\n return (\n <DelayedFreeze freeze={freezeOnBlur && activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n activityState={activityState}\n gestureResponseDistance={{\n start: gestureResponseDistance?.start ?? -1,\n end: gestureResponseDistance?.end ?? -1,\n top: gestureResponseDistance?.top ?? -1,\n bottom: gestureResponseDistance?.bottom ?? -1,\n }}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={handleRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </DelayedFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `useReanimatedTransitionProgress` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(InnerScreen);\n\nclass Screen extends React.Component<ScreenProps> {\n static contextType = ScreenContext;\n\n render() {\n const ScreenWrapper = this.context || InnerScreen;\n return <ScreenWrapper {...this.props} />;\n }\n}\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n InnerScreen,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
@@ -108,7 +108,8 @@ const RouteView = ({
108
108
  statusBarStyle,
109
109
  statusBarTranslucent,
110
110
  swipeDirection = 'horizontal',
111
- transitionDuration
111
+ transitionDuration,
112
+ freezeOnBlur
112
113
  } = options;
113
114
  let {
114
115
  customAnimationOnSwipe,
@@ -155,6 +156,7 @@ const RouteView = ({
155
156
  isNativeStack: true,
156
157
  style: StyleSheet.absoluteFill,
157
158
  customAnimationOnSwipe: customAnimationOnSwipe,
159
+ freezeOnBlur: freezeOnBlur,
158
160
  fullScreenSwipeEnabled: fullScreenSwipeEnabled,
159
161
  hideKeyboardOnSwipe: hideKeyboardOnSwipe,
160
162
  homeIndicatorHidden: homeIndicatorHidden,
@@ -1 +1 @@
1
- {"version":3,"sources":["NativeStackView.tsx"],"names":["React","Platform","StyleSheet","View","AppContainer","warnOnce","ScreenStack","ScreenContext","StackActions","useTheme","useSafeAreaFrame","useSafeAreaInsets","HeaderConfig","SafeAreaProviderCompat","getDefaultHeaderHeight","HeaderHeightContext","isAndroid","OS","Container","__DEV__","DebugContainer","props","stackPresentation","rest","MaybeNestedStack","options","route","children","colors","headerShown","contentStyle","Screen","useContext","isHeaderInModal","headerShownPreviousRef","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","topInset","top","dimensions","headerHeight","absoluteFill","RouteView","descriptors","index","navigation","stateKey","render","renderScene","key","gestureEnabled","hideKeyboardOnSwipe","homeIndicatorHidden","nativeBackButtonDismissalEnabled","navigationBarColor","navigationBarHidden","replaceAnimation","screenOrientation","statusBarAnimation","statusBarColor","statusBarHidden","statusBarStyle","statusBarTranslucent","swipeDirection","transitionDuration","customAnimationOnSwipe","fullScreenSwipeEnabled","gestureResponseDistance","stackAnimation","undefined","isHeaderInPush","parentHeaderHeight","dispatch","pop","source","target","emit","type","data","closing","e","dismissCount","nativeEvent","NativeStackViewInner","state","routes","map","NativeStackView","create","flex"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport warnOnce from 'warn-once';\nimport {\n ScreenStack,\n StackPresentationTypes,\n ScreenContext,\n} from 'react-native-screens';\nimport {\n ParamListBase,\n StackActions,\n StackNavigationState,\n useTheme,\n Route,\n NavigationState,\n PartialState,\n} from '@react-navigation/native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\nimport SafeAreaProviderCompat from '../utils/SafeAreaProviderCompat';\nimport getDefaultHeaderHeight from '../utils/getDefaultHeaderHeight';\nimport HeaderHeightContext from '../utils/HeaderHeightContext';\n\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n const DebugContainer = (\n props: ViewProps & { stackPresentation: StackPresentationTypes }\n ) => {\n const { stackPresentation, ...rest } = props;\n if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n return (\n <AppContainer>\n <View {...rest} />\n </AppContainer>\n );\n }\n return <View {...rest} />;\n };\n // @ts-ignore Wrong props\n Container = DebugContainer;\n}\n\nconst MaybeNestedStack = ({\n options,\n route,\n stackPresentation,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n stackPresentation: StackPresentationTypes;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { headerShown = true, contentStyle } = options;\n\n const Screen = React.useContext(ScreenContext);\n\n const isHeaderInModal = isAndroid\n ? false\n : stackPresentation !== 'push' && headerShown === true;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n stackPresentation !== 'push' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, stackPresentation, route.name]);\n\n const content = (\n <Container\n style={[\n styles.container,\n stackPresentation !== 'transparentModal' &&\n stackPresentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n // @ts-ignore Wrong props passed to View\n stackPresentation={stackPresentation}>\n {children}\n </Container>\n );\n\n const topInset = useSafeAreaInsets().top;\n const dimensions = useSafeAreaFrame();\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled isNativeStack style={StyleSheet.absoluteFill}>\n <HeaderHeightContext.Provider value={headerHeight}>\n <HeaderConfig {...options} route={route} />\n {content}\n </HeaderHeightContext.Provider>\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype NavigationRoute<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList\n> = Route<Extract<RouteName, string>, ParamList[RouteName]> & {\n state?: NavigationState | PartialState<NavigationState>;\n};\n\nconst RouteView = ({\n descriptors,\n route,\n index,\n navigation,\n stateKey,\n}: {\n descriptors: NativeStackDescriptorMap;\n route: NavigationRoute<ParamListBase, string>;\n index: number;\n navigation: NativeStackNavigationHelpers;\n stateKey: string;\n}) => {\n const { options, render: renderScene } = descriptors[route.key];\n const {\n gestureEnabled,\n headerShown,\n hideKeyboardOnSwipe,\n homeIndicatorHidden,\n nativeBackButtonDismissalEnabled = false,\n navigationBarColor,\n navigationBarHidden,\n replaceAnimation = 'pop',\n screenOrientation,\n statusBarAnimation,\n statusBarColor,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n swipeDirection = 'horizontal',\n transitionDuration,\n } = options;\n\n let {\n customAnimationOnSwipe,\n fullScreenSwipeEnabled,\n gestureResponseDistance,\n stackAnimation,\n stackPresentation = 'push',\n } = options;\n\n if (swipeDirection === 'vertical') {\n // for `vertical` direction to work, we need to set `fullScreenSwipeEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `customAnimationOnSwipe` needs to be set to `true` so the `stackAnimation` set by user can be used,\n // otherwise `simple_push` will be used.\n // Also, the default animation for this direction seems to be `slide_from_bottom`.\n if (fullScreenSwipeEnabled === undefined) {\n fullScreenSwipeEnabled = true;\n }\n if (customAnimationOnSwipe === undefined) {\n customAnimationOnSwipe = true;\n }\n if (stackAnimation === undefined) {\n stackAnimation = 'slide_from_bottom';\n }\n }\n\n if (index === 0) {\n // first screen should always be treated as `push`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `push`\n stackPresentation = 'push';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : stackPresentation === 'push' && headerShown !== false;\n\n const dimensions = useSafeAreaFrame();\n const topInset = useSafeAreaInsets().top;\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n const Screen = React.useContext(ScreenContext);\n\n return (\n <Screen\n key={route.key}\n enabled\n isNativeStack\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnSwipe}\n fullScreenSwipeEnabled={fullScreenSwipeEnabled}\n hideKeyboardOnSwipe={hideKeyboardOnSwipe}\n homeIndicatorHidden={homeIndicatorHidden}\n gestureEnabled={isAndroid ? false : gestureEnabled}\n gestureResponseDistance={gestureResponseDistance}\n nativeBackButtonDismissalEnabled={nativeBackButtonDismissalEnabled}\n navigationBarColor={navigationBarColor}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={replaceAnimation}\n screenOrientation={screenOrientation}\n stackAnimation={stackAnimation}\n stackPresentation={stackPresentation}\n statusBarAnimation={statusBarAnimation}\n statusBarColor={statusBarColor}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={swipeDirection}\n transitionDuration={transitionDuration}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: stateKey,\n });\n }}\n onWillAppear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: false },\n target: route.key,\n });\n }}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'appear',\n target: route.key,\n });\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(e) => {\n navigation.emit({\n type: 'dismiss',\n target: route.key,\n });\n\n const dismissCount =\n e.nativeEvent.dismissCount > 0 ? e.nativeEvent.dismissCount : 1;\n\n navigation.dispatch({\n ...StackActions.pop(dismissCount),\n source: route.key,\n target: stateKey,\n });\n }}>\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false ? headerHeight : parentHeaderHeight ?? 0\n }>\n <HeaderConfig {...options} route={route} headerShown={isHeaderInPush} />\n <MaybeNestedStack\n options={options}\n route={route}\n stackPresentation={stackPresentation}>\n {renderScene()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({\n state,\n navigation,\n descriptors,\n}: Props): JSX.Element {\n const { key, routes } = state;\n\n return (\n <ScreenStack style={styles.container}>\n {routes.map((route, index) => (\n <RouteView\n key={route.key}\n descriptors={descriptors}\n route={route}\n index={index}\n navigation={navigation}\n stateKey={key}\n />\n ))}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
1
+ {"version":3,"sources":["NativeStackView.tsx"],"names":["React","Platform","StyleSheet","View","AppContainer","warnOnce","ScreenStack","ScreenContext","StackActions","useTheme","useSafeAreaFrame","useSafeAreaInsets","HeaderConfig","SafeAreaProviderCompat","getDefaultHeaderHeight","HeaderHeightContext","isAndroid","OS","Container","__DEV__","DebugContainer","props","stackPresentation","rest","MaybeNestedStack","options","route","children","colors","headerShown","contentStyle","Screen","useContext","isHeaderInModal","headerShownPreviousRef","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","topInset","top","dimensions","headerHeight","absoluteFill","RouteView","descriptors","index","navigation","stateKey","render","renderScene","key","gestureEnabled","hideKeyboardOnSwipe","homeIndicatorHidden","nativeBackButtonDismissalEnabled","navigationBarColor","navigationBarHidden","replaceAnimation","screenOrientation","statusBarAnimation","statusBarColor","statusBarHidden","statusBarStyle","statusBarTranslucent","swipeDirection","transitionDuration","freezeOnBlur","customAnimationOnSwipe","fullScreenSwipeEnabled","gestureResponseDistance","stackAnimation","undefined","isHeaderInPush","parentHeaderHeight","dispatch","pop","source","target","emit","type","data","closing","e","dismissCount","nativeEvent","NativeStackViewInner","state","routes","map","NativeStackView","create","flex"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport warnOnce from 'warn-once';\nimport {\n ScreenStack,\n StackPresentationTypes,\n ScreenContext,\n} from 'react-native-screens';\nimport {\n ParamListBase,\n StackActions,\n StackNavigationState,\n useTheme,\n Route,\n NavigationState,\n PartialState,\n} from '@react-navigation/native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\nimport SafeAreaProviderCompat from '../utils/SafeAreaProviderCompat';\nimport getDefaultHeaderHeight from '../utils/getDefaultHeaderHeight';\nimport HeaderHeightContext from '../utils/HeaderHeightContext';\n\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n const DebugContainer = (\n props: ViewProps & { stackPresentation: StackPresentationTypes }\n ) => {\n const { stackPresentation, ...rest } = props;\n if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n return (\n <AppContainer>\n <View {...rest} />\n </AppContainer>\n );\n }\n return <View {...rest} />;\n };\n // @ts-ignore Wrong props\n Container = DebugContainer;\n}\n\nconst MaybeNestedStack = ({\n options,\n route,\n stackPresentation,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n stackPresentation: StackPresentationTypes;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { headerShown = true, contentStyle } = options;\n\n const Screen = React.useContext(ScreenContext);\n\n const isHeaderInModal = isAndroid\n ? false\n : stackPresentation !== 'push' && headerShown === true;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n stackPresentation !== 'push' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, stackPresentation, route.name]);\n\n const content = (\n <Container\n style={[\n styles.container,\n stackPresentation !== 'transparentModal' &&\n stackPresentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n // @ts-ignore Wrong props passed to View\n stackPresentation={stackPresentation}>\n {children}\n </Container>\n );\n\n const topInset = useSafeAreaInsets().top;\n const dimensions = useSafeAreaFrame();\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled isNativeStack style={StyleSheet.absoluteFill}>\n <HeaderHeightContext.Provider value={headerHeight}>\n <HeaderConfig {...options} route={route} />\n {content}\n </HeaderHeightContext.Provider>\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype NavigationRoute<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList\n> = Route<Extract<RouteName, string>, ParamList[RouteName]> & {\n state?: NavigationState | PartialState<NavigationState>;\n};\n\nconst RouteView = ({\n descriptors,\n route,\n index,\n navigation,\n stateKey,\n}: {\n descriptors: NativeStackDescriptorMap;\n route: NavigationRoute<ParamListBase, string>;\n index: number;\n navigation: NativeStackNavigationHelpers;\n stateKey: string;\n}) => {\n const { options, render: renderScene } = descriptors[route.key];\n const {\n gestureEnabled,\n headerShown,\n hideKeyboardOnSwipe,\n homeIndicatorHidden,\n nativeBackButtonDismissalEnabled = false,\n navigationBarColor,\n navigationBarHidden,\n replaceAnimation = 'pop',\n screenOrientation,\n statusBarAnimation,\n statusBarColor,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n swipeDirection = 'horizontal',\n transitionDuration,\n freezeOnBlur,\n } = options;\n\n let {\n customAnimationOnSwipe,\n fullScreenSwipeEnabled,\n gestureResponseDistance,\n stackAnimation,\n stackPresentation = 'push',\n } = options;\n\n if (swipeDirection === 'vertical') {\n // for `vertical` direction to work, we need to set `fullScreenSwipeEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `customAnimationOnSwipe` needs to be set to `true` so the `stackAnimation` set by user can be used,\n // otherwise `simple_push` will be used.\n // Also, the default animation for this direction seems to be `slide_from_bottom`.\n if (fullScreenSwipeEnabled === undefined) {\n fullScreenSwipeEnabled = true;\n }\n if (customAnimationOnSwipe === undefined) {\n customAnimationOnSwipe = true;\n }\n if (stackAnimation === undefined) {\n stackAnimation = 'slide_from_bottom';\n }\n }\n\n if (index === 0) {\n // first screen should always be treated as `push`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `push`\n stackPresentation = 'push';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : stackPresentation === 'push' && headerShown !== false;\n\n const dimensions = useSafeAreaFrame();\n const topInset = useSafeAreaInsets().top;\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n const Screen = React.useContext(ScreenContext);\n\n return (\n <Screen\n key={route.key}\n enabled\n isNativeStack\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnSwipe}\n freezeOnBlur={freezeOnBlur}\n fullScreenSwipeEnabled={fullScreenSwipeEnabled}\n hideKeyboardOnSwipe={hideKeyboardOnSwipe}\n homeIndicatorHidden={homeIndicatorHidden}\n gestureEnabled={isAndroid ? false : gestureEnabled}\n gestureResponseDistance={gestureResponseDistance}\n nativeBackButtonDismissalEnabled={nativeBackButtonDismissalEnabled}\n navigationBarColor={navigationBarColor}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={replaceAnimation}\n screenOrientation={screenOrientation}\n stackAnimation={stackAnimation}\n stackPresentation={stackPresentation}\n statusBarAnimation={statusBarAnimation}\n statusBarColor={statusBarColor}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={swipeDirection}\n transitionDuration={transitionDuration}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: stateKey,\n });\n }}\n onWillAppear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: false },\n target: route.key,\n });\n }}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'appear',\n target: route.key,\n });\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(e) => {\n navigation.emit({\n type: 'dismiss',\n target: route.key,\n });\n\n const dismissCount =\n e.nativeEvent.dismissCount > 0 ? e.nativeEvent.dismissCount : 1;\n\n navigation.dispatch({\n ...StackActions.pop(dismissCount),\n source: route.key,\n target: stateKey,\n });\n }}>\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false ? headerHeight : parentHeaderHeight ?? 0\n }>\n <HeaderConfig {...options} route={route} headerShown={isHeaderInPush} />\n <MaybeNestedStack\n options={options}\n route={route}\n stackPresentation={stackPresentation}>\n {renderScene()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({\n state,\n navigation,\n descriptors,\n}: Props): JSX.Element {\n const { key, routes } = state;\n\n return (\n <ScreenStack style={styles.container}>\n {routes.map((route, index) => (\n <RouteView\n key={route.key}\n descriptors={descriptors}\n route={route}\n index={index}\n navigation={navigation}\n stateKey={key}\n />\n ))}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
@@ -4,11 +4,11 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
4
4
 
5
5
  import React from 'react';
6
6
  import { Platform } from 'react-native';
7
- import { Screen } from 'react-native-screens'; // @ts-ignore file to be used only if `react-native-reanimated` available in the project
7
+ import { InnerScreen } from 'react-native-screens'; // @ts-ignore file to be used only if `react-native-reanimated` available in the project
8
8
 
9
9
  import Animated, { useEvent, useSharedValue } from 'react-native-reanimated';
10
10
  import ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';
11
- const AnimatedScreen = Animated.createAnimatedComponent(Screen); // We use prop added to global by reanimated since it seems safer than the one from RN. See:
11
+ const AnimatedScreen = Animated.createAnimatedComponent(InnerScreen); // We use prop added to global by reanimated since it seems safer than the one from RN. See:
12
12
  // https://github.com/software-mansion/react-native-reanimated/blob/3fe8b35b05e82b2f2aefda1fb97799cf81e4b7bb/src/reanimated2/UpdateProps.ts#L46
13
13
  // @ts-expect-error nativeFabricUIManager is not yet included in the RN types
14
14
 
@@ -1 +1 @@
1
- {"version":3,"sources":["ReanimatedNativeStackScreen.tsx"],"names":["React","Platform","Screen","Animated","useEvent","useSharedValue","ReanimatedTransitionProgressContext","AnimatedScreen","createAnimatedComponent","ENABLE_FABRIC","global","_IS_FABRIC","ReanimatedNativeStackScreen","forwardRef","props","ref","children","rest","progress","closing","goingForward","event","value","OS","displayName"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,QAAyB,cAAzB;AACA,SACEC,MADF,QAIO,sBAJP,C,CAMA;;AACA,OAAOC,QAAP,IAAmBC,QAAnB,EAA6BC,cAA7B,QAAmD,yBAAnD;AACA,OAAOC,mCAAP,MAAgD,uCAAhD;AAEA,MAAMC,cAAc,GAAGJ,QAAQ,CAACK,uBAAT,CACpBN,MADoB,CAAvB,C,CAIA;AACA;AACA;;AACA,MAAMO,aAAa,GAAG,CAAC,aAACC,MAAD,oCAAC,QAAQC,UAAT,CAAvB;AAEA,MAAMC,2BAA2B,gBAAGZ,KAAK,CAACa,UAAN,CAGlC,CAACC,KAAD,EAAQC,GAAR,KAAgB;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAY,OAAGC;AAAf,MAAwBH,KAA9B;AAEA,QAAMI,QAAQ,GAAGb,cAAc,CAAC,CAAD,CAA/B;AACA,QAAMc,OAAO,GAAGd,cAAc,CAAC,CAAD,CAA9B;AACA,QAAMe,YAAY,GAAGf,cAAc,CAAC,CAAD,CAAnC;AAEA,sBACE,oBAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEU,GAFP;AAGE,IAAA,8BAA8B,EAAEX,QAAQ,CACrCiB,KAAD,IAAwC;AACtC;;AACAH,MAAAA,QAAQ,CAACI,KAAT,GAAiBD,KAAK,CAACH,QAAvB;AACAC,MAAAA,OAAO,CAACG,KAAR,GAAgBD,KAAK,CAACF,OAAtB;AACAC,MAAAA,YAAY,CAACE,KAAb,GAAqBD,KAAK,CAACD,YAA3B;AACD,KANqC,EAOtC,CACE;AACA;AACAnB,IAAAA,QAAQ,CAACsB,EAAT,KAAgB,SAAhB,GACI,sBADJ,GAEI;AACFd,IAAAA,aAAa,GACX,sBADW,GAEX,uBARN,CAPsC;AAH1C,KAqBMQ,IArBN,gBAsBE,oBAAC,mCAAD,CAAqC,QAArC;AACE,IAAA,KAAK,EAAE;AACLC,MAAAA,QAAQ,EAAEA,QADL;AAELC,MAAAA,OAAO,EAAEA,OAFJ;AAGLC,MAAAA,YAAY,EAAEA;AAHT;AADT,KAMGJ,QANH,CAtBF,CADF;AAiCD,CA3CmC,CAApC;AA6CAJ,2BAA2B,CAACY,WAA5B,GAA0C,6BAA1C;AAEA,eAAeZ,2BAAf","sourcesContent":["import React from 'react';\nimport { Platform } from 'react-native';\nimport {\n Screen,\n ScreenProps,\n TransitionProgressEventType,\n} from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated, { useEvent, useSharedValue } from 'react-native-reanimated';\nimport ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\n// We use prop added to global by reanimated since it seems safer than the one from RN. See:\n// https://github.com/software-mansion/react-native-reanimated/blob/3fe8b35b05e82b2f2aefda1fb97799cf81e4b7bb/src/reanimated2/UpdateProps.ts#L46\n// @ts-expect-error nativeFabricUIManager is not yet included in the RN types\nconst ENABLE_FABRIC = !!global?._IS_FABRIC;\n\nconst ReanimatedNativeStackScreen = React.forwardRef<\n typeof AnimatedScreen,\n ScreenProps\n>((props, ref) => {\n const { children, ...rest } = props;\n\n const progress = useSharedValue(0);\n const closing = useSharedValue(0);\n const goingForward = useSharedValue(0);\n\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n onTransitionProgressReanimated={useEvent(\n (event: TransitionProgressEventType) => {\n 'worklet';\n progress.value = event.progress;\n closing.value = event.closing;\n goingForward.value = event.goingForward;\n },\n [\n // This should not be necessary, but is not properly managed by `react-native-reanimated`\n // @ts-ignore wrong type\n Platform.OS === 'android'\n ? 'onTransitionProgress'\n : // for some reason there is a difference in required event name between architectures\n ENABLE_FABRIC\n ? 'onTransitionProgress'\n : 'topTransitionProgress',\n ]\n )}\n {...rest}>\n <ReanimatedTransitionProgressContext.Provider\n value={{\n progress: progress,\n closing: closing,\n goingForward: goingForward,\n }}>\n {children}\n </ReanimatedTransitionProgressContext.Provider>\n </AnimatedScreen>\n );\n});\n\nReanimatedNativeStackScreen.displayName = 'ReanimatedNativeStackScreen';\n\nexport default ReanimatedNativeStackScreen;\n"]}
1
+ {"version":3,"sources":["ReanimatedNativeStackScreen.tsx"],"names":["React","Platform","InnerScreen","Animated","useEvent","useSharedValue","ReanimatedTransitionProgressContext","AnimatedScreen","createAnimatedComponent","ENABLE_FABRIC","global","_IS_FABRIC","ReanimatedNativeStackScreen","forwardRef","props","ref","children","rest","progress","closing","goingForward","event","value","OS","displayName"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,QAAyB,cAAzB;AACA,SACEC,WADF,QAIO,sBAJP,C,CAMA;;AACA,OAAOC,QAAP,IAAmBC,QAAnB,EAA6BC,cAA7B,QAAmD,yBAAnD;AACA,OAAOC,mCAAP,MAAgD,uCAAhD;AAEA,MAAMC,cAAc,GAAGJ,QAAQ,CAACK,uBAAT,CACpBN,WADoB,CAAvB,C,CAIA;AACA;AACA;;AACA,MAAMO,aAAa,GAAG,CAAC,aAACC,MAAD,oCAAC,QAAQC,UAAT,CAAvB;AAEA,MAAMC,2BAA2B,gBAAGZ,KAAK,CAACa,UAAN,CAGlC,CAACC,KAAD,EAAQC,GAAR,KAAgB;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAY,OAAGC;AAAf,MAAwBH,KAA9B;AAEA,QAAMI,QAAQ,GAAGb,cAAc,CAAC,CAAD,CAA/B;AACA,QAAMc,OAAO,GAAGd,cAAc,CAAC,CAAD,CAA9B;AACA,QAAMe,YAAY,GAAGf,cAAc,CAAC,CAAD,CAAnC;AAEA,sBACE,oBAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEU,GAFP;AAGE,IAAA,8BAA8B,EAAEX,QAAQ,CACrCiB,KAAD,IAAwC;AACtC;;AACAH,MAAAA,QAAQ,CAACI,KAAT,GAAiBD,KAAK,CAACH,QAAvB;AACAC,MAAAA,OAAO,CAACG,KAAR,GAAgBD,KAAK,CAACF,OAAtB;AACAC,MAAAA,YAAY,CAACE,KAAb,GAAqBD,KAAK,CAACD,YAA3B;AACD,KANqC,EAOtC,CACE;AACA;AACAnB,IAAAA,QAAQ,CAACsB,EAAT,KAAgB,SAAhB,GACI,sBADJ,GAEI;AACFd,IAAAA,aAAa,GACX,sBADW,GAEX,uBARN,CAPsC;AAH1C,KAqBMQ,IArBN,gBAsBE,oBAAC,mCAAD,CAAqC,QAArC;AACE,IAAA,KAAK,EAAE;AACLC,MAAAA,QAAQ,EAAEA,QADL;AAELC,MAAAA,OAAO,EAAEA,OAFJ;AAGLC,MAAAA,YAAY,EAAEA;AAHT;AADT,KAMGJ,QANH,CAtBF,CADF;AAiCD,CA3CmC,CAApC;AA6CAJ,2BAA2B,CAACY,WAA5B,GAA0C,6BAA1C;AAEA,eAAeZ,2BAAf","sourcesContent":["import React from 'react';\nimport { Platform } from 'react-native';\nimport {\n InnerScreen,\n ScreenProps,\n TransitionProgressEventType,\n} from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated, { useEvent, useSharedValue } from 'react-native-reanimated';\nimport ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (InnerScreen as unknown) as React.ComponentClass\n);\n\n// We use prop added to global by reanimated since it seems safer than the one from RN. See:\n// https://github.com/software-mansion/react-native-reanimated/blob/3fe8b35b05e82b2f2aefda1fb97799cf81e4b7bb/src/reanimated2/UpdateProps.ts#L46\n// @ts-expect-error nativeFabricUIManager is not yet included in the RN types\nconst ENABLE_FABRIC = !!global?._IS_FABRIC;\n\nconst ReanimatedNativeStackScreen = React.forwardRef<\n typeof AnimatedScreen,\n ScreenProps\n>((props, ref) => {\n const { children, ...rest } = props;\n\n const progress = useSharedValue(0);\n const closing = useSharedValue(0);\n const goingForward = useSharedValue(0);\n\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n onTransitionProgressReanimated={useEvent(\n (event: TransitionProgressEventType) => {\n 'worklet';\n progress.value = event.progress;\n closing.value = event.closing;\n goingForward.value = event.goingForward;\n },\n [\n // This should not be necessary, but is not properly managed by `react-native-reanimated`\n // @ts-ignore wrong type\n Platform.OS === 'android'\n ? 'onTransitionProgress'\n : // for some reason there is a difference in required event name between architectures\n ENABLE_FABRIC\n ? 'onTransitionProgress'\n : 'topTransitionProgress',\n ]\n )}\n {...rest}>\n <ReanimatedTransitionProgressContext.Provider\n value={{\n progress: progress,\n closing: closing,\n goingForward: goingForward,\n }}>\n {children}\n </ReanimatedTransitionProgressContext.Provider>\n </AnimatedScreen>\n );\n});\n\nReanimatedNativeStackScreen.displayName = 'ReanimatedNativeStackScreen';\n\nexport default ReanimatedNativeStackScreen;\n"]}
@@ -1,10 +1,10 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
3
  import React from 'react';
4
- import { Screen } from 'react-native-screens'; // @ts-ignore file to be used only if `react-native-reanimated` available in the project
4
+ import { InnerScreen } from 'react-native-screens'; // @ts-ignore file to be used only if `react-native-reanimated` available in the project
5
5
 
6
6
  import Animated from 'react-native-reanimated';
7
- const AnimatedScreen = Animated.createAnimatedComponent(Screen);
7
+ const AnimatedScreen = Animated.createAnimatedComponent(InnerScreen);
8
8
  const ReanimatedScreen = /*#__PURE__*/React.forwardRef((props, ref) => {
9
9
  return /*#__PURE__*/React.createElement(AnimatedScreen // @ts-ignore some problems with ref and onTransitionProgressReanimated being "fake" prop for parsing of `useEvent` return value
10
10
  , _extends({
@@ -1 +1 @@
1
- {"version":3,"sources":["ReanimatedScreen.tsx"],"names":["React","Screen","Animated","AnimatedScreen","createAnimatedComponent","ReanimatedScreen","forwardRef","props","ref","displayName"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,MAAT,QAAoC,sBAApC,C,CAEA;;AACA,OAAOC,QAAP,MAAqB,yBAArB;AAEA,MAAMC,cAAc,GAAGD,QAAQ,CAACE,uBAAT,CACpBH,MADoB,CAAvB;AAIA,MAAMI,gBAAgB,gBAAGL,KAAK,CAACM,UAAN,CACvB,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACd,sBACE,oBAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEA;AAFP,KAGMD,KAHN,EADF;AAOD,CATsB,CAAzB;AAYAF,gBAAgB,CAACI,WAAjB,GAA+B,kBAA/B;AAEA,eAAeJ,gBAAf","sourcesContent":["import React from 'react';\nimport { Screen, ScreenProps } from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated from 'react-native-reanimated';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\nconst ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, ScreenProps>(\n (props, ref) => {\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nReanimatedScreen.displayName = 'ReanimatedScreen';\n\nexport default ReanimatedScreen;\n"]}
1
+ {"version":3,"sources":["ReanimatedScreen.tsx"],"names":["React","InnerScreen","Animated","AnimatedScreen","createAnimatedComponent","ReanimatedScreen","forwardRef","props","ref","displayName"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,WAAT,QAAyC,sBAAzC,C,CAEA;;AACA,OAAOC,QAAP,MAAqB,yBAArB;AAEA,MAAMC,cAAc,GAAGD,QAAQ,CAACE,uBAAT,CACpBH,WADoB,CAAvB;AAIA,MAAMI,gBAAgB,gBAAGL,KAAK,CAACM,UAAN,CACvB,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACd,sBACE,oBAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEA;AAFP,KAGMD,KAHN,EADF;AAOD,CATsB,CAAzB;AAYAF,gBAAgB,CAACI,WAAjB,GAA+B,kBAA/B;AAEA,eAAeJ,gBAAf","sourcesContent":["import React from 'react';\nimport { InnerScreen, ScreenProps } from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated from 'react-native-reanimated';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (InnerScreen as unknown) as React.ComponentClass\n);\n\nconst ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, ScreenProps>(\n (props, ref) => {\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nReanimatedScreen.displayName = 'ReanimatedScreen';\n\nexport default ReanimatedScreen;\n"]}
@@ -11,6 +11,7 @@ export declare class NativeScreen extends React.Component<ScreenProps> {
11
11
  render(): JSX.Element;
12
12
  }
13
13
  export declare const Screen: Animated.AnimatedComponent<typeof NativeScreen>;
14
+ export declare const InnerScreen: typeof View;
14
15
  export declare const ScreenContext: React.Context<Animated.AnimatedComponent<typeof NativeScreen>>;
15
16
  export declare const ScreenContainer: React.ComponentType<ScreenContainerProps>;
16
17
  export declare const NativeScreenContainer: React.ComponentType<ScreenContainerProps>;
@@ -355,6 +355,11 @@ export declare type NativeStackNavigationOptions = {
355
355
  * @platform ios
356
356
  */
357
357
  transitionDuration?: number;
358
+ /**
359
+ * Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
360
+ * Defaults to `true` when `enableFreeze()` is run at the top of the application.
361
+ */
362
+ freezeOnBlur?: boolean;
358
363
  };
359
364
  export declare type NativeStackNavigatorProps = DefaultNavigatorOptions<NativeStackNavigationOptions> & StackRouterOptions & NativeStackNavigationConfig;
360
365
  export declare type NativeStackDescriptor = Descriptor<ParamListBase, string, StackNavigationState<ParamListBase>, NativeStackNavigationOptions>;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ScreenProps } from 'react-native-screens';
3
3
  import Animated from 'react-native-reanimated';
4
- declare const ReanimatedNativeStackScreen: React.ForwardRefExoticComponent<Pick<ScreenProps, "children" | "active" | "activityState" | "customAnimationOnSwipe" | "enabled" | "isNativeStack" | "fullScreenSwipeEnabled" | "gestureEnabled" | "gestureResponseDistance" | "homeIndicatorHidden" | "hideKeyboardOnSwipe" | "nativeBackButtonDismissalEnabled" | "navigationBarColor" | "navigationBarHidden" | "onAppear" | "onComponentRef" | "onDisappear" | "onDismissed" | "onHeaderBackButtonClicked" | "onTransitionProgress" | "onWillAppear" | "onWillDisappear" | "replaceAnimation" | "screenOrientation" | "stackAnimation" | "stackPresentation" | "statusBarAnimation" | "statusBarColor" | "statusBarHidden" | "statusBarStyle" | "statusBarTranslucent" | "swipeDirection" | "transitionDuration" | "hitSlop" | "onLayout" | "pointerEvents" | "removeClippedSubviews" | "style" | "testID" | "nativeID" | "collapsable" | "needsOffscreenAlphaCompositing" | "renderToHardwareTextureAndroid" | "focusable" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxProperties" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "accessibilityRole" | "accessibilityState" | "accessibilityHint" | "accessibilityValue" | "onAccessibilityAction" | "accessibilityComponentType" | "accessibilityLiveRegion" | "importantForAccessibility" | "accessibilityElementsHidden" | "accessibilityTraits" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors"> & React.RefAttributes<React.ComponentClass<Animated.AnimateProps<{}>, any>>>;
4
+ declare const ReanimatedNativeStackScreen: React.ForwardRefExoticComponent<Pick<ScreenProps, "children" | "active" | "activityState" | "customAnimationOnSwipe" | "enabled" | "isNativeStack" | "fullScreenSwipeEnabled" | "gestureEnabled" | "gestureResponseDistance" | "homeIndicatorHidden" | "hideKeyboardOnSwipe" | "nativeBackButtonDismissalEnabled" | "navigationBarColor" | "navigationBarHidden" | "onAppear" | "onComponentRef" | "onDisappear" | "onDismissed" | "onHeaderBackButtonClicked" | "onTransitionProgress" | "onWillAppear" | "onWillDisappear" | "replaceAnimation" | "screenOrientation" | "stackAnimation" | "stackPresentation" | "statusBarAnimation" | "statusBarColor" | "statusBarHidden" | "statusBarStyle" | "statusBarTranslucent" | "swipeDirection" | "transitionDuration" | "freezeOnBlur" | "hitSlop" | "onLayout" | "pointerEvents" | "removeClippedSubviews" | "style" | "testID" | "nativeID" | "collapsable" | "needsOffscreenAlphaCompositing" | "renderToHardwareTextureAndroid" | "focusable" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxProperties" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "accessibilityRole" | "accessibilityState" | "accessibilityHint" | "accessibilityValue" | "onAccessibilityAction" | "accessibilityComponentType" | "accessibilityLiveRegion" | "importantForAccessibility" | "accessibilityElementsHidden" | "accessibilityTraits" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors"> & React.RefAttributes<React.ComponentClass<Animated.AnimateProps<{}>, any>>>;
5
5
  export default ReanimatedNativeStackScreen;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import { ScreenProps } from 'react-native-screens';
3
3
  import Animated from 'react-native-reanimated';
4
- declare const ReanimatedScreen: React.ForwardRefExoticComponent<Pick<ScreenProps, "children" | "active" | "activityState" | "customAnimationOnSwipe" | "enabled" | "isNativeStack" | "fullScreenSwipeEnabled" | "gestureEnabled" | "gestureResponseDistance" | "homeIndicatorHidden" | "hideKeyboardOnSwipe" | "nativeBackButtonDismissalEnabled" | "navigationBarColor" | "navigationBarHidden" | "onAppear" | "onComponentRef" | "onDisappear" | "onDismissed" | "onHeaderBackButtonClicked" | "onTransitionProgress" | "onWillAppear" | "onWillDisappear" | "replaceAnimation" | "screenOrientation" | "stackAnimation" | "stackPresentation" | "statusBarAnimation" | "statusBarColor" | "statusBarHidden" | "statusBarStyle" | "statusBarTranslucent" | "swipeDirection" | "transitionDuration" | "hitSlop" | "onLayout" | "pointerEvents" | "removeClippedSubviews" | "style" | "testID" | "nativeID" | "collapsable" | "needsOffscreenAlphaCompositing" | "renderToHardwareTextureAndroid" | "focusable" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxProperties" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "accessibilityRole" | "accessibilityState" | "accessibilityHint" | "accessibilityValue" | "onAccessibilityAction" | "accessibilityComponentType" | "accessibilityLiveRegion" | "importantForAccessibility" | "accessibilityElementsHidden" | "accessibilityTraits" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors"> & React.RefAttributes<React.ComponentClass<Animated.AnimateProps<{}>, any>>>;
4
+ declare const ReanimatedScreen: React.ForwardRefExoticComponent<Pick<ScreenProps, "children" | "active" | "activityState" | "customAnimationOnSwipe" | "enabled" | "isNativeStack" | "fullScreenSwipeEnabled" | "gestureEnabled" | "gestureResponseDistance" | "homeIndicatorHidden" | "hideKeyboardOnSwipe" | "nativeBackButtonDismissalEnabled" | "navigationBarColor" | "navigationBarHidden" | "onAppear" | "onComponentRef" | "onDisappear" | "onDismissed" | "onHeaderBackButtonClicked" | "onTransitionProgress" | "onWillAppear" | "onWillDisappear" | "replaceAnimation" | "screenOrientation" | "stackAnimation" | "stackPresentation" | "statusBarAnimation" | "statusBarColor" | "statusBarHidden" | "statusBarStyle" | "statusBarTranslucent" | "swipeDirection" | "transitionDuration" | "freezeOnBlur" | "hitSlop" | "onLayout" | "pointerEvents" | "removeClippedSubviews" | "style" | "testID" | "nativeID" | "collapsable" | "needsOffscreenAlphaCompositing" | "renderToHardwareTextureAndroid" | "focusable" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxProperties" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "accessibilityRole" | "accessibilityState" | "accessibilityHint" | "accessibilityValue" | "onAccessibilityAction" | "accessibilityComponentType" | "accessibilityLiveRegion" | "importantForAccessibility" | "accessibilityElementsHidden" | "accessibilityTraits" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors"> & React.RefAttributes<React.ComponentClass<Animated.AnimateProps<{}>, any>>>;
5
5
  export default ReanimatedScreen;
@@ -209,6 +209,11 @@ export interface ScreenProps extends ViewProps {
209
209
  * @platform ios
210
210
  */
211
211
  transitionDuration?: number;
212
+ /**
213
+ * Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
214
+ * When `enableFreeze()` is run at the top of the application defaults to `true`.
215
+ */
216
+ freezeOnBlur?: boolean;
212
217
  }
213
218
  export interface ScreenContainerProps extends ViewProps {
214
219
  children?: React.ReactNode;
@@ -277,6 +277,12 @@ Changes the duration (in milliseconds) of `slide_from_bottom`, `fade_from_bottom
277
277
 
278
278
  The duration of `default` and `flip` transitions isn't customizable.
279
279
 
280
+ ### freezeOnBlur
281
+
282
+ Whether inactive screens should be suspended from re-rendering.
283
+
284
+ Defaults to `false`. When `enableFreeze()` is run at the top of the application defaults to `true`.
285
+
280
286
  #### `useTransitionProgress`
281
287
 
282
288
  Hook providing context value of transition progress of the current screen to be used with `react-native` `Animated`. It consists of 2 values:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-screens",
3
- "version": "3.15.0",
3
+ "version": "3.16.0",
4
4
  "description": "Native navigation primitives for your React Native app.",
5
5
  "scripts": {
6
6
  "check-types": "tsc --noEmit",
@@ -84,10 +84,10 @@ export type NativeProps = $ReadOnly<{|
84
84
  swipeDirection?: WithDefault<SwipeDirection, 'horizontal'>,
85
85
  hideKeyboardOnSwipe?: boolean,
86
86
  activityState?: WithDefault<Float, -1.0>,
87
- // TODO: implement these props on iOS
88
87
  navigationBarColor?: ColorValue,
89
88
  navigationBarHidden?: boolean,
90
89
  nativeBackButtonDismissalEnabled?: boolean,
90
+ onHeaderBackButtonClicked?: ?BubblingEventHandler<ScreenEvent>,
91
91
  |}>;
92
92
 
93
93
  type ComponentType = HostComponent<NativeProps>;
@@ -163,29 +163,28 @@ function DelayedFreeze({ freeze, children }: FreezeWrapperProps) {
163
163
  return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;
164
164
  }
165
165
 
166
- function MaybeFreeze({ freeze, children }: FreezeWrapperProps) {
167
- if (ENABLE_FREEZE) {
168
- return <DelayedFreeze freeze={freeze}>{children}</DelayedFreeze>;
169
- } else {
170
- return <>{children}</>;
171
- }
172
- }
173
-
174
166
  function ScreenStack(props: ScreenStackProps) {
175
- if (ENABLE_FREEZE) {
176
- const { children, ...rest } = props;
177
- const size = React.Children.count(children);
178
- // freezes all screens except the top one
179
- const childrenWithFreeze = React.Children.map(children, (child, index) => (
180
- <DelayedFreeze freeze={size - index > 1}>{child}</DelayedFreeze>
181
- ));
167
+ const { children, ...rest } = props;
168
+ const size = React.Children.count(children);
169
+ // freezes all screens except the top one
170
+ const childrenWithFreeze = React.Children.map(children, (child, index) => {
171
+ // @ts-expect-error it's either SceneView in v6 or RouteView in v5
172
+ const { props, key } = child;
173
+ const descriptor = props?.descriptor ?? props?.descriptors?.[key];
174
+ const freezeEnabled = descriptor?.options?.freezeOnBlur ?? ENABLE_FREEZE;
175
+
182
176
  return (
183
- <ScreensNativeModules.NativeScreenStack {...rest}>
184
- {childrenWithFreeze}
185
- </ScreensNativeModules.NativeScreenStack>
177
+ <DelayedFreeze freeze={freezeEnabled && size - index > 1}>
178
+ {child}
179
+ </DelayedFreeze>
186
180
  );
187
- }
188
- return <ScreensNativeModules.NativeScreenStack {...props} />;
181
+ });
182
+
183
+ return (
184
+ <ScreensNativeModules.NativeScreenStack {...rest}>
185
+ {childrenWithFreeze}
186
+ </ScreensNativeModules.NativeScreenStack>
187
+ );
189
188
  }
190
189
 
191
190
  // Incomplete type, all accessible properties available at:
@@ -200,7 +199,7 @@ interface ViewConfig extends View {
200
199
  };
201
200
  }
202
201
 
203
- class Screen extends React.Component<ScreenProps> {
202
+ class InnerScreen extends React.Component<ScreenProps> {
204
203
  private ref: React.ElementRef<typeof View> | null = null;
205
204
  private closing = new Animated.Value(0);
206
205
  private progress = new Animated.Value(0);
@@ -216,7 +215,11 @@ class Screen extends React.Component<ScreenProps> {
216
215
  };
217
216
 
218
217
  render() {
219
- const { enabled = ENABLE_SCREENS, ...rest } = this.props;
218
+ const {
219
+ enabled = ENABLE_SCREENS,
220
+ freezeOnBlur = ENABLE_FREEZE,
221
+ ...rest
222
+ } = this.props;
220
223
 
221
224
  if (enabled && isPlatformSupported) {
222
225
  AnimatedNativeScreen =
@@ -253,7 +256,7 @@ class Screen extends React.Component<ScreenProps> {
253
256
  };
254
257
 
255
258
  return (
256
- <MaybeFreeze freeze={activityState === 0}>
259
+ <DelayedFreeze freeze={freezeOnBlur && activityState === 0}>
257
260
  <AnimatedNativeScreen
258
261
  {...props}
259
262
  activityState={activityState}
@@ -295,7 +298,7 @@ class Screen extends React.Component<ScreenProps> {
295
298
  </TransitionProgressContext.Provider>
296
299
  )}
297
300
  </AnimatedNativeScreen>
298
- </MaybeFreeze>
301
+ </DelayedFreeze>
299
302
  );
300
303
  } else {
301
304
  // same reason as above
@@ -408,8 +411,17 @@ export type {
408
411
  };
409
412
 
410
413
  // context to be used when the user wants to use enhanced implementation
411
- // e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)
412
- const ScreenContext = React.createContext(Screen);
414
+ // e.g. to use `useReanimatedTransitionProgress` (see `reanimated` folder in repo)
415
+ const ScreenContext = React.createContext(InnerScreen);
416
+
417
+ class Screen extends React.Component<ScreenProps> {
418
+ static contextType = ScreenContext;
419
+
420
+ render() {
421
+ const ScreenWrapper = this.context || InnerScreen;
422
+ return <ScreenWrapper {...this.props} />;
423
+ }
424
+ }
413
425
 
414
426
  module.exports = {
415
427
  // these are classes so they are not evaluated until used
@@ -418,6 +430,7 @@ module.exports = {
418
430
  ScreenContainer,
419
431
  ScreenContext,
420
432
  ScreenStack,
433
+ InnerScreen,
421
434
 
422
435
  get NativeScreen() {
423
436
  return ScreensNativeModules.NativeScreen;
package/src/index.tsx CHANGED
@@ -62,6 +62,8 @@ export class NativeScreen extends React.Component<ScreenProps> {
62
62
 
63
63
  export const Screen = Animated.createAnimatedComponent(NativeScreen);
64
64
 
65
+ export const InnerScreen = View;
66
+
65
67
  export const ScreenContext = React.createContext(Screen);
66
68
 
67
69
  export const ScreenContainer: React.ComponentType<ScreenContainerProps> = View;
@@ -375,6 +375,11 @@ export type NativeStackNavigationOptions = {
375
375
  * @platform ios
376
376
  */
377
377
  transitionDuration?: number;
378
+ /**
379
+ * Whether inactive screens should be suspended from re-rendering. Defaults to `false`.
380
+ * Defaults to `true` when `enableFreeze()` is run at the top of the application.
381
+ */
382
+ freezeOnBlur?: boolean;
378
383
  };
379
384
 
380
385
  export type NativeStackNavigatorProps = DefaultNavigatorOptions<
@@ -165,6 +165,7 @@ const RouteView = ({
165
165
  statusBarTranslucent,
166
166
  swipeDirection = 'horizontal',
167
167
  transitionDuration,
168
+ freezeOnBlur,
168
169
  } = options;
169
170
 
170
171
  let {
@@ -219,6 +220,7 @@ const RouteView = ({
219
220
  isNativeStack
220
221
  style={StyleSheet.absoluteFill}
221
222
  customAnimationOnSwipe={customAnimationOnSwipe}
223
+ freezeOnBlur={freezeOnBlur}
222
224
  fullScreenSwipeEnabled={fullScreenSwipeEnabled}
223
225
  hideKeyboardOnSwipe={hideKeyboardOnSwipe}
224
226
  homeIndicatorHidden={homeIndicatorHidden}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Platform } from 'react-native';
3
3
  import {
4
- Screen,
4
+ InnerScreen,
5
5
  ScreenProps,
6
6
  TransitionProgressEventType,
7
7
  } from 'react-native-screens';
@@ -11,7 +11,7 @@ import Animated, { useEvent, useSharedValue } from 'react-native-reanimated';
11
11
  import ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';
12
12
 
13
13
  const AnimatedScreen = Animated.createAnimatedComponent(
14
- (Screen as unknown) as React.ComponentClass
14
+ (InnerScreen as unknown) as React.ComponentClass
15
15
  );
16
16
 
17
17
  // We use prop added to global by reanimated since it seems safer than the one from RN. See: