expo-router 56.2.13 → 56.2.14

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 (60) hide show
  1. package/android/build.gradle +2 -2
  2. package/build/exports.d.ts +1 -1
  3. package/build/exports.d.ts.map +1 -1
  4. package/build/exports.js.map +1 -1
  5. package/build/fork/useLinking.native.js +1 -1
  6. package/build/fork/useLinking.native.js.map +1 -1
  7. package/build/global-state/store.d.ts +3 -4
  8. package/build/global-state/store.d.ts.map +1 -1
  9. package/build/global-state/store.js.map +1 -1
  10. package/build/global-state/useStore.d.ts.map +1 -1
  11. package/build/global-state/useStore.js +0 -4
  12. package/build/global-state/useStore.js.map +1 -1
  13. package/build/react-navigation/native-stack/index.d.ts +1 -1
  14. package/build/react-navigation/native-stack/index.d.ts.map +1 -1
  15. package/build/react-navigation/native-stack/index.js.map +1 -1
  16. package/build/react-navigation/native-stack/types.d.ts +17 -0
  17. package/build/react-navigation/native-stack/types.d.ts.map +1 -1
  18. package/build/react-navigation/native-stack/types.js.map +1 -1
  19. package/build/react-navigation/native-stack/views/NativeStackView.native.d.ts.map +1 -1
  20. package/build/react-navigation/native-stack/views/NativeStackView.native.js +3 -2
  21. package/build/react-navigation/native-stack/views/NativeStackView.native.js.map +1 -1
  22. package/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts +1 -1
  23. package/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts.map +1 -1
  24. package/build/react-navigation/native-stack/views/useHeaderConfigProps.js +3 -1
  25. package/build/react-navigation/native-stack/views/useHeaderConfigProps.js.map +1 -1
  26. package/expo-module.config.json +1 -1
  27. package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.module → 56.2.14/expo.modules.router-56.2.14.module} +7 -7
  28. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.14/expo.modules.router-56.2.14.module.md5 +1 -0
  29. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.14/expo.modules.router-56.2.14.module.sha1 +1 -0
  30. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.14/expo.modules.router-56.2.14.module.sha256 +1 -0
  31. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.14/expo.modules.router-56.2.14.module.sha512 +1 -0
  32. package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.pom → 56.2.14/expo.modules.router-56.2.14.pom} +1 -1
  33. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.14/expo.modules.router-56.2.14.pom.md5 +1 -0
  34. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.14/expo.modules.router-56.2.14.pom.sha1 +1 -0
  35. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.14/expo.modules.router-56.2.14.pom.sha256 +1 -0
  36. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.14/expo.modules.router-56.2.14.pom.sha512 +1 -0
  37. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml +4 -4
  38. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.md5 +1 -1
  39. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha1 +1 -1
  40. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha256 +1 -1
  41. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha512 +1 -1
  42. package/package.json +4 -4
  43. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.module.md5 +0 -1
  44. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.module.sha1 +0 -1
  45. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.module.sha256 +0 -1
  46. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.module.sha512 +0 -1
  47. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.pom.md5 +0 -1
  48. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.pom.sha1 +0 -1
  49. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.pom.sha256 +0 -1
  50. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.pom.sha512 +0 -1
  51. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar → 56.2.14/expo.modules.router-56.2.14-sources.jar} +0 -0
  52. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar.md5 → 56.2.14/expo.modules.router-56.2.14-sources.jar.md5} +0 -0
  53. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar.sha1 → 56.2.14/expo.modules.router-56.2.14-sources.jar.sha1} +0 -0
  54. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar.sha256 → 56.2.14/expo.modules.router-56.2.14-sources.jar.sha256} +0 -0
  55. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar.sha512 → 56.2.14/expo.modules.router-56.2.14-sources.jar.sha512} +0 -0
  56. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar → 56.2.14/expo.modules.router-56.2.14.aar} +0 -0
  57. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar.md5 → 56.2.14/expo.modules.router-56.2.14.aar.md5} +0 -0
  58. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar.sha1 → 56.2.14/expo.modules.router-56.2.14.aar.sha1} +0 -0
  59. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar.sha256 → 56.2.14/expo.modules.router-56.2.14.aar.sha256} +0 -0
  60. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar.sha512 → 56.2.14/expo.modules.router-56.2.14.aar.sha512} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/react-navigation/native-stack/types.tsx"],"names":[],"mappings":"","sourcesContent":["import type {\n ColorValue,\n ImageSourcePropType,\n StyleProp,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type {\n ScreenProps,\n ScreenStackHeaderConfigProps,\n ScrollEdgeEffect,\n SearchBarProps,\n} from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type {\n DefaultNavigatorOptions,\n Descriptor,\n NavigationHelpers,\n NavigationProp,\n ParamListBase,\n Route,\n RouteProp,\n StackActionHelpers,\n StackNavigationState,\n StackRouterOptions,\n Theme,\n} from '../native';\n\nexport type NativeStackNavigationEventMap = {\n /**\n * Event which fires when a transition animation starts.\n */\n transitionStart: { data: { closing: boolean } };\n /**\n * Event which fires when a transition animation ends.\n */\n transitionEnd: { data: { closing: boolean } };\n /**\n * Event which fires when a swipe back is canceled on iOS.\n */\n gestureCancel: { data: undefined };\n /**\n * Event which fires when screen is in sheet presentation & it's detent changes.\n *\n * In payload it caries two fields:\n *\n * * `index` - current detent index in the `sheetAllowedDetents` array,\n * * `stable` - on Android `false` value means that the user is dragging the sheet or it is settling; on iOS it is always `true`.\n */\n sheetDetentChange: { data: { index: number; stable: boolean } };\n};\n\nexport type NativeStackNavigationProp<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = string,\n NavigatorID extends string | undefined = undefined,\n> = NavigationProp<\n ParamList,\n RouteName,\n NavigatorID,\n StackNavigationState<ParamList>,\n NativeStackNavigationOptions,\n NativeStackNavigationEventMap\n> &\n StackActionHelpers<ParamList>;\n\nexport type NativeStackScreenProps<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = string,\n NavigatorID extends string | undefined = undefined,\n> = {\n navigation: NativeStackNavigationProp<ParamList, RouteName, NavigatorID>;\n route: RouteProp<ParamList, RouteName>;\n};\n\nexport type NativeStackOptionsArgs<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = keyof ParamList,\n NavigatorID extends string | undefined = undefined,\n> = NativeStackScreenProps<ParamList, RouteName, NavigatorID> & {\n theme: Theme;\n};\n\nexport type NativeStackNavigationHelpers = NavigationHelpers<\n ParamListBase,\n NativeStackNavigationEventMap\n>;\n\n// We want it to be an empty object because navigator does not have any additional props\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type NativeStackNavigationConfig = {};\n\nexport type NativeStackHeaderProps = {\n /**\n * Options for the back button.\n */\n back?: {\n /**\n * Title of the previous screen.\n */\n title: string | undefined;\n /**\n * The `href` to use for the anchor tag on web\n */\n href: string | undefined;\n };\n /**\n * Options for the current screen.\n */\n options: NativeStackNavigationOptions;\n /**\n * Route object for the current screen.\n */\n route: Route<string>;\n /**\n * Navigation prop for the header.\n */\n navigation: NativeStackNavigationProp<ParamListBase>;\n};\n\nexport type NativeStackHeaderItemProps = {\n /**\n * Tint color for the header.\n */\n tintColor?: ColorValue;\n /**\n * Whether it's possible to navigate back in stack.\n */\n canGoBack?: boolean;\n /**\n * Header background color\n */\n backgroundColor?: ColorValue;\n};\n\nexport type NativeStackHeaderBackProps = NativeStackHeaderItemProps & {\n /**\n * Label text for the button. Usually the title of the previous screen.\n * By default, this is only shown on iOS 18.\n */\n label?: string;\n /**\n * The `href` to use for the anchor tag on web\n */\n href?: string;\n};\n\n/**\n * @deprecated Use `NativeStackHeaderBackProps` instead.\n */\nexport type NativeStackHeaderLeftProps = NativeStackHeaderBackProps;\n\n/**\n * @deprecated Use `NativeStackHeaderItemProps` instead.\n */\nexport type NativeStackHeaderRightProps = NativeStackHeaderItemProps;\n\nexport type NativeStackNavigationOptions = {\n /**\n * String that can be displayed in the header as a fallback for `headerTitle`.\n */\n title?: string;\n /**\n * Function that given `HeaderProps` returns a React Element to display as a header.\n */\n header?: (props: NativeStackHeaderProps) => React.ReactNode;\n /**\n * Whether the back button is visible in the header.\n * You can use it to show a back button alongside `headerLeft` if you have specified it.\n *\n * This will have no effect on the first screen in the stack.\n */\n headerBackVisible?: boolean;\n /**\n * Title string used by the back button on iOS.\n * Defaults to the previous scene's title.\n * On iOS the text might be shortened to \"Back\" or arrow icon depending on the available space, following native iOS behaviour.\n * See `headerBackButtonDisplayMode` to read about limitations and interactions with other props.\n * Use `headerBackButtonDisplayMode: \"minimal\"` to hide it.\n *\n * Only supported on iOS and Web.\n *\n * @platform ios, web\n */\n headerBackTitle?: string;\n /**\n * Style object for header back title. Supported properties:\n * - fontFamily\n * - fontSize\n *\n * Only supported on iOS and Web.\n *\n * @platform ios, web\n */\n headerBackTitleStyle?: StyleProp<{\n fontFamily?: string;\n fontSize?: number;\n }>;\n /**\n * Icon to display in the header as the icon in the back button.\n *\n * Defaults to back icon image for the platform\n * - A chevron on iOS\n * - An arrow on Android\n *\n * @example\n * ```js\n * headerBackIcon: {\n * type: 'image',\n * source: require('./back-icon.png'),\n * }\n * ```\n */\n headerBackIcon?: {\n type: 'image';\n source: ImageSourcePropType;\n };\n /**\n * Image to display in the header as the icon in the back button.\n *\n * @deprecated Use `headerBackIcon` instead.\n */\n headerBackImageSource?: ImageSourcePropType;\n /**\n * Style of the header when a large title is shown.\n * The large title is shown if `headerLargeTitle` is `true` and\n * the edge of any scrollable content reaches the matching edge of the header.\n *\n * Supported properties:\n * - backgroundColor\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerLargeStyle?: StyleProp<{\n backgroundColor?: ColorValue;\n }>;\n /**\n * Whether to enable header with large title which collapses to regular header on scroll.\n *\n * For large title to collapse on scroll, the content of the screen should be wrapped in a scrollable view such as `ScrollView` or `FlatList`.\n * If the scrollable area doesn't fill the screen, the large title won't collapse on scroll.\n * You also need to specify `contentInsetAdjustmentBehavior=\"automatic\"` in your `ScrollView`, `FlatList` etc.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerLargeTitleEnabled?: boolean;\n /**\n * Whether to enable header with large title which collapses to regular header on scroll.\n *\n * @deprecated Use `headerLargeTitleEnabled` instead.\n */\n headerLargeTitle?: boolean;\n /**\n * Whether drop shadow of header is visible when a large title is shown.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerLargeTitleShadowVisible?: boolean;\n /**\n * Style object for large title in header. Supported properties:\n * - fontFamily\n * - fontSize\n * - fontWeight\n * - color\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerLargeTitleStyle?: StyleProp<{\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: string;\n color?: ColorValue;\n }>;\n /**\n * Whether to show the header. The header is shown by default.\n * Setting this to `false` hides the header.\n */\n headerShown?: boolean;\n /**\n * Style object for header. Supported properties:\n * - backgroundColor\n */\n headerStyle?: StyleProp<{\n backgroundColor?: ColorValue;\n }>;\n /**\n * Whether to hide the elevation shadow (Android) or the bottom border (iOS) on the header.\n */\n headerShadowVisible?: boolean;\n /**\n * Boolean indicating whether the navigation bar is translucent.\n * Setting this to `true` makes the header absolutely positioned,\n * and changes the background color to `transparent` unless specified in `headerStyle`.\n */\n headerTransparent?: boolean;\n /**\n * Blur effect for the translucent header.\n * The `headerTransparent` option needs to be set to `true` for this to work.\n *\n * **Note:** Using both `headerBlurEffect` and `scrollEdgeEffects` (>= iOS 26) simultaneously may cause overlapping effects.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerBlurEffect?: ScreenStackHeaderConfigProps['blurEffect'];\n /**\n * Tint color for the header. Changes the color of back button and title.\n */\n headerTintColor?: ColorValue;\n /**\n * Function which returns a React Element to render as the background of the header.\n * This is useful for using backgrounds such as an image, a gradient, blur effect etc.\n * You can use this with `headerTransparent` to render content underneath a translucent header.\n */\n headerBackground?: () => React.ReactNode;\n /**\n * Function which returns a React Element to display on the left side of the header.\n * This replaces the back button. See `headerBackVisible` to show the back button along side left element.\n * Will be overriden by `headerLeftItems` on iOS.\n */\n headerLeft?: (props: NativeStackHeaderBackProps) => React.ReactNode;\n /**\n * Function which returns a React Element to display on the right side of the header.\n * Will be overriden by `headerRightItems` on iOS.\n */\n headerRight?: (props: NativeStackHeaderItemProps) => React.ReactNode;\n /**\n * Function which returns an array of items to display as on the left side of the header.\n * Overrides `headerLeft`.\n *\n * This is an unstable API and might change in the future.\n *\n * @platform ios\n */\n unstable_headerLeftItems?: (props: NativeStackHeaderItemProps) => NativeStackHeaderItem[];\n /**\n * Function which returns an array of items to display as on the right side of the header.\n * Overrides `headerRight`.\n *\n * This is an unstable API and might change in the future.\n *\n * @platform ios\n */\n unstable_headerRightItems?: (props: NativeStackHeaderItemProps) => NativeStackHeaderItem[];\n /**\n * String or a function that returns a React Element to be used by the header.\n * Defaults to screen `title` or route name.\n *\n * When a function is passed, it receives `tintColor` and`children` in the options object as an argument.\n * The title string is passed in `children`.\n *\n * Note that if you render a custom element by passing a function, animations for the title won't work.\n */\n headerTitle?:\n | string\n | ((props: {\n /**\n * The title text of the header.\n */\n children: string;\n /**\n * Tint color for the header.\n */\n tintColor?: ColorValue;\n }) => React.ReactNode);\n /**\n * How to align the the header title.\n * Defaults to `left` on platforms other than iOS.\n *\n * Not supported on iOS. It's always `center` on iOS and cannot be changed.\n */\n headerTitleAlign?: 'left' | 'center';\n /**\n * Style object for header title. Supported properties:\n * - fontFamily\n * - fontSize\n * - fontWeight\n * - color\n */\n headerTitleStyle?: StyleProp<\n Pick<TextStyle, 'fontFamily' | 'fontSize' | 'fontWeight'> & {\n color?: ColorValue;\n }\n >;\n /**\n * Options to render a native search bar.\n * You also need to specify `contentInsetAdjustmentBehavior=\"automatic\"` in your `ScrollView`, `FlatList` etc.\n * If you don't have a `ScrollView`, specify `headerTransparent: false`.\n */\n headerSearchBarOptions?: SearchBarProps;\n /**\n * Boolean indicating whether to show the menu on longPress of iOS >= 14 back button. Defaults to `true`.\n * Requires `react-native-screens` version >=3.3.0.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerBackButtonMenuEnabled?: boolean;\n /**\n * How the back button displays icon and title.\n *\n * Supported values:\n * - \"default\" - Displays one of the following depending on the available space: previous screen's title, generic title (e.g. 'Back') or no title (only icon).\n * - \"generic\" – Displays one of the following depending on the available space: generic title (e.g. 'Back') or no title (only icon).\n * - \"minimal\" – Always displays only the icon without a title.\n *\n * The space-aware behavior is disabled when:\n * - The iOS version is 13 or lower\n * - Custom font family or size is set (e.g. with `headerBackTitleStyle`)\n * - Back button menu is disabled (e.g. with `headerBackButtonMenuEnabled`)\n *\n * In such cases, a static title and icon are always displayed.\n *\n * Defaults to \"default\" on iOS, and \"minimal\" on other platforms.\n *\n * Only supported on iOS and Web.\n *\n * @platform ios, web\n */\n headerBackButtonDisplayMode?: ScreenStackHeaderConfigProps['backButtonDisplayMode'];\n /**\n * Whether the home indicator should prefer to stay hidden on this screen. Defaults to `false`.\n *\n * @platform ios\n */\n autoHideHomeIndicator?: boolean;\n /**\n * Whether the keyboard should hide when swiping to the previous screen. Defaults to `false`.\n *\n * @platform ios\n */\n keyboardHandlingEnabled?: boolean;\n /**\n * Sets the navigation bar color. Defaults to initial navigation bar color.\n *\n * @deprecated For all apps targeting Android SDK 35 or above edge-to-edge is enabled by default.\n * This prop is subject to removal in the future.\n * See: https://developer.android.com/about/versions/15/behavior-changes-15#ux.\n *\n * @platform android\n */\n navigationBarColor?: ColorValue;\n /**\n * Boolean indicating whether the content should be visible behind the navigation bar. Defaults to `false`.\n *\n * @deprecated For all apps targeting Android SDK 35 or above edge-to-edge is enabled by default.\n * This prop is subject to removal in the future.\n * See: https://developer.android.com/about/versions/15/behavior-changes-15#ux.\n *\n * @platform android\n */\n navigationBarTranslucent?: boolean;\n /**\n * Sets the visibility of the navigation bar. Defaults to `false`.\n *\n * @platform android\n */\n navigationBarHidden?: boolean;\n /**\n * Sets the status bar animation (similar to the `StatusBar` component).\n * On Android, setting either `fade` or `slide` will set the transition of status bar color. On iOS, this option applies to appereance animation of the status bar.\n * Requires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.\n *\n * Defaults to `fade` on iOS and `none` on Android.\n *\n * Only supported on Android and iOS.\n *\n * @platform android, ios\n */\n statusBarAnimation?: ScreenProps['statusBarAnimation'];\n /**\n * Sets the status bar color (similar to the `StatusBar` component). Defaults to initial status bar color.\n *\n * @deprecated For all apps targeting Android SDK 35 or above edge-to-edge is enabled by default.\n * This prop is subject to removal in the future.\n * See: https://developer.android.com/about/versions/15/behavior-changes-15#ux.\n *\n * @platform android\n */\n statusBarBackgroundColor?: ColorValue;\n /**\n * Whether the status bar should be hidden on this screen.\n * Requires setting `View controller-based status bar appearance -> YES` in your Info.plist file.\n *\n * Only supported on Android and iOS.\n *\n * @platform android, ios\n */\n statusBarHidden?: boolean;\n /**\n * Sets the status bar color (similar to the `StatusBar` component).\n * Requires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.\n * `auto` and `inverted` are supported only on iOS. On Android, they will fallback to `light`.\n *\n * Defaults to `auto` on iOS and `light` on Android.\n *\n * Only supported on Android and iOS.\n *\n * @platform android, ios\n */\n statusBarStyle?: ScreenProps['statusBarStyle'];\n /**\n * Sets the translucency of the status bar. Defaults to `false`.\n *\n * @deprecated For all apps targeting Android SDK 35 or above edge-to-edge is enabled by default.\n * This prop is subject to removal in the future.\n * See: https://developer.android.com/about/versions/15/behavior-changes-15#ux.\n *\n * @platform android\n */\n statusBarTranslucent?: boolean;\n /**\n * Sets the direction in which you should swipe to dismiss the screen.\n * When using `vertical` option, options `fullScreenGestureEnabled: true`, `animationMatchesGesture: true` and `animation: 'slide_from_bottom'` are set by default.\n *\n * Supported values:\n * - `vertical` – dismiss screen vertically\n * - `horizontal` – dismiss screen horizontally (default)\n *\n * @platform ios\n */\n gestureDirection?: ScreenProps['swipeDirection'];\n /**\n * Style object for the scene content.\n */\n contentStyle?: StyleProp<ViewStyle>;\n /**\n * Whether the gesture to dismiss should use animation provided to `animation` prop. Defaults to `false`.\n *\n * Doesn't affect the behavior of screens presented modally.\n *\n * @platform ios\n */\n animationMatchesGesture?: boolean;\n /**\n * Whether the gesture to dismiss should work on the whole screen. The behavior depends on iOS version.\n *\n * On iOS 18 and below:\n * `false` by default. If enabled, swipe gesture will use `simple_push` transition animation by default. It can be changed\n * with `animation` & `animationMatchesGesture` props, but default iOS swipe animation is not achievable.\n *\n * On iOS 26 and up:\n * `true` by default to match new native behavior. You can still customize it with `animation` & `animationMatchesGesture` props.\n *\n * Doesn't affect the behavior of screens presented modally.\n *\n * @platform ios\n */\n fullScreenGestureEnabled?: boolean;\n /**\n * iOS 18 and below. Controls whether the full screen dismiss gesture has shadow under view during transition.\n * The gesture uses custom transition and thus doesn't have a shadow by default. When enabled, a custom shadow view\n * is added during the transition which tries to mimic the default iOS shadow. Defaults to `true`.\n *\n * This does not affect the behavior of transitions that don't use gestures, enabled by `fullScreenGestureEnabled` prop.\n *\n * @deprecated since iOS 26.\n *\n * @platform ios\n */\n fullScreenGestureShadowEnabled?: boolean;\n /**\n * Whether you can use gestures to dismiss this screen. Defaults to `true`.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n gestureEnabled?: boolean;\n /**\n * Use it to restrict the distance from the edges of screen in which the gesture should be recognized. To be used alongside `fullScreenGestureEnabled`.\n *\n * @platform ios\n */\n gestureResponseDistance?: ScreenProps['gestureResponseDistance'];\n /**\n * The type of animation to use when this screen replaces another screen. Defaults to `pop`.\n *\n * Supported values:\n * - \"push\": the new screen will perform push animation.\n * - \"pop\": the new screen will perform pop animation.\n *\n * Only supported on iOS and Android.\n */\n animationTypeForReplace?: ScreenProps['replaceAnimation'];\n /**\n * How the screen should animate when pushed or popped.\n *\n * Supported values:\n * - \"default\": use the platform default animation\n * - \"fade\": fade screen in or out\n * - \"fade_from_bottom\" – performs a fade from bottom animation\n * - \"flip\": flip the screen, requires presentation: \"modal\" (iOS only)\n * - \"simple_push\": use the platform default animation, but without shadow and native header transition (iOS only)\n * - \"slide_from_bottom\": slide in the new screen from bottom\n * - \"slide_from_right\": slide in the new screen from right (Android only, uses default animation on iOS)\n * - \"slide_from_left\": slide in the new screen from left (Android only, uses default animation on iOS)\n * - \"ios_from_right\" - iOS like slide in animation. pushes in the new screen from right to left (Android only, resolves to default transition on iOS)\n * - \"ios_from_left\" - iOS like slide in animation. pushes in the new screen from left to right (Android only, resolves to default transition on iOS)\n * - \"none\": don't animate the screen\n *\n * Only supported on iOS and Android.\n */\n animation?: ScreenProps['stackAnimation'];\n /**\n * Duration (in milliseconds) for the following transition animations on iOS:\n * - `slide_from_bottom`\n * - `fade_from_bottom`\n * - `fade`\n * - `simple_push`\n *\n * Defaults to `500`.\n *\n * The duration is not customizable for:\n * - Screens with `default` and `flip` animations\n * - Screens with `presentation` set to `modal`, `formSheet`, `pageSheet` (regardless of animation)\n *\n * @platform ios\n */\n animationDuration?: number;\n /**\n * How should the screen be presented.\n *\n * Supported values:\n * - \"card\": the new screen will be pushed onto a stack, which means the default animation will be slide from the side on iOS, the animation on Android will vary depending on the OS version and theme.\n * - \"modal\": the new screen will be presented modally. this also allows for a nested stack to be rendered inside the screen.\n * - \"transparentModal\": the new screen will be presented modally, but in addition, the previous screen will stay so that the content below can still be seen if the screen has translucent background.\n * - \"containedModal\": will use \"UIModalPresentationCurrentContext\" modal style on iOS and will fallback to \"modal\" on Android.\n * - \"containedTransparentModal\": will use \"UIModalPresentationOverCurrentContext\" modal style on iOS and will fallback to \"transparentModal\" on Android.\n * - \"fullScreenModal\": will use \"UIModalPresentationFullScreen\" modal style on iOS and will fallback to \"modal\" on Android.\n * - \"formSheet\": will use \"UIModalPresentationFormSheet\" modal style on iOS and will fallback to \"modal\" on Android.\n * - \"pageSheet\": will use \"UIModalPresentationPageSheet\" modal style on iOS and will fallback to \"modal\" on Android.\n *\n * Only supported on iOS and Android.\n */\n presentation?: Exclude<ScreenProps['stackPresentation'], 'push'> | 'card';\n /**\n * Describes heights where a sheet can rest.\n * Works only when `presentation` is set to `formSheet`.\n *\n * Heights should be described as fraction (a number from `[0, 1]` interval) of screen height / maximum detent height.\n * You can pass an array of ascending values each defining allowed sheet detent. iOS accepts any number of detents,\n * while **Android is limited to three**.\n *\n * There is also possibility to specify `fitToContents` literal, which intents to set the sheet height\n * to the height of its contents.\n *\n * Note that the array **must** be sorted in ascending order. This invariant is verified only in developement mode,\n * where violation results in error.\n *\n * **Android is limited to up 3 values in the array** -- any surplus values, beside first three are ignored.\n *\n * Defaults to `[1.0]`.\n */\n sheetAllowedDetents?: number[] | 'fitToContents';\n /**\n * Integer value describing elevation of the sheet, impacting shadow on the top edge of the sheet.\n *\n * Not dynamic - changing it after the component is rendered won't have an effect.\n *\n * Defaults to `24`.\n *\n * @platform Android\n */\n sheetElevation?: number;\n /**\n * Whether the sheet should expand to larger detent when scrolling.\n * Works only when `presentation` is set to `formSheet`.\n * Defaults to `true`.\n *\n * @platform ios\n */\n sheetExpandsWhenScrolledToEdge?: boolean;\n /**\n * The corner radius that the sheet will try to render with.\n * Works only when `presentation` is set to `formSheet`.\n *\n * If set to non-negative value it will try to render sheet with provided radius, else it will apply system default.\n *\n * If left unset system default is used.\n */\n sheetCornerRadius?: number;\n /**\n * Index of the detent the sheet should expand to after being opened.\n * Works only when `stackPresentation` is set to `formSheet`.\n *\n * If the specified index is out of bounds of `sheetAllowedDetents` array, in dev environment more error will be thrown,\n * in production the value will be reset to default value.\n *\n * Additionaly there is `last` value available, when set the sheet will expand initially to last (largest) detent.\n *\n * Defaults to `0` - which represents first detent in the detents array.\n */\n sheetInitialDetentIndex?: number | 'last';\n /**\n * Boolean indicating whether the sheet shows a grabber at the top.\n * Works only when `presentation` is set to `formSheet`.\n * Defaults to `false`.\n *\n * @platform ios\n */\n sheetGrabberVisible?: boolean;\n /**\n * The largest sheet detent for which a view underneath won't be dimmed.\n * Works only when `presentation` is set to `formSheet`.\n *\n * This prop can be set to an number, which indicates index of detent in `sheetAllowedDetents` array for which\n * there won't be a dimming view beneath the sheet.\n *\n * Additionaly there are following options available:\n *\n * * `none` - there will be dimming view for all detents levels,\n * * `last` - there won't be a dimming view for any detent level.\n *\n * @remark\n * On iOS, the native implementation might resize the the sheet w/o explicitly changing the detent level, e.g. in case of keyboard appearance.\n * In case after such resize the sheet exceeds height for which in regular scenario a dimming view would be applied - it will be applied,\n * even if the detent has not effectively been changed.\n *\n * Defaults to `none`, indicating that the dimming view should be always present.\n */\n sheetLargestUndimmedDetentIndex?: number | 'none' | 'last';\n /**\n * Whether the sheet content should be rendered behind the Status Bar or display cutouts.\n *\n * When set to `true`, the sheet will extend to the physical edges of the stack,\n * allowing content to be visible behind the status bar or display cutouts.\n * Detent ratios in sheetAllowedDetents will be measured relative to the full stack height.\n *\n * When set to `false`, the sheet's layout will be constrained by the inset from the top\n * and the detent ratios will then be measured relative to the adjusted height (excluding the top inset).\n * This means that sheetAllowedDetents will result in different sheet heights depending on this prop.\n *\n * Defaults to `false`.\n *\n * @platform android\n */\n sheetShouldOverflowTopInset?: boolean;\n /**\n * Whether the default native animation should be used when the sheet's with\n * `fitToContents` content size changes.\n *\n * When set to `true`, the sheet uses internal logic to synchronize size updates and\n * translation animations during entry, exit, or content updates. This ensures a smooth\n * transition for standard, static content mounting/unmounting.\n *\n * When set to `false`, the internal animation and translation logic is ignored. This\n * allows the sheet to adjust its size dynamically based on the current dimensions of\n * the content provided by the developer, allowing implementing custom resizing animations.\n *\n * Defaults to `true`.\n *\n * @platform android\n */\n sheetResizeAnimationEnabled?: boolean;\n /**\n * The display orientation to use for the screen.\n *\n * Supported values:\n * - \"default\" - resolves to \"all\" without \"portrait_down\" on iOS. On Android, this lets the system decide the best orientation.\n * - \"all\": all orientations are permitted.\n * - \"portrait\": portrait orientations are permitted.\n * - \"portrait_up\": right-side portrait orientation is permitted.\n * - \"portrait_down\": upside-down portrait orientation is permitted.\n * - \"landscape\": landscape orientations are permitted.\n * - \"landscape_left\": landscape-left orientation is permitted.\n * - \"landscape_right\": landscape-right orientation is permitted.\n *\n * Only supported on iOS and Android.\n */\n orientation?: ScreenProps['screenOrientation'];\n /**\n * Whether inactive screens should be suspended from re-rendering. Defaults to `false`.\n * Defaults to `true` when `enableFreeze()` is run at the top of the application.\n * Requires `react-native-screens` version >=3.16.0.\n *\n * Only supported on iOS and Android.\n */\n freezeOnBlur?: boolean;\n /**\n * Configures the scroll edge effect for the _content ScrollView_ (the ScrollView that is present in first descendants chain of the Screen).\n * Depending on values set, it will blur the scrolling content below certain UI elements (header items, search bar)\n * for the specified edge of the ScrollView.\n *\n * When set in nested containers, i.e. Native Stack inside Native Bottom Tabs, or the other way around,\n * the ScrollView will use only the innermost one's config.\n *\n * **Note:** Using both `headerBlurEffect` and `scrollEdgeEffects` (>= iOS 26) simultaneously may cause overlapping effects.\n *\n * Edge effects can be configured for each edge separately. The following values are currently supported:\n *\n * - `automatic` - the automatic scroll edge effect style,\n * - `hard` - a scroll edge effect with a hard cutoff and dividing line,\n * - `soft` - a soft-edged scroll edge effect,\n * - `hidden` - no scroll edge effect.\n *\n * Defaults to `automatic` for each edge.\n *\n * @platform ios\n *\n * @supported iOS 26 or higher\n */\n scrollEdgeEffects?: {\n bottom?: ScrollEdgeEffect;\n left?: ScrollEdgeEffect;\n right?: ScrollEdgeEffect;\n top?: ScrollEdgeEffect;\n };\n /**\n * Footer component that can be used alongside formSheet stack presentation style.\n *\n * This option is provided, because due to implementation details it might be problematic\n * to implement such layout with JS-only code.\n *\n * Note that this prop is marked as unstable and might be subject of breaking changes,\n * including removal, in particular when we find solution that will make implementing it with JS\n * straightforward.\n *\n * @platform android\n */\n unstable_sheetFooter?: () => React.ReactNode;\n};\n\ntype PlatformIconShared = {\n /**\n * - `image` - Use a local image as the icon.\n */\n type: 'image';\n /**\n * Image source to use as the icon.\n * - Local image: `require('./path/to/image.png')`\n * - Drawable resource or xcasset: `{ uri: 'image_name' }`\n */\n source: ImageSourcePropType;\n /**\n * Whether to apply tint color to the icon.\n * Defaults to `true`.\n *\n * @platform ios\n */\n tinted?: boolean;\n};\n\ntype PlatformIconIOSSfSymbol = {\n /**\n * - `sfSymbol` - Use an SF Symbol as the icon on iOS.\n */\n type: 'sfSymbol';\n /**\n * Name of the SF Symbol to use as the icon.\n */\n name: SFSymbol;\n};\n\ntype PlatformIconIOS = PlatformIconIOSSfSymbol | PlatformIconShared;\n\ntype SharedHeaderItem = {\n /**\n * Label of the item.\n */\n label: string;\n /**\n * Style for the item label.\n */\n labelStyle?: {\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: string;\n color?: ColorValue;\n };\n /**\n * Icon for the item\n */\n icon?: PlatformIconIOS;\n /**\n * The variant of the item.\n * \"prominent\" only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/style-swift.property\n */\n variant?: 'plain' | 'done' | 'prominent';\n /**\n * The tint color to apply to the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor\n */\n tintColor?: ColorValue;\n /**\n * Whether the item is in a disabled state.\n */\n disabled?: boolean;\n /**\n * The width of the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/width\n */\n width?: number;\n /**\n * Whether the background this item may share with other items in the bar should be hidden.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground\n */\n hidesSharedBackground?: boolean;\n /**\n * Whether this item can share a background with other items.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/sharesbackground\n */\n sharesBackground?: boolean;\n /**\n * An identifier used to match items across transitions.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/identifier\n */\n identifier?: string;\n /**\n * A badge to display on a item.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitembadge\n */\n badge?: {\n /**\n * The text to display in the badge.\n */\n value: number | string;\n /**\n * Style of the badge.\n */\n style?: {\n color?: ColorValue;\n backgroundColor?: ColorValue;\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: string;\n };\n };\n /**\n * Accessibility label for the item.\n */\n accessibilityLabel?: string;\n /**\n * Accessibility hint for the item.\n */\n accessibilityHint?: string;\n};\n\n/**\n * A button item in the header.\n */\nexport type NativeStackHeaderItemButton = SharedHeaderItem & {\n /**\n * Type of the item.\n */\n type: 'button';\n /**\n * Function to call when the item is pressed.\n */\n onPress: () => void;\n /**\n * Whether the item is in a selected state.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/isselected\n */\n selected?: boolean;\n};\n\n/**\n * An action item in a menu.\n */\nexport type NativeStackHeaderItemMenuAction = {\n type: 'action';\n /**\n * Label for the menu item.\n */\n label: string;\n /**\n * The secondary text displayed alongside the label of the menu item.\n */\n description?: string;\n /**\n * Icon for the menu item.\n */\n icon?: PlatformIconIOS;\n /**\n * Function to call when the menu item is pressed.\n */\n onPress: () => void;\n /**\n * The state of an action- or command-based menu item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/state\n */\n state?: 'on' | 'off' | 'mixed';\n /**\n * Whether to apply disabled style to the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/disabled\n */\n disabled?: boolean;\n /**\n * Whether to apply destructive style to the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive\n */\n destructive?: boolean;\n /**\n * Whether to apply hidden style to the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/hidden\n */\n hidden?: boolean;\n /**\n * Whether to keep the menu presented after firing the element’s action.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/keepsmenupresented\n */\n keepsMenuPresented?: boolean;\n /**\n * An elaborated title that explains the purpose of the action.\n *\n * On iOS, the system displays this title in the discoverability heads-up display (HUD).\n * If this is not set, the HUD displays the title property.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uiaction/discoverabilitytitle\n */\n discoverabilityLabel?: string;\n};\n\n/**\n * A submenu item that contains other menu items.\n */\nexport type NativeStackHeaderItemMenuSubmenu = {\n type: 'submenu';\n /**\n * Label for the submenu item.\n */\n label: string;\n /**\n * Icon for the submenu item.\n */\n icon?: PlatformIconIOS;\n /**\n * Whether the menu is displayed inline with the parent menu.\n * By default, submenus are displayed after expanding the parent menu item.\n * Inline menus are displayed as part of the parent menu as a section.\n *\n * Defaults to `false`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline\n */\n inline?: boolean;\n /**\n * How the submenu items are displayed.\n * - `default`: menu items are displayed normally.\n * - `palette`: menu items are displayed in a horizontal row.\n *\n * Defaults to `default`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette\n */\n layout?: 'default' | 'palette';\n /**\n * Whether to apply destructive style to the menu item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive\n */\n destructive?: boolean;\n /**\n * Whether multiple items in the submenu can be selected, i.e. in \"on\" state.\n *\n * Defaults to `false`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/singleselection\n */\n multiselectable?: boolean;\n /**\n * Array of menu items (actions or submenus).\n */\n items: NativeStackHeaderItemMenu['menu']['items'];\n};\n\n/**\n * An item that shows a menu when pressed.\n */\nexport type NativeStackHeaderItemMenu = SharedHeaderItem & {\n type: 'menu';\n /**\n * Whether the menu is a selection menu.\n * Tapping an item in a selection menu will add a checkmark to the selected item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/changesselectionasprimaryaction\n */\n changesSelectionAsPrimaryAction?: boolean;\n /**\n * Menu for the item.\n */\n menu: {\n /**\n * Optional title to show on top of the menu.\n */\n title?: string;\n /**\n * Whether multiple items in the submenu can be selected, i.e. in \"on\" state.\n *\n * Defaults to `false`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/singleselection\n */\n multiselectable?: boolean;\n /**\n * How the submenu items are displayed.\n * - `default`: menu items are displayed normally.\n * - `palette`: menu items are displayed in a horizontal row.\n *\n * Defaults to `default`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette\n */\n layout?: 'default' | 'palette';\n /**\n * Array of menu items (actions or submenus).\n */\n items: (NativeStackHeaderItemMenuAction | NativeStackHeaderItemMenuSubmenu)[];\n };\n};\n\n/**\n * An item to add spacing between other items in the header.\n */\nexport type NativeStackHeaderItemSpacing = {\n type: 'spacing';\n /**\n * The amount of spacing to add.\n */\n spacing: number;\n};\n\n/**\n * A custom item to display any React Element in the header.\n */\nexport type NativeStackHeaderItemCustom = {\n type: 'custom';\n /**\n * A React Element to display as the item.\n */\n element: React.ReactElement;\n /**\n * Whether the background this item may share with other items in the bar should be hidden.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground\n */\n hidesSharedBackground?: boolean;\n};\n\n/**\n * An item that can be displayed in the header.\n * It can be a button, a menu, spacing, or a custom element.\n *\n * On iOS 26, when showing items on the right side of the header,\n * if the items don't fit the available space, they will be collapsed into a menu automatically.\n * Items with `type: 'custom'` will not be included in this automatic collapsing behavior.\n */\nexport type NativeStackHeaderItem =\n | NativeStackHeaderItemButton\n | NativeStackHeaderItemMenu\n | NativeStackHeaderItemSpacing\n | NativeStackHeaderItemCustom;\n\nexport type NativeStackNavigatorProps = DefaultNavigatorOptions<\n ParamListBase,\n string | undefined,\n StackNavigationState<ParamListBase>,\n NativeStackNavigationOptions,\n NativeStackNavigationEventMap,\n NativeStackNavigationProp<ParamListBase>\n> &\n StackRouterOptions &\n NativeStackNavigationConfig;\n\nexport type NativeStackDescriptor = Descriptor<\n NativeStackNavigationOptions,\n NativeStackNavigationProp<ParamListBase>,\n RouteProp<ParamListBase>\n>;\n\nexport type NativeStackDescriptorMap = {\n [key: string]: NativeStackDescriptor;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/react-navigation/native-stack/types.tsx"],"names":[],"mappings":"","sourcesContent":["import type {\n ColorValue,\n ImageSourcePropType,\n StyleProp,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport type {\n ScreenProps,\n ScreenStackHeaderConfigProps,\n ScrollEdgeEffect,\n SearchBarProps,\n} from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport type {\n DefaultNavigatorOptions,\n Descriptor,\n NavigationHelpers,\n NavigationProp,\n ParamListBase,\n Route,\n RouteProp,\n StackActionHelpers,\n StackNavigationState,\n StackRouterOptions,\n Theme,\n} from '../native';\n\nexport type NativeStackNavigationEventMap = {\n /**\n * Event which fires when a transition animation starts.\n */\n transitionStart: { data: { closing: boolean } };\n /**\n * Event which fires when a transition animation ends.\n */\n transitionEnd: { data: { closing: boolean } };\n /**\n * Event which fires when a swipe back is canceled on iOS.\n */\n gestureCancel: { data: undefined };\n /**\n * Event which fires when screen is in sheet presentation & it's detent changes.\n *\n * In payload it caries two fields:\n *\n * * `index` - current detent index in the `sheetAllowedDetents` array,\n * * `stable` - on Android `false` value means that the user is dragging the sheet or it is settling; on iOS it is always `true`.\n */\n sheetDetentChange: { data: { index: number; stable: boolean } };\n};\n\nexport type NativeStackNavigationProp<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = string,\n NavigatorID extends string | undefined = undefined,\n> = NavigationProp<\n ParamList,\n RouteName,\n NavigatorID,\n StackNavigationState<ParamList>,\n NativeStackNavigationOptions,\n NativeStackNavigationEventMap\n> &\n StackActionHelpers<ParamList>;\n\nexport type NativeStackScreenProps<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = string,\n NavigatorID extends string | undefined = undefined,\n> = {\n navigation: NativeStackNavigationProp<ParamList, RouteName, NavigatorID>;\n route: RouteProp<ParamList, RouteName>;\n};\n\nexport type NativeStackOptionsArgs<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList = keyof ParamList,\n NavigatorID extends string | undefined = undefined,\n> = NativeStackScreenProps<ParamList, RouteName, NavigatorID> & {\n theme: Theme;\n};\n\nexport type NativeStackNavigationHelpers = NavigationHelpers<\n ParamListBase,\n NativeStackNavigationEventMap\n>;\n\n// We want it to be an empty object because navigator does not have any additional props\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type NativeStackNavigationConfig = {};\n\nexport type NativeStackScreenNativeProps = Partial<\n Omit<ScreenProps, 'children' | 'screenId' | 'activityState'>\n>;\n\nexport type NativeStackHeaderNativeProps = Partial<ScreenStackHeaderConfigProps>;\n\nexport type NativeStackNativeProps = NativeStackScreenNativeProps & {\n headerConfig?: NativeStackHeaderNativeProps;\n};\n\nexport type NativeStackHeaderProps = {\n /**\n * Options for the back button.\n */\n back?: {\n /**\n * Title of the previous screen.\n */\n title: string | undefined;\n /**\n * The `href` to use for the anchor tag on web\n */\n href: string | undefined;\n };\n /**\n * Options for the current screen.\n */\n options: NativeStackNavigationOptions;\n /**\n * Route object for the current screen.\n */\n route: Route<string>;\n /**\n * Navigation prop for the header.\n */\n navigation: NativeStackNavigationProp<ParamListBase>;\n};\n\nexport type NativeStackHeaderItemProps = {\n /**\n * Tint color for the header.\n */\n tintColor?: ColorValue;\n /**\n * Whether it's possible to navigate back in stack.\n */\n canGoBack?: boolean;\n /**\n * Header background color\n */\n backgroundColor?: ColorValue;\n};\n\nexport type NativeStackHeaderBackProps = NativeStackHeaderItemProps & {\n /**\n * Label text for the button. Usually the title of the previous screen.\n * By default, this is only shown on iOS 18.\n */\n label?: string;\n /**\n * The `href` to use for the anchor tag on web\n */\n href?: string;\n};\n\n/**\n * @deprecated Use `NativeStackHeaderBackProps` instead.\n */\nexport type NativeStackHeaderLeftProps = NativeStackHeaderBackProps;\n\n/**\n * @deprecated Use `NativeStackHeaderItemProps` instead.\n */\nexport type NativeStackHeaderRightProps = NativeStackHeaderItemProps;\n\nexport type NativeStackNavigationOptions = {\n /**\n * String that can be displayed in the header as a fallback for `headerTitle`.\n */\n title?: string;\n /**\n * Function that given `HeaderProps` returns a React Element to display as a header.\n */\n header?: (props: NativeStackHeaderProps) => React.ReactNode;\n /**\n * Whether the back button is visible in the header.\n * You can use it to show a back button alongside `headerLeft` if you have specified it.\n *\n * This will have no effect on the first screen in the stack.\n */\n headerBackVisible?: boolean;\n /**\n * Title string used by the back button on iOS.\n * Defaults to the previous scene's title.\n * On iOS the text might be shortened to \"Back\" or arrow icon depending on the available space, following native iOS behaviour.\n * See `headerBackButtonDisplayMode` to read about limitations and interactions with other props.\n * Use `headerBackButtonDisplayMode: \"minimal\"` to hide it.\n *\n * Only supported on iOS and Web.\n *\n * @platform ios, web\n */\n headerBackTitle?: string;\n /**\n * Style object for header back title. Supported properties:\n * - fontFamily\n * - fontSize\n *\n * Only supported on iOS and Web.\n *\n * @platform ios, web\n */\n headerBackTitleStyle?: StyleProp<{\n fontFamily?: string;\n fontSize?: number;\n }>;\n /**\n * Icon to display in the header as the icon in the back button.\n *\n * Defaults to back icon image for the platform\n * - A chevron on iOS\n * - An arrow on Android\n *\n * @example\n * ```js\n * headerBackIcon: {\n * type: 'image',\n * source: require('./back-icon.png'),\n * }\n * ```\n */\n headerBackIcon?: {\n type: 'image';\n source: ImageSourcePropType;\n };\n /**\n * Image to display in the header as the icon in the back button.\n *\n * @deprecated Use `headerBackIcon` instead.\n */\n headerBackImageSource?: ImageSourcePropType;\n /**\n * Style of the header when a large title is shown.\n * The large title is shown if `headerLargeTitle` is `true` and\n * the edge of any scrollable content reaches the matching edge of the header.\n *\n * Supported properties:\n * - backgroundColor\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerLargeStyle?: StyleProp<{\n backgroundColor?: ColorValue;\n }>;\n /**\n * Whether to enable header with large title which collapses to regular header on scroll.\n *\n * For large title to collapse on scroll, the content of the screen should be wrapped in a scrollable view such as `ScrollView` or `FlatList`.\n * If the scrollable area doesn't fill the screen, the large title won't collapse on scroll.\n * You also need to specify `contentInsetAdjustmentBehavior=\"automatic\"` in your `ScrollView`, `FlatList` etc.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerLargeTitleEnabled?: boolean;\n /**\n * Whether to enable header with large title which collapses to regular header on scroll.\n *\n * @deprecated Use `headerLargeTitleEnabled` instead.\n */\n headerLargeTitle?: boolean;\n /**\n * Whether drop shadow of header is visible when a large title is shown.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerLargeTitleShadowVisible?: boolean;\n /**\n * Style object for large title in header. Supported properties:\n * - fontFamily\n * - fontSize\n * - fontWeight\n * - color\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerLargeTitleStyle?: StyleProp<{\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: string;\n color?: ColorValue;\n }>;\n /**\n * Whether to show the header. The header is shown by default.\n * Setting this to `false` hides the header.\n */\n headerShown?: boolean;\n /**\n * Style object for header. Supported properties:\n * - backgroundColor\n */\n headerStyle?: StyleProp<{\n backgroundColor?: ColorValue;\n }>;\n /**\n * Whether to hide the elevation shadow (Android) or the bottom border (iOS) on the header.\n */\n headerShadowVisible?: boolean;\n /**\n * Boolean indicating whether the navigation bar is translucent.\n * Setting this to `true` makes the header absolutely positioned,\n * and changes the background color to `transparent` unless specified in `headerStyle`.\n */\n headerTransparent?: boolean;\n /**\n * Blur effect for the translucent header.\n * The `headerTransparent` option needs to be set to `true` for this to work.\n *\n * **Note:** Using both `headerBlurEffect` and `scrollEdgeEffects` (>= iOS 26) simultaneously may cause overlapping effects.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerBlurEffect?: ScreenStackHeaderConfigProps['blurEffect'];\n /**\n * Tint color for the header. Changes the color of back button and title.\n */\n headerTintColor?: ColorValue;\n /**\n * Function which returns a React Element to render as the background of the header.\n * This is useful for using backgrounds such as an image, a gradient, blur effect etc.\n * You can use this with `headerTransparent` to render content underneath a translucent header.\n */\n headerBackground?: () => React.ReactNode;\n /**\n * Function which returns a React Element to display on the left side of the header.\n * This replaces the back button. See `headerBackVisible` to show the back button along side left element.\n * Will be overriden by `headerLeftItems` on iOS.\n */\n headerLeft?: (props: NativeStackHeaderBackProps) => React.ReactNode;\n /**\n * Function which returns a React Element to display on the right side of the header.\n * Will be overriden by `headerRightItems` on iOS.\n */\n headerRight?: (props: NativeStackHeaderItemProps) => React.ReactNode;\n /**\n * Function which returns an array of items to display as on the left side of the header.\n * Overrides `headerLeft`.\n *\n * This is an unstable API and might change in the future.\n *\n * @platform ios\n */\n unstable_headerLeftItems?: (props: NativeStackHeaderItemProps) => NativeStackHeaderItem[];\n /**\n * Function which returns an array of items to display as on the right side of the header.\n * Overrides `headerRight`.\n *\n * This is an unstable API and might change in the future.\n *\n * @platform ios\n */\n unstable_headerRightItems?: (props: NativeStackHeaderItemProps) => NativeStackHeaderItem[];\n /**\n * String or a function that returns a React Element to be used by the header.\n * Defaults to screen `title` or route name.\n *\n * When a function is passed, it receives `tintColor` and`children` in the options object as an argument.\n * The title string is passed in `children`.\n *\n * Note that if you render a custom element by passing a function, animations for the title won't work.\n */\n headerTitle?:\n | string\n | ((props: {\n /**\n * The title text of the header.\n */\n children: string;\n /**\n * Tint color for the header.\n */\n tintColor?: ColorValue;\n }) => React.ReactNode);\n /**\n * How to align the the header title.\n * Defaults to `left` on platforms other than iOS.\n *\n * Not supported on iOS. It's always `center` on iOS and cannot be changed.\n */\n headerTitleAlign?: 'left' | 'center';\n /**\n * Style object for header title. Supported properties:\n * - fontFamily\n * - fontSize\n * - fontWeight\n * - color\n */\n headerTitleStyle?: StyleProp<\n Pick<TextStyle, 'fontFamily' | 'fontSize' | 'fontWeight'> & {\n color?: ColorValue;\n }\n >;\n /**\n * Options to render a native search bar.\n * You also need to specify `contentInsetAdjustmentBehavior=\"automatic\"` in your `ScrollView`, `FlatList` etc.\n * If you don't have a `ScrollView`, specify `headerTransparent: false`.\n */\n headerSearchBarOptions?: SearchBarProps;\n /**\n * Props passed to the underlying native stack implementation in `react-native-screens`.\n * Use this to configure props that are not directly exposed by Expo Router.\n *\n * > **Note**: This will override any other props set by Expo Router and may lead to unexpected behavior.\n *\n * > **Note**: This is an unstable API and may change or be removed in minor versions.\n *\n * @platform android\n * @platform ios\n */\n unstable_nativeProps?: NativeStackNativeProps;\n /**\n * Boolean indicating whether to show the menu on longPress of iOS >= 14 back button. Defaults to `true`.\n * Requires `react-native-screens` version >=3.3.0.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n headerBackButtonMenuEnabled?: boolean;\n /**\n * How the back button displays icon and title.\n *\n * Supported values:\n * - \"default\" - Displays one of the following depending on the available space: previous screen's title, generic title (e.g. 'Back') or no title (only icon).\n * - \"generic\" – Displays one of the following depending on the available space: generic title (e.g. 'Back') or no title (only icon).\n * - \"minimal\" – Always displays only the icon without a title.\n *\n * The space-aware behavior is disabled when:\n * - The iOS version is 13 or lower\n * - Custom font family or size is set (e.g. with `headerBackTitleStyle`)\n * - Back button menu is disabled (e.g. with `headerBackButtonMenuEnabled`)\n *\n * In such cases, a static title and icon are always displayed.\n *\n * Defaults to \"default\" on iOS, and \"minimal\" on other platforms.\n *\n * Only supported on iOS and Web.\n *\n * @platform ios, web\n */\n headerBackButtonDisplayMode?: ScreenStackHeaderConfigProps['backButtonDisplayMode'];\n /**\n * Whether the home indicator should prefer to stay hidden on this screen. Defaults to `false`.\n *\n * @platform ios\n */\n autoHideHomeIndicator?: boolean;\n /**\n * Whether the keyboard should hide when swiping to the previous screen. Defaults to `false`.\n *\n * @platform ios\n */\n keyboardHandlingEnabled?: boolean;\n /**\n * Sets the navigation bar color. Defaults to initial navigation bar color.\n *\n * @deprecated For all apps targeting Android SDK 35 or above edge-to-edge is enabled by default.\n * This prop is subject to removal in the future.\n * See: https://developer.android.com/about/versions/15/behavior-changes-15#ux.\n *\n * @platform android\n */\n navigationBarColor?: ColorValue;\n /**\n * Boolean indicating whether the content should be visible behind the navigation bar. Defaults to `false`.\n *\n * @deprecated For all apps targeting Android SDK 35 or above edge-to-edge is enabled by default.\n * This prop is subject to removal in the future.\n * See: https://developer.android.com/about/versions/15/behavior-changes-15#ux.\n *\n * @platform android\n */\n navigationBarTranslucent?: boolean;\n /**\n * Sets the visibility of the navigation bar. Defaults to `false`.\n *\n * @platform android\n */\n navigationBarHidden?: boolean;\n /**\n * Sets the status bar animation (similar to the `StatusBar` component).\n * On Android, setting either `fade` or `slide` will set the transition of status bar color. On iOS, this option applies to appereance animation of the status bar.\n * Requires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.\n *\n * Defaults to `fade` on iOS and `none` on Android.\n *\n * Only supported on Android and iOS.\n *\n * @platform android, ios\n */\n statusBarAnimation?: ScreenProps['statusBarAnimation'];\n /**\n * Sets the status bar color (similar to the `StatusBar` component). Defaults to initial status bar color.\n *\n * @deprecated For all apps targeting Android SDK 35 or above edge-to-edge is enabled by default.\n * This prop is subject to removal in the future.\n * See: https://developer.android.com/about/versions/15/behavior-changes-15#ux.\n *\n * @platform android\n */\n statusBarBackgroundColor?: ColorValue;\n /**\n * Whether the status bar should be hidden on this screen.\n * Requires setting `View controller-based status bar appearance -> YES` in your Info.plist file.\n *\n * Only supported on Android and iOS.\n *\n * @platform android, ios\n */\n statusBarHidden?: boolean;\n /**\n * Sets the status bar color (similar to the `StatusBar` component).\n * Requires setting `View controller-based status bar appearance -> YES` (or removing the config) in your `Info.plist` file.\n * `auto` and `inverted` are supported only on iOS. On Android, they will fallback to `light`.\n *\n * Defaults to `auto` on iOS and `light` on Android.\n *\n * Only supported on Android and iOS.\n *\n * @platform android, ios\n */\n statusBarStyle?: ScreenProps['statusBarStyle'];\n /**\n * Sets the translucency of the status bar. Defaults to `false`.\n *\n * @deprecated For all apps targeting Android SDK 35 or above edge-to-edge is enabled by default.\n * This prop is subject to removal in the future.\n * See: https://developer.android.com/about/versions/15/behavior-changes-15#ux.\n *\n * @platform android\n */\n statusBarTranslucent?: boolean;\n /**\n * Sets the direction in which you should swipe to dismiss the screen.\n * When using `vertical` option, options `fullScreenGestureEnabled: true`, `animationMatchesGesture: true` and `animation: 'slide_from_bottom'` are set by default.\n *\n * Supported values:\n * - `vertical` – dismiss screen vertically\n * - `horizontal` – dismiss screen horizontally (default)\n *\n * @platform ios\n */\n gestureDirection?: ScreenProps['swipeDirection'];\n /**\n * Style object for the scene content.\n */\n contentStyle?: StyleProp<ViewStyle>;\n /**\n * Whether the gesture to dismiss should use animation provided to `animation` prop. Defaults to `false`.\n *\n * Doesn't affect the behavior of screens presented modally.\n *\n * @platform ios\n */\n animationMatchesGesture?: boolean;\n /**\n * Whether the gesture to dismiss should work on the whole screen. The behavior depends on iOS version.\n *\n * On iOS 18 and below:\n * `false` by default. If enabled, swipe gesture will use `simple_push` transition animation by default. It can be changed\n * with `animation` & `animationMatchesGesture` props, but default iOS swipe animation is not achievable.\n *\n * On iOS 26 and up:\n * `true` by default to match new native behavior. You can still customize it with `animation` & `animationMatchesGesture` props.\n *\n * Doesn't affect the behavior of screens presented modally.\n *\n * @platform ios\n */\n fullScreenGestureEnabled?: boolean;\n /**\n * iOS 18 and below. Controls whether the full screen dismiss gesture has shadow under view during transition.\n * The gesture uses custom transition and thus doesn't have a shadow by default. When enabled, a custom shadow view\n * is added during the transition which tries to mimic the default iOS shadow. Defaults to `true`.\n *\n * This does not affect the behavior of transitions that don't use gestures, enabled by `fullScreenGestureEnabled` prop.\n *\n * @deprecated since iOS 26.\n *\n * @platform ios\n */\n fullScreenGestureShadowEnabled?: boolean;\n /**\n * Whether you can use gestures to dismiss this screen. Defaults to `true`.\n *\n * Only supported on iOS.\n *\n * @platform ios\n */\n gestureEnabled?: boolean;\n /**\n * Use it to restrict the distance from the edges of screen in which the gesture should be recognized. To be used alongside `fullScreenGestureEnabled`.\n *\n * @platform ios\n */\n gestureResponseDistance?: ScreenProps['gestureResponseDistance'];\n /**\n * The type of animation to use when this screen replaces another screen. Defaults to `pop`.\n *\n * Supported values:\n * - \"push\": the new screen will perform push animation.\n * - \"pop\": the new screen will perform pop animation.\n *\n * Only supported on iOS and Android.\n */\n animationTypeForReplace?: ScreenProps['replaceAnimation'];\n /**\n * How the screen should animate when pushed or popped.\n *\n * Supported values:\n * - \"default\": use the platform default animation\n * - \"fade\": fade screen in or out\n * - \"fade_from_bottom\" – performs a fade from bottom animation\n * - \"flip\": flip the screen, requires presentation: \"modal\" (iOS only)\n * - \"simple_push\": use the platform default animation, but without shadow and native header transition (iOS only)\n * - \"slide_from_bottom\": slide in the new screen from bottom\n * - \"slide_from_right\": slide in the new screen from right (Android only, uses default animation on iOS)\n * - \"slide_from_left\": slide in the new screen from left (Android only, uses default animation on iOS)\n * - \"ios_from_right\" - iOS like slide in animation. pushes in the new screen from right to left (Android only, resolves to default transition on iOS)\n * - \"ios_from_left\" - iOS like slide in animation. pushes in the new screen from left to right (Android only, resolves to default transition on iOS)\n * - \"none\": don't animate the screen\n *\n * Only supported on iOS and Android.\n */\n animation?: ScreenProps['stackAnimation'];\n /**\n * Duration (in milliseconds) for the following transition animations on iOS:\n * - `slide_from_bottom`\n * - `fade_from_bottom`\n * - `fade`\n * - `simple_push`\n *\n * Defaults to `500`.\n *\n * The duration is not customizable for:\n * - Screens with `default` and `flip` animations\n * - Screens with `presentation` set to `modal`, `formSheet`, `pageSheet` (regardless of animation)\n *\n * @platform ios\n */\n animationDuration?: number;\n /**\n * How should the screen be presented.\n *\n * Supported values:\n * - \"card\": the new screen will be pushed onto a stack, which means the default animation will be slide from the side on iOS, the animation on Android will vary depending on the OS version and theme.\n * - \"modal\": the new screen will be presented modally. this also allows for a nested stack to be rendered inside the screen.\n * - \"transparentModal\": the new screen will be presented modally, but in addition, the previous screen will stay so that the content below can still be seen if the screen has translucent background.\n * - \"containedModal\": will use \"UIModalPresentationCurrentContext\" modal style on iOS and will fallback to \"modal\" on Android.\n * - \"containedTransparentModal\": will use \"UIModalPresentationOverCurrentContext\" modal style on iOS and will fallback to \"transparentModal\" on Android.\n * - \"fullScreenModal\": will use \"UIModalPresentationFullScreen\" modal style on iOS and will fallback to \"modal\" on Android.\n * - \"formSheet\": will use \"UIModalPresentationFormSheet\" modal style on iOS and will fallback to \"modal\" on Android.\n * - \"pageSheet\": will use \"UIModalPresentationPageSheet\" modal style on iOS and will fallback to \"modal\" on Android.\n *\n * Only supported on iOS and Android.\n */\n presentation?: Exclude<ScreenProps['stackPresentation'], 'push'> | 'card';\n /**\n * Describes heights where a sheet can rest.\n * Works only when `presentation` is set to `formSheet`.\n *\n * Heights should be described as fraction (a number from `[0, 1]` interval) of screen height / maximum detent height.\n * You can pass an array of ascending values each defining allowed sheet detent. iOS accepts any number of detents,\n * while **Android is limited to three**.\n *\n * There is also possibility to specify `fitToContents` literal, which intents to set the sheet height\n * to the height of its contents.\n *\n * Note that the array **must** be sorted in ascending order. This invariant is verified only in developement mode,\n * where violation results in error.\n *\n * **Android is limited to up 3 values in the array** -- any surplus values, beside first three are ignored.\n *\n * Defaults to `[1.0]`.\n */\n sheetAllowedDetents?: number[] | 'fitToContents';\n /**\n * Integer value describing elevation of the sheet, impacting shadow on the top edge of the sheet.\n *\n * Not dynamic - changing it after the component is rendered won't have an effect.\n *\n * Defaults to `24`.\n *\n * @platform Android\n */\n sheetElevation?: number;\n /**\n * Whether the sheet should expand to larger detent when scrolling.\n * Works only when `presentation` is set to `formSheet`.\n * Defaults to `true`.\n *\n * @platform ios\n */\n sheetExpandsWhenScrolledToEdge?: boolean;\n /**\n * The corner radius that the sheet will try to render with.\n * Works only when `presentation` is set to `formSheet`.\n *\n * If set to non-negative value it will try to render sheet with provided radius, else it will apply system default.\n *\n * If left unset system default is used.\n */\n sheetCornerRadius?: number;\n /**\n * Index of the detent the sheet should expand to after being opened.\n * Works only when `stackPresentation` is set to `formSheet`.\n *\n * If the specified index is out of bounds of `sheetAllowedDetents` array, in dev environment more error will be thrown,\n * in production the value will be reset to default value.\n *\n * Additionaly there is `last` value available, when set the sheet will expand initially to last (largest) detent.\n *\n * Defaults to `0` - which represents first detent in the detents array.\n */\n sheetInitialDetentIndex?: number | 'last';\n /**\n * Boolean indicating whether the sheet shows a grabber at the top.\n * Works only when `presentation` is set to `formSheet`.\n * Defaults to `false`.\n *\n * @platform ios\n */\n sheetGrabberVisible?: boolean;\n /**\n * The largest sheet detent for which a view underneath won't be dimmed.\n * Works only when `presentation` is set to `formSheet`.\n *\n * This prop can be set to an number, which indicates index of detent in `sheetAllowedDetents` array for which\n * there won't be a dimming view beneath the sheet.\n *\n * Additionaly there are following options available:\n *\n * * `none` - there will be dimming view for all detents levels,\n * * `last` - there won't be a dimming view for any detent level.\n *\n * @remark\n * On iOS, the native implementation might resize the the sheet w/o explicitly changing the detent level, e.g. in case of keyboard appearance.\n * In case after such resize the sheet exceeds height for which in regular scenario a dimming view would be applied - it will be applied,\n * even if the detent has not effectively been changed.\n *\n * Defaults to `none`, indicating that the dimming view should be always present.\n */\n sheetLargestUndimmedDetentIndex?: number | 'none' | 'last';\n /**\n * Whether the sheet content should be rendered behind the Status Bar or display cutouts.\n *\n * When set to `true`, the sheet will extend to the physical edges of the stack,\n * allowing content to be visible behind the status bar or display cutouts.\n * Detent ratios in sheetAllowedDetents will be measured relative to the full stack height.\n *\n * When set to `false`, the sheet's layout will be constrained by the inset from the top\n * and the detent ratios will then be measured relative to the adjusted height (excluding the top inset).\n * This means that sheetAllowedDetents will result in different sheet heights depending on this prop.\n *\n * Defaults to `false`.\n *\n * @platform android\n */\n sheetShouldOverflowTopInset?: boolean;\n /**\n * Whether the default native animation should be used when the sheet's with\n * `fitToContents` content size changes.\n *\n * When set to `true`, the sheet uses internal logic to synchronize size updates and\n * translation animations during entry, exit, or content updates. This ensures a smooth\n * transition for standard, static content mounting/unmounting.\n *\n * When set to `false`, the internal animation and translation logic is ignored. This\n * allows the sheet to adjust its size dynamically based on the current dimensions of\n * the content provided by the developer, allowing implementing custom resizing animations.\n *\n * Defaults to `true`.\n *\n * @platform android\n */\n sheetResizeAnimationEnabled?: boolean;\n /**\n * The display orientation to use for the screen.\n *\n * Supported values:\n * - \"default\" - resolves to \"all\" without \"portrait_down\" on iOS. On Android, this lets the system decide the best orientation.\n * - \"all\": all orientations are permitted.\n * - \"portrait\": portrait orientations are permitted.\n * - \"portrait_up\": right-side portrait orientation is permitted.\n * - \"portrait_down\": upside-down portrait orientation is permitted.\n * - \"landscape\": landscape orientations are permitted.\n * - \"landscape_left\": landscape-left orientation is permitted.\n * - \"landscape_right\": landscape-right orientation is permitted.\n *\n * Only supported on iOS and Android.\n */\n orientation?: ScreenProps['screenOrientation'];\n /**\n * Whether inactive screens should be suspended from re-rendering. Defaults to `false`.\n * Defaults to `true` when `enableFreeze()` is run at the top of the application.\n * Requires `react-native-screens` version >=3.16.0.\n *\n * Only supported on iOS and Android.\n */\n freezeOnBlur?: boolean;\n /**\n * Configures the scroll edge effect for the _content ScrollView_ (the ScrollView that is present in first descendants chain of the Screen).\n * Depending on values set, it will blur the scrolling content below certain UI elements (header items, search bar)\n * for the specified edge of the ScrollView.\n *\n * When set in nested containers, i.e. Native Stack inside Native Bottom Tabs, or the other way around,\n * the ScrollView will use only the innermost one's config.\n *\n * **Note:** Using both `headerBlurEffect` and `scrollEdgeEffects` (>= iOS 26) simultaneously may cause overlapping effects.\n *\n * Edge effects can be configured for each edge separately. The following values are currently supported:\n *\n * - `automatic` - the automatic scroll edge effect style,\n * - `hard` - a scroll edge effect with a hard cutoff and dividing line,\n * - `soft` - a soft-edged scroll edge effect,\n * - `hidden` - no scroll edge effect.\n *\n * Defaults to `automatic` for each edge.\n *\n * @platform ios\n *\n * @supported iOS 26 or higher\n */\n scrollEdgeEffects?: {\n bottom?: ScrollEdgeEffect;\n left?: ScrollEdgeEffect;\n right?: ScrollEdgeEffect;\n top?: ScrollEdgeEffect;\n };\n /**\n * Footer component that can be used alongside formSheet stack presentation style.\n *\n * This option is provided, because due to implementation details it might be problematic\n * to implement such layout with JS-only code.\n *\n * Note that this prop is marked as unstable and might be subject of breaking changes,\n * including removal, in particular when we find solution that will make implementing it with JS\n * straightforward.\n *\n * @platform android\n */\n unstable_sheetFooter?: () => React.ReactNode;\n};\n\ntype PlatformIconShared = {\n /**\n * - `image` - Use a local image as the icon.\n */\n type: 'image';\n /**\n * Image source to use as the icon.\n * - Local image: `require('./path/to/image.png')`\n * - Drawable resource or xcasset: `{ uri: 'image_name' }`\n */\n source: ImageSourcePropType;\n /**\n * Whether to apply tint color to the icon.\n * Defaults to `true`.\n *\n * @platform ios\n */\n tinted?: boolean;\n};\n\ntype PlatformIconIOSSfSymbol = {\n /**\n * - `sfSymbol` - Use an SF Symbol as the icon on iOS.\n */\n type: 'sfSymbol';\n /**\n * Name of the SF Symbol to use as the icon.\n */\n name: SFSymbol;\n};\n\ntype PlatformIconIOS = PlatformIconIOSSfSymbol | PlatformIconShared;\n\ntype SharedHeaderItem = {\n /**\n * Label of the item.\n */\n label: string;\n /**\n * Style for the item label.\n */\n labelStyle?: {\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: string;\n color?: ColorValue;\n };\n /**\n * Icon for the item\n */\n icon?: PlatformIconIOS;\n /**\n * The variant of the item.\n * \"prominent\" only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/style-swift.property\n */\n variant?: 'plain' | 'done' | 'prominent';\n /**\n * The tint color to apply to the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor\n */\n tintColor?: ColorValue;\n /**\n * Whether the item is in a disabled state.\n */\n disabled?: boolean;\n /**\n * The width of the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/width\n */\n width?: number;\n /**\n * Whether the background this item may share with other items in the bar should be hidden.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground\n */\n hidesSharedBackground?: boolean;\n /**\n * Whether this item can share a background with other items.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/sharesbackground\n */\n sharesBackground?: boolean;\n /**\n * An identifier used to match items across transitions.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/identifier\n */\n identifier?: string;\n /**\n * A badge to display on a item.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitembadge\n */\n badge?: {\n /**\n * The text to display in the badge.\n */\n value: number | string;\n /**\n * Style of the badge.\n */\n style?: {\n color?: ColorValue;\n backgroundColor?: ColorValue;\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: string;\n };\n };\n /**\n * Accessibility label for the item.\n */\n accessibilityLabel?: string;\n /**\n * Accessibility hint for the item.\n */\n accessibilityHint?: string;\n};\n\n/**\n * A button item in the header.\n */\nexport type NativeStackHeaderItemButton = SharedHeaderItem & {\n /**\n * Type of the item.\n */\n type: 'button';\n /**\n * Function to call when the item is pressed.\n */\n onPress: () => void;\n /**\n * Whether the item is in a selected state.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/isselected\n */\n selected?: boolean;\n};\n\n/**\n * An action item in a menu.\n */\nexport type NativeStackHeaderItemMenuAction = {\n type: 'action';\n /**\n * Label for the menu item.\n */\n label: string;\n /**\n * The secondary text displayed alongside the label of the menu item.\n */\n description?: string;\n /**\n * Icon for the menu item.\n */\n icon?: PlatformIconIOS;\n /**\n * Function to call when the menu item is pressed.\n */\n onPress: () => void;\n /**\n * The state of an action- or command-based menu item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/state\n */\n state?: 'on' | 'off' | 'mixed';\n /**\n * Whether to apply disabled style to the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/disabled\n */\n disabled?: boolean;\n /**\n * Whether to apply destructive style to the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive\n */\n destructive?: boolean;\n /**\n * Whether to apply hidden style to the item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/hidden\n */\n hidden?: boolean;\n /**\n * Whether to keep the menu presented after firing the element’s action.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/keepsmenupresented\n */\n keepsMenuPresented?: boolean;\n /**\n * An elaborated title that explains the purpose of the action.\n *\n * On iOS, the system displays this title in the discoverability heads-up display (HUD).\n * If this is not set, the HUD displays the title property.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uiaction/discoverabilitytitle\n */\n discoverabilityLabel?: string;\n};\n\n/**\n * A submenu item that contains other menu items.\n */\nexport type NativeStackHeaderItemMenuSubmenu = {\n type: 'submenu';\n /**\n * Label for the submenu item.\n */\n label: string;\n /**\n * Icon for the submenu item.\n */\n icon?: PlatformIconIOS;\n /**\n * Whether the menu is displayed inline with the parent menu.\n * By default, submenus are displayed after expanding the parent menu item.\n * Inline menus are displayed as part of the parent menu as a section.\n *\n * Defaults to `false`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline\n */\n inline?: boolean;\n /**\n * How the submenu items are displayed.\n * - `default`: menu items are displayed normally.\n * - `palette`: menu items are displayed in a horizontal row.\n *\n * Defaults to `default`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette\n */\n layout?: 'default' | 'palette';\n /**\n * Whether to apply destructive style to the menu item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive\n */\n destructive?: boolean;\n /**\n * Whether multiple items in the submenu can be selected, i.e. in \"on\" state.\n *\n * Defaults to `false`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/singleselection\n */\n multiselectable?: boolean;\n /**\n * Array of menu items (actions or submenus).\n */\n items: NativeStackHeaderItemMenu['menu']['items'];\n};\n\n/**\n * An item that shows a menu when pressed.\n */\nexport type NativeStackHeaderItemMenu = SharedHeaderItem & {\n type: 'menu';\n /**\n * Whether the menu is a selection menu.\n * Tapping an item in a selection menu will add a checkmark to the selected item.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/changesselectionasprimaryaction\n */\n changesSelectionAsPrimaryAction?: boolean;\n /**\n * Menu for the item.\n */\n menu: {\n /**\n * Optional title to show on top of the menu.\n */\n title?: string;\n /**\n * Whether multiple items in the submenu can be selected, i.e. in \"on\" state.\n *\n * Defaults to `false`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/singleselection\n */\n multiselectable?: boolean;\n /**\n * How the submenu items are displayed.\n * - `default`: menu items are displayed normally.\n * - `palette`: menu items are displayed in a horizontal row.\n *\n * Defaults to `default`.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette\n */\n layout?: 'default' | 'palette';\n /**\n * Array of menu items (actions or submenus).\n */\n items: (NativeStackHeaderItemMenuAction | NativeStackHeaderItemMenuSubmenu)[];\n };\n};\n\n/**\n * An item to add spacing between other items in the header.\n */\nexport type NativeStackHeaderItemSpacing = {\n type: 'spacing';\n /**\n * The amount of spacing to add.\n */\n spacing: number;\n};\n\n/**\n * A custom item to display any React Element in the header.\n */\nexport type NativeStackHeaderItemCustom = {\n type: 'custom';\n /**\n * A React Element to display as the item.\n */\n element: React.ReactElement;\n /**\n * Whether the background this item may share with other items in the bar should be hidden.\n * Only available from iOS 26.0 and later.\n *\n * Read more: https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground\n */\n hidesSharedBackground?: boolean;\n};\n\n/**\n * An item that can be displayed in the header.\n * It can be a button, a menu, spacing, or a custom element.\n *\n * On iOS 26, when showing items on the right side of the header,\n * if the items don't fit the available space, they will be collapsed into a menu automatically.\n * Items with `type: 'custom'` will not be included in this automatic collapsing behavior.\n */\nexport type NativeStackHeaderItem =\n | NativeStackHeaderItemButton\n | NativeStackHeaderItemMenu\n | NativeStackHeaderItemSpacing\n | NativeStackHeaderItemCustom;\n\nexport type NativeStackNavigatorProps = DefaultNavigatorOptions<\n ParamListBase,\n string | undefined,\n StackNavigationState<ParamListBase>,\n NativeStackNavigationOptions,\n NativeStackNavigationEventMap,\n NativeStackNavigationProp<ParamListBase>\n> &\n StackRouterOptions &\n NativeStackNavigationConfig;\n\nexport type NativeStackDescriptor = Descriptor<\n NativeStackNavigationOptions,\n NativeStackNavigationProp<ParamListBase>,\n RouteProp<ParamListBase>\n>;\n\nexport type NativeStackDescriptorMap = {\n [key: string]: NativeStackDescriptor;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NativeStackView.native.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/NativeStackView.native.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAElB,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EAEd,KAAK,oBAAoB,EAG1B,MAAM,cAAc,CAAC;AAgatB,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC3C,UAAU,EAAE,4BAA4B,CAAC;IACzC,WAAW,EAAE,wBAAwB,CAAC;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,OAAO,KAAK,qBAAqB,CAAC;CAC5F,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,KAAK,2CA8HlF"}
1
+ {"version":3,"file":"NativeStackView.native.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/NativeStackView.native.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAElB,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EAEd,KAAK,oBAAoB,EAG1B,MAAM,cAAc,CAAC;AAmatB,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC3C,UAAU,EAAE,4BAA4B,CAAC;IACzC,WAAW,EAAE,wBAAwB,CAAC;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,OAAO,KAAK,qBAAqB,CAAC;CAC5F,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,KAAK,2CA8HlF"}
@@ -57,7 +57,8 @@ const useNativeDriver = react_native_1.Platform.OS !== 'web';
57
57
  const SceneView = ({ index, focused, shouldFreeze, descriptor, previousDescriptor, nextDescriptor, isPresentationModal, isPreloaded, onWillDisappear, onWillAppear, onAppear, onDisappear, onDismissed, onHeaderBackButtonClicked, onNativeDismissCancelled, onGestureCancel, onSheetDetentChanged, }) => {
58
58
  const { route, navigation, options, render } = descriptor;
59
59
  let { animation, animationMatchesGesture, presentation = isPresentationModal ? 'modal' : 'card', fullScreenGestureEnabled, } = options;
60
- const { animationDuration, animationTypeForReplace = 'push', fullScreenGestureShadowEnabled = true, gestureEnabled, gestureDirection = presentation === 'card' ? 'horizontal' : 'vertical', gestureResponseDistance, header, headerBackButtonMenuEnabled, headerShown, headerBackground, headerTransparent, autoHideHomeIndicator, keyboardHandlingEnabled, navigationBarColor, navigationBarTranslucent, navigationBarHidden, orientation, sheetAllowedDetents = [1.0], sheetLargestUndimmedDetentIndex = -1, sheetGrabberVisible = false, sheetCornerRadius = -1.0, sheetElevation = 24, sheetExpandsWhenScrolledToEdge = true, sheetInitialDetentIndex = 0, sheetShouldOverflowTopInset = false, sheetResizeAnimationEnabled = true, statusBarAnimation, statusBarHidden, statusBarStyle, statusBarTranslucent, statusBarBackgroundColor, unstable_sheetFooter, scrollEdgeEffects, freezeOnBlur, contentStyle, } = options;
60
+ const { animationDuration, animationTypeForReplace = 'push', fullScreenGestureShadowEnabled = true, gestureEnabled, gestureDirection = presentation === 'card' ? 'horizontal' : 'vertical', gestureResponseDistance, header, headerBackButtonMenuEnabled, headerShown, headerBackground, headerTransparent, autoHideHomeIndicator, keyboardHandlingEnabled, navigationBarColor, navigationBarTranslucent, navigationBarHidden, orientation, sheetAllowedDetents = [1.0], sheetLargestUndimmedDetentIndex = -1, sheetGrabberVisible = false, sheetCornerRadius = -1.0, sheetElevation = 24, sheetExpandsWhenScrolledToEdge = true, sheetInitialDetentIndex = 0, sheetShouldOverflowTopInset = false, sheetResizeAnimationEnabled = true, statusBarAnimation, statusBarHidden, statusBarStyle, statusBarTranslucent, statusBarBackgroundColor, unstable_sheetFooter, scrollEdgeEffects, freezeOnBlur, contentStyle, unstable_nativeProps, } = options;
61
+ const screenNativeProps = unstable_nativeProps;
61
62
  if (gestureDirection === 'vertical' && react_native_1.Platform.OS === 'ios') {
62
63
  // for `vertical` direction to work, we need to set `fullScreenGestureEnabled` to `true`
63
64
  // so the screen can be dismissed from any point on screen.
@@ -220,7 +221,7 @@ const SceneView = ({ index, focused, shouldFreeze, descriptor, previousDescripto
220
221
  backgroundColor: colors.background,
221
222
  },
222
223
  contentStyle,
223
- ], headerConfig: headerConfig, unstable_sheetFooter: unstable_sheetFooter,
224
+ ], unstable_sheetFooter: unstable_sheetFooter, ...screenNativeProps, headerConfig: headerConfig,
224
225
  // When ts-expect-error is added, it affects all the props below it
225
226
  // So we keep any props that need it at the end
226
227
  // Otherwise invalid props may not be caught by TypeScript
@@ -1 +1 @@
1
- {"version":3,"file":"NativeStackView.native.js","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/NativeStackView.native.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { use } from 'react';\nimport { Animated, Platform, StatusBar, StyleSheet, useAnimatedValue, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport {\n compatibilityFlags,\n type ScreenProps,\n ScreenStack,\n ScreenStackItem,\n} from 'react-native-screens';\n\nimport {\n getDefaultHeaderHeight,\n getHeaderTitle,\n HeaderBackContext,\n HeaderHeightContext,\n HeaderShownContext,\n SafeAreaProviderCompat,\n useFrameSize,\n} from '../../elements';\nimport type {\n NativeStackDescriptor,\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n} from '../types';\nimport { useHeaderConfigProps } from './useHeaderConfigProps';\nimport {\n NavigationProvider,\n type ParamListBase,\n type RouteProp,\n StackActions,\n type StackNavigationState,\n usePreventRemoveContext,\n useTheme,\n} from '../../native';\nimport { debounce } from '../utils/debounce';\nimport { getModalRouteKeys } from '../utils/getModalRoutesKeys';\nimport { AnimatedHeaderHeightContext } from '../utils/useAnimatedHeaderHeight';\nimport { useDismissedRouteError } from '../utils/useDismissedRouteError';\nimport { useInvalidPreventRemoveError } from '../utils/useInvalidPreventRemoveError';\n\nconst ANDROID_DEFAULT_HEADER_HEIGHT = 56;\n\nfunction isFabric() {\n return 'nativeFabricUIManager' in global;\n}\n\ntype SceneViewProps = {\n index: number;\n focused: boolean;\n shouldFreeze: boolean;\n descriptor: NativeStackDescriptor;\n previousDescriptor?: NativeStackDescriptor;\n nextDescriptor?: NativeStackDescriptor;\n isPresentationModal?: boolean;\n isPreloaded?: boolean;\n onWillDisappear: () => void;\n onWillAppear: () => void;\n onAppear: () => void;\n onDisappear: () => void;\n onDismissed: ScreenProps['onDismissed'];\n onHeaderBackButtonClicked: ScreenProps['onHeaderBackButtonClicked'];\n onNativeDismissCancelled: ScreenProps['onDismissed'];\n onGestureCancel: ScreenProps['onGestureCancel'];\n onSheetDetentChanged: ScreenProps['onSheetDetentChanged'];\n};\n\nconst useNativeDriver = Platform.OS !== 'web';\n\nconst SceneView = ({\n index,\n focused,\n shouldFreeze,\n descriptor,\n previousDescriptor,\n nextDescriptor,\n isPresentationModal,\n isPreloaded,\n onWillDisappear,\n onWillAppear,\n onAppear,\n onDisappear,\n onDismissed,\n onHeaderBackButtonClicked,\n onNativeDismissCancelled,\n onGestureCancel,\n onSheetDetentChanged,\n}: SceneViewProps) => {\n const { route, navigation, options, render } = descriptor;\n\n let {\n animation,\n animationMatchesGesture,\n presentation = isPresentationModal ? 'modal' : 'card',\n fullScreenGestureEnabled,\n } = options;\n\n const {\n animationDuration,\n animationTypeForReplace = 'push',\n fullScreenGestureShadowEnabled = true,\n gestureEnabled,\n gestureDirection = presentation === 'card' ? 'horizontal' : 'vertical',\n gestureResponseDistance,\n header,\n headerBackButtonMenuEnabled,\n headerShown,\n headerBackground,\n headerTransparent,\n autoHideHomeIndicator,\n keyboardHandlingEnabled,\n navigationBarColor,\n navigationBarTranslucent,\n navigationBarHidden,\n orientation,\n sheetAllowedDetents = [1.0],\n sheetLargestUndimmedDetentIndex = -1,\n sheetGrabberVisible = false,\n sheetCornerRadius = -1.0,\n sheetElevation = 24,\n sheetExpandsWhenScrolledToEdge = true,\n sheetInitialDetentIndex = 0,\n sheetShouldOverflowTopInset = false,\n sheetResizeAnimationEnabled = true,\n statusBarAnimation,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n statusBarBackgroundColor,\n unstable_sheetFooter,\n scrollEdgeEffects,\n freezeOnBlur,\n contentStyle,\n } = options;\n\n if (gestureDirection === 'vertical' && Platform.OS === 'ios') {\n // for `vertical` direction to work, we need to set `fullScreenGestureEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `animationMatchesGesture` needs to be set to `true` so the `animation` 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 (fullScreenGestureEnabled === undefined) {\n fullScreenGestureEnabled = true;\n }\n\n if (animationMatchesGesture === undefined) {\n animationMatchesGesture = true;\n }\n\n if (animation === undefined) {\n animation = 'slide_from_bottom';\n }\n }\n\n // workaround for rn-screens where gestureDirection has to be set on both\n // current and previous screen - software-mansion/react-native-screens/pull/1509\n const nextGestureDirection = nextDescriptor?.options.gestureDirection;\n const gestureDirectionOverride =\n nextGestureDirection != null ? nextGestureDirection : gestureDirection;\n\n if (index === 0) {\n // first screen should always be treated as `card`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `card`\n presentation = 'card';\n }\n\n const { colors } = useTheme();\n const insets = useSafeAreaInsets();\n\n // `modal`, `formSheet` and `pageSheet` presentations do not take whole screen, so should not take the inset.\n const isModal =\n presentation === 'modal' || presentation === 'formSheet' || presentation === 'pageSheet';\n\n // Modals are fullscreen in landscape only on iPhone\n const isIPhone = Platform.OS === 'ios' && !(Platform.isPad || Platform.isTV);\n\n const isParentHeaderShown = use(HeaderShownContext);\n const parentHeaderHeight = use(HeaderHeightContext);\n const parentHeaderBack = use(HeaderBackContext);\n\n const isLandscape = useFrameSize((frame) => frame.width > frame.height);\n\n const topInset =\n isParentHeaderShown || (Platform.OS === 'ios' && isModal) || (isIPhone && isLandscape)\n ? 0\n : insets.top;\n\n const defaultHeaderHeight = useFrameSize((frame) =>\n Platform.select({\n // FIXME: Currently screens isn't using Material 3\n // So our `getDefaultHeaderHeight` doesn't return the correct value\n // So we hardcode the value here for now until screens is updated\n android: ANDROID_DEFAULT_HEADER_HEIGHT + topInset,\n default: getDefaultHeaderHeight(frame, isModal, topInset),\n })\n );\n\n const { preventedRoutes } = usePreventRemoveContext();\n\n const [headerHeight, setHeaderHeight] = React.useState(defaultHeaderHeight);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const setHeaderHeightDebounced = React.useCallback(\n // Debounce the header height updates to avoid excessive re-renders\n debounce(setHeaderHeight, 100),\n []\n );\n\n const hasCustomHeader = header != null;\n\n const usesNewAndroidHeaderHeightImplementation =\n 'usesNewAndroidHeaderHeightImplementation' in compatibilityFlags &&\n compatibilityFlags['usesNewAndroidHeaderHeightImplementation'] === true;\n\n let headerHeightCorrectionOffset = 0;\n\n if (Platform.OS === 'android' && !hasCustomHeader && !usesNewAndroidHeaderHeightImplementation) {\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n\n // On Android, the native header height is not correctly calculated\n // It includes status bar height even if statusbar is not translucent\n // And the statusbar value itself doesn't match the actual status bar height\n // So we subtract the bogus status bar height and add the actual top inset\n headerHeightCorrectionOffset = -statusBarHeight + topInset;\n }\n\n const rawAnimatedHeaderHeight = useAnimatedValue(defaultHeaderHeight);\n const animatedHeaderHeight = React.useMemo(\n () => Animated.add<number>(rawAnimatedHeaderHeight, headerHeightCorrectionOffset),\n [headerHeightCorrectionOffset, rawAnimatedHeaderHeight]\n );\n\n // During the very first render topInset is > 0 when running\n // in non edge-to-edge mode on Android, while on every consecutive render\n // topInset === 0, causing header content to jump, as we add padding on the first frame,\n // just to remove it in next one. To prevent this, when statusBarTranslucent is set,\n // we apply additional padding in header only if its true.\n // For more details see: https://github.com/react-navigation/react-navigation/pull/12014\n const headerTopInsetEnabled =\n typeof statusBarTranslucent === 'boolean' ? statusBarTranslucent : topInset !== 0;\n\n const canGoBack = previousDescriptor != null || parentHeaderBack != null;\n const backTitle = previousDescriptor\n ? getHeaderTitle(previousDescriptor.options, previousDescriptor.route.name)\n : parentHeaderBack?.title;\n\n const headerBack = React.useMemo(() => {\n if (canGoBack) {\n return {\n href: undefined, // No href needed for native\n title: backTitle,\n };\n }\n\n return undefined;\n }, [canGoBack, backTitle]);\n\n const isRemovePrevented = preventedRoutes[route.key]?.preventRemove;\n\n const headerConfig = useHeaderConfigProps({\n ...options,\n route,\n headerBackButtonMenuEnabled:\n isRemovePrevented !== undefined ? !isRemovePrevented : headerBackButtonMenuEnabled,\n headerBackTitle: options.headerBackTitle !== undefined ? options.headerBackTitle : undefined,\n headerHeight,\n headerShown: header !== undefined ? false : headerShown,\n headerTopInsetEnabled,\n headerTransparent,\n headerBack,\n });\n\n const onHeaderHeightChange = hasCustomHeader\n ? // If we have a custom header, don't use native header height\n undefined\n : // On Fabric, there's a bug where native event drivers for Animated objects\n // are created after the first notifications about the header height\n // from the native side, `onHeaderHeightChange` event does not notify\n // `animatedHeaderHeight` about initial values on appearing screens at the moment.\n Animated.event(\n [\n {\n nativeEvent: {\n headerHeight: rawAnimatedHeaderHeight,\n },\n },\n ],\n {\n useNativeDriver,\n listener: (e) => {\n if (\n e.nativeEvent &&\n typeof e.nativeEvent === 'object' &&\n 'headerHeight' in e.nativeEvent &&\n typeof e.nativeEvent.headerHeight === 'number'\n ) {\n const headerHeight = e.nativeEvent.headerHeight;\n\n // Only debounce if header has large title or search bar\n // As it's the only case where the header height can change frequently\n const doesHeaderAnimate =\n Platform.OS === 'ios' &&\n (options.headerLargeTitleEnabled || options.headerSearchBarOptions);\n\n if (doesHeaderAnimate) {\n setHeaderHeightDebounced(headerHeight);\n } else {\n if (\n Platform.OS === 'android' &&\n headerHeight !== 0 &&\n // On some devices, height maybe slightly off (e.g. 56.17 instead of 56)\n Math.round(headerHeight) <= ANDROID_DEFAULT_HEADER_HEIGHT\n ) {\n // FIXME: On Android, events may get delivered out-of-order\n // https://github.com/facebook/react-native/issues/54636\n // We seem to get header height without status bar height first,\n // and then the correct height with status bar height included\n // But due to out-of-order delivery, we may get the correct height first\n // and then the one without status bar height\n // This is hack to include status bar height if it's not already included\n // It only works because header height doesn't change dynamically on Android\n setHeaderHeight(headerHeight + insets.top);\n } else {\n setHeaderHeight(headerHeight);\n }\n }\n }\n },\n }\n );\n\n return (\n <NavigationProvider route={route} navigation={navigation}>\n <ScreenStackItem\n screenId={route.key}\n activityState={isPreloaded ? 0 : 2}\n style={StyleSheet.absoluteFill}\n aria-hidden={!focused}\n customAnimationOnSwipe={animationMatchesGesture}\n fullScreenSwipeEnabled={fullScreenGestureEnabled}\n fullScreenSwipeShadowEnabled={fullScreenGestureShadowEnabled}\n freezeOnBlur={freezeOnBlur}\n gestureEnabled={\n Platform.OS === 'android'\n ? // This prop enables handling of system back gestures on Android\n // Since we handle them in JS side, we disable this\n false\n : gestureEnabled\n }\n homeIndicatorHidden={autoHideHomeIndicator}\n hideKeyboardOnSwipe={keyboardHandlingEnabled}\n navigationBarColor={navigationBarColor}\n navigationBarTranslucent={navigationBarTranslucent}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={animationTypeForReplace}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n stackAnimation={animation}\n screenOrientation={orientation}\n sheetAllowedDetents={sheetAllowedDetents}\n sheetLargestUndimmedDetentIndex={sheetLargestUndimmedDetentIndex}\n sheetGrabberVisible={sheetGrabberVisible}\n sheetInitialDetentIndex={sheetInitialDetentIndex}\n sheetCornerRadius={sheetCornerRadius}\n sheetElevation={sheetElevation}\n sheetExpandsWhenScrolledToEdge={sheetExpandsWhenScrolledToEdge}\n sheetShouldOverflowTopInset={sheetShouldOverflowTopInset}\n sheetDefaultResizeAnimationEnabled={sheetResizeAnimationEnabled}\n statusBarAnimation={statusBarAnimation}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarColor={statusBarBackgroundColor}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={gestureDirectionOverride}\n transitionDuration={animationDuration}\n onWillAppear={onWillAppear}\n onWillDisappear={onWillDisappear}\n onAppear={onAppear}\n onDisappear={onDisappear}\n onDismissed={onDismissed}\n onGestureCancel={onGestureCancel}\n onSheetDetentChanged={onSheetDetentChanged}\n gestureResponseDistance={gestureResponseDistance}\n nativeBackButtonDismissalEnabled={false} // on Android\n onHeaderBackButtonClicked={onHeaderBackButtonClicked}\n preventNativeDismiss={isRemovePrevented} // on iOS\n scrollEdgeEffects={{\n bottom: scrollEdgeEffects?.bottom ?? 'automatic',\n top: scrollEdgeEffects?.top ?? 'automatic',\n left: scrollEdgeEffects?.left ?? 'automatic',\n right: scrollEdgeEffects?.right ?? 'automatic',\n }}\n onNativeDismissCancelled={onNativeDismissCancelled}\n onHeaderHeightChange={onHeaderHeightChange}\n contentStyle={[\n presentation !== 'transparentModal' &&\n presentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n headerConfig={headerConfig}\n unstable_sheetFooter={unstable_sheetFooter}\n // When ts-expect-error is added, it affects all the props below it\n // So we keep any props that need it at the end\n // Otherwise invalid props may not be caught by TypeScript\n shouldFreeze={shouldFreeze}>\n <AnimatedHeaderHeightContext.Provider value={animatedHeaderHeight}>\n <HeaderHeightContext.Provider\n value={headerShown !== false ? headerHeight : (parentHeaderHeight ?? 0)}>\n {headerBackground != null ? (\n /**\n * To show a custom header background, we render it at the top of the screen below the header\n * The header also needs to be positioned absolutely (with `translucent` style)\n */\n <View\n style={[\n styles.background,\n headerTransparent ? styles.translucent : null,\n { height: headerHeight },\n ]}>\n {headerBackground()}\n </View>\n ) : null}\n {header != null && headerShown !== false ? (\n <View\n onLayout={(e) => {\n const headerHeight = e.nativeEvent.layout.height;\n\n setHeaderHeight(headerHeight);\n rawAnimatedHeaderHeight.setValue(headerHeight);\n }}\n style={[styles.header, headerTransparent ? styles.absolute : null]}>\n {header({\n back: headerBack,\n options,\n route,\n navigation,\n })}\n </View>\n ) : null}\n <HeaderShownContext.Provider value={isParentHeaderShown || headerShown !== false}>\n <HeaderBackContext.Provider value={headerBack}>{render()}</HeaderBackContext.Provider>\n </HeaderShownContext.Provider>\n </HeaderHeightContext.Provider>\n </AnimatedHeaderHeightContext.Provider>\n </ScreenStackItem>\n </NavigationProvider>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n describe: (route: RouteProp<ParamListBase>, placeholder: boolean) => NativeStackDescriptor;\n};\n\nexport function NativeStackView({ state, navigation, descriptors, describe }: Props) {\n const { colors } = useTheme();\n const { setNextDismissedKey } = useDismissedRouteError(state);\n\n useInvalidPreventRemoveError(descriptors);\n\n const modalRouteKeys = getModalRouteKeys(state.routes, descriptors);\n\n const preloadedDescriptors = state.preloadedRoutes.reduce<NativeStackDescriptorMap>(\n (acc, route) => {\n acc[route.key] = acc[route.key] || describe(route, true);\n return acc;\n },\n {}\n );\n\n return (\n <SafeAreaProviderCompat>\n <ScreenStack\n nativeContainerStyle={{ backgroundColor: colors.background }}\n style={styles.container}>\n {state.routes.concat(state.preloadedRoutes).map((route, index) => {\n const descriptor = (descriptors[route.key] ?? preloadedDescriptors[route.key])!;\n const isFocused = state.index === index;\n const isBelowFocused = state.index - 1 === index;\n const previousKey = state.routes[index - 1]?.key;\n const nextKey = state.routes[index + 1]?.key;\n const previousDescriptor = previousKey ? descriptors[previousKey] : undefined;\n const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;\n\n const isModal = modalRouteKeys.includes(route.key);\n const isModalOnIos = isModal && Platform.OS === 'ios';\n\n const isPreloaded =\n preloadedDescriptors[route.key] !== undefined && descriptors[route.key] === undefined;\n\n // On Fabric, when screen is frozen, animated and reanimated values are not updated\n // due to component being unmounted. To avoid this, we don't freeze the previous screen there\n const shouldFreeze = isFabric()\n ? !isPreloaded && !isFocused && !isBelowFocused && !isModalOnIos\n : !isPreloaded && !isFocused && !isModalOnIos;\n\n return (\n <SceneView\n key={route.key}\n index={index}\n focused={isFocused}\n shouldFreeze={shouldFreeze}\n descriptor={descriptor}\n previousDescriptor={previousDescriptor}\n nextDescriptor={nextDescriptor}\n isPresentationModal={isModal}\n isPreloaded={isPreloaded}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onWillAppear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: false },\n target: route.key,\n });\n }}\n onAppear={() => {\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={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n\n setNextDismissedKey(route.key);\n }}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: state.key,\n });\n }}\n onNativeDismissCancelled={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n }}\n onGestureCancel={() => {\n navigation.emit({\n type: 'gestureCancel',\n target: route.key,\n });\n }}\n onSheetDetentChanged={(event) => {\n navigation.emit({\n type: 'sheetDetentChange',\n target: route.key,\n data: {\n index: event.nativeEvent.index,\n stable: event.nativeEvent.isStable,\n },\n });\n }}\n />\n );\n })}\n </ScreenStack>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n header: {\n zIndex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n start: 0,\n end: 0,\n },\n translucent: {\n position: 'absolute',\n top: 0,\n start: 0,\n end: 0,\n zIndex: 1,\n elevation: 1,\n },\n background: {\n overflow: 'hidden',\n },\n});\n"]}
1
+ {"version":3,"file":"NativeStackView.native.js","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/NativeStackView.native.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6cb,0CA8HC;;AA1kBD,6CAA+B;AAC/B,iCAA4B;AAC5B,+CAAiG;AACjG,mFAAmE;AACnE,+DAK8B;AAE9B,6CAQwB;AAMxB,iEAA8D;AAC9D,yCAQsB;AACtB,gDAA6C;AAC7C,oEAAgE;AAChE,8EAA+E;AAC/E,4EAAyE;AACzE,wFAAqF;AAErF,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEzC,SAAS,QAAQ;IACf,OAAO,uBAAuB,IAAI,MAAM,CAAC;AAC3C,CAAC;AAsBD,MAAM,eAAe,GAAG,uBAAQ,CAAC,EAAE,KAAK,KAAK,CAAC;AAE9C,MAAM,SAAS,GAAG,CAAC,EACjB,KAAK,EACL,OAAO,EACP,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,WAAW,EACX,yBAAyB,EACzB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,GACL,EAAE,EAAE;IACnB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAE1D,IAAI,EACF,SAAS,EACT,uBAAuB,EACvB,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EACrD,wBAAwB,GACzB,GAAG,OAAO,CAAC;IAEZ,MAAM,EACJ,iBAAiB,EACjB,uBAAuB,GAAG,MAAM,EAChC,8BAA8B,GAAG,IAAI,EACrC,cAAc,EACd,gBAAgB,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,EACtE,uBAAuB,EACvB,MAAM,EACN,2BAA2B,EAC3B,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,GAAG,CAAC,GAAG,CAAC,EAC3B,+BAA+B,GAAG,CAAC,CAAC,EACpC,mBAAmB,GAAG,KAAK,EAC3B,iBAAiB,GAAG,CAAC,GAAG,EACxB,cAAc,GAAG,EAAE,EACnB,8BAA8B,GAAG,IAAI,EACrC,uBAAuB,GAAG,CAAC,EAC3B,2BAA2B,GAAG,KAAK,EACnC,2BAA2B,GAAG,IAAI,EAClC,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,oBAAoB,GACrB,GAAG,OAAO,CAAC;IACZ,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;IAE/C,IAAI,gBAAgB,KAAK,UAAU,IAAI,uBAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC7D,wFAAwF;QACxF,2DAA2D;QAC3D,kGAAkG;QAClG,wCAAwC;QACxC,kFAAkF;QAClF,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAC3C,wBAAwB,GAAG,IAAI,CAAC;QAClC,CAAC;QAED,IAAI,uBAAuB,KAAK,SAAS,EAAE,CAAC;YAC1C,uBAAuB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS,GAAG,mBAAmB,CAAC;QAClC,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,gFAAgF;IAChF,MAAM,oBAAoB,GAAG,cAAc,EAAE,OAAO,CAAC,gBAAgB,CAAC;IACtE,MAAM,wBAAwB,GAC5B,oBAAoB,IAAI,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAEzE,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,iGAAiG;QACjG,oEAAoE;QACpE,YAAY,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,iBAAQ,GAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAA,kDAAiB,GAAE,CAAC;IAEnC,6GAA6G;IAC7G,MAAM,OAAO,GACX,YAAY,KAAK,OAAO,IAAI,YAAY,KAAK,WAAW,IAAI,YAAY,KAAK,WAAW,CAAC;IAE3F,oDAAoD;IACpD,MAAM,QAAQ,GAAG,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,uBAAQ,CAAC,KAAK,IAAI,uBAAQ,CAAC,IAAI,CAAC,CAAC;IAE7E,MAAM,mBAAmB,GAAG,IAAA,WAAG,EAAC,6BAAkB,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAG,IAAA,WAAG,EAAC,8BAAmB,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,IAAA,WAAG,EAAC,4BAAiB,CAAC,CAAC;IAEhD,MAAM,WAAW,GAAG,IAAA,uBAAY,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAExE,MAAM,QAAQ,GACZ,mBAAmB,IAAI,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC;QACpF,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAEjB,MAAM,mBAAmB,GAAG,IAAA,uBAAY,EAAC,CAAC,KAAK,EAAE,EAAE,CACjD,uBAAQ,CAAC,MAAM,CAAC;QACd,kDAAkD;QAClD,mEAAmE;QACnE,iEAAiE;QACjE,OAAO,EAAE,6BAA6B,GAAG,QAAQ;QACjD,OAAO,EAAE,IAAA,iCAAsB,EAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC1D,CAAC,CACH,CAAC;IAEF,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,gCAAuB,GAAE,CAAC;IAEtD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAE5E,uDAAuD;IACvD,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW;IAChD,mEAAmE;IACnE,IAAA,mBAAQ,EAAC,eAAe,EAAE,GAAG,CAAC,EAC9B,EAAE,CACH,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,IAAI,IAAI,CAAC;IAEvC,MAAM,wCAAwC,GAC5C,0CAA0C,IAAI,yCAAkB;QAChE,yCAAkB,CAAC,0CAA0C,CAAC,KAAK,IAAI,CAAC;IAE1E,IAAI,4BAA4B,GAAG,CAAC,CAAC;IAErC,IAAI,uBAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,eAAe,IAAI,CAAC,wCAAwC,EAAE,CAAC;QAC/F,MAAM,eAAe,GAAG,wBAAS,CAAC,aAAa,IAAI,CAAC,CAAC;QAErD,mEAAmE;QACnE,qEAAqE;QACrE,4EAA4E;QAC5E,0EAA0E;QAC1E,4BAA4B,GAAG,CAAC,eAAe,GAAG,QAAQ,CAAC;IAC7D,CAAC;IAED,MAAM,uBAAuB,GAAG,IAAA,+BAAgB,EAAC,mBAAmB,CAAC,CAAC;IACtE,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CACxC,GAAG,EAAE,CAAC,uBAAQ,CAAC,GAAG,CAAS,uBAAuB,EAAE,4BAA4B,CAAC,EACjF,CAAC,4BAA4B,EAAE,uBAAuB,CAAC,CACxD,CAAC;IAEF,4DAA4D;IAC5D,yEAAyE;IACzE,wFAAwF;IACxF,oFAAoF;IACpF,0DAA0D;IAC1D,wFAAwF;IACxF,MAAM,qBAAqB,GACzB,OAAO,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAG,kBAAkB,IAAI,IAAI,IAAI,gBAAgB,IAAI,IAAI,CAAC;IACzE,MAAM,SAAS,GAAG,kBAAkB;QAClC,CAAC,CAAC,IAAA,yBAAc,EAAC,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3E,CAAC,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAE5B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;gBACL,IAAI,EAAE,SAAS,EAAE,4BAA4B;gBAC7C,KAAK,EAAE,SAAS;aACjB,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAE3B,MAAM,iBAAiB,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpE,MAAM,YAAY,GAAG,IAAA,2CAAoB,EAAC;QACxC,GAAG,OAAO;QACV,KAAK;QACL,2BAA2B,EACzB,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,2BAA2B;QACpF,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QAC5F,YAAY;QACZ,WAAW,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW;QACvD,qBAAqB;QACrB,iBAAiB;QACjB,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,eAAe;QAC1C,CAAC,CAAC,6DAA6D;YAC7D,SAAS;QACX,CAAC,CAAC,2EAA2E;YAC3E,oEAAoE;YACpE,qEAAqE;YACrE,kFAAkF;YAClF,uBAAQ,CAAC,KAAK,CACZ;gBACE;oBACE,WAAW,EAAE;wBACX,YAAY,EAAE,uBAAuB;qBACtC;iBACF;aACF,EACD;gBACE,eAAe;gBACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,IACE,CAAC,CAAC,WAAW;wBACb,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ;wBACjC,cAAc,IAAI,CAAC,CAAC,WAAW;wBAC/B,OAAO,CAAC,CAAC,WAAW,CAAC,YAAY,KAAK,QAAQ,EAC9C,CAAC;wBACD,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;wBAEhD,wDAAwD;wBACxD,sEAAsE;wBACtE,MAAM,iBAAiB,GACrB,uBAAQ,CAAC,EAAE,KAAK,KAAK;4BACrB,CAAC,OAAO,CAAC,uBAAuB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;wBAEtE,IAAI,iBAAiB,EAAE,CAAC;4BACtB,wBAAwB,CAAC,YAAY,CAAC,CAAC;wBACzC,CAAC;6BAAM,CAAC;4BACN,IACE,uBAAQ,CAAC,EAAE,KAAK,SAAS;gCACzB,YAAY,KAAK,CAAC;gCAClB,wEAAwE;gCACxE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,6BAA6B,EACzD,CAAC;gCACD,2DAA2D;gCAC3D,wDAAwD;gCACxD,gEAAgE;gCAChE,8DAA8D;gCAC9D,wEAAwE;gCACxE,6CAA6C;gCAC7C,yEAAyE;gCACzE,4EAA4E;gCAC5E,eAAe,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;4BAC7C,CAAC;iCAAM,CAAC;gCACN,eAAe,CAAC,YAAY,CAAC,CAAC;4BAChC,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;aACF,CACF,CAAC;IAEN,OAAO,CACL,uBAAC,2BAAkB,IAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,YACtD,uBAAC,sCAAe,IACd,QAAQ,EAAE,KAAK,CAAC,GAAG,EACnB,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAClC,KAAK,EAAE,yBAAU,CAAC,YAAY,iBACjB,CAAC,OAAO,EACrB,sBAAsB,EAAE,uBAAuB,EAC/C,sBAAsB,EAAE,wBAAwB,EAChD,4BAA4B,EAAE,8BAA8B,EAC5D,YAAY,EAAE,YAAY,EAC1B,cAAc,EACZ,uBAAQ,CAAC,EAAE,KAAK,SAAS;gBACvB,CAAC,CAAC,gEAAgE;oBAChE,mDAAmD;oBACnD,KAAK;gBACP,CAAC,CAAC,cAAc,EAEpB,mBAAmB,EAAE,qBAAqB,EAC1C,mBAAmB,EAAE,uBAAuB,EAC5C,kBAAkB,EAAE,kBAAkB,EACtC,wBAAwB,EAAE,wBAAwB,EAClD,mBAAmB,EAAE,mBAAmB,EACxC,gBAAgB,EAAE,uBAAuB,EACzC,iBAAiB,EAAE,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,EAClE,cAAc,EAAE,SAAS,EACzB,iBAAiB,EAAE,WAAW,EAC9B,mBAAmB,EAAE,mBAAmB,EACxC,+BAA+B,EAAE,+BAA+B,EAChE,mBAAmB,EAAE,mBAAmB,EACxC,uBAAuB,EAAE,uBAAuB,EAChD,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,8BAA8B,EAAE,8BAA8B,EAC9D,2BAA2B,EAAE,2BAA2B,EACxD,kCAAkC,EAAE,2BAA2B,EAC/D,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,wBAAwB,EACxC,oBAAoB,EAAE,oBAAoB,EAC1C,cAAc,EAAE,wBAAwB,EACxC,kBAAkB,EAAE,iBAAiB,EACrC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,oBAAoB,EAC1C,uBAAuB,EAAE,uBAAuB,EAChD,gCAAgC,EAAE,KAAK,EACvC,yBAAyB,EAAE,yBAAyB,EACpD,oBAAoB,EAAE,iBAAiB,EACvC,iBAAiB,EAAE;gBACjB,MAAM,EAAE,iBAAiB,EAAE,MAAM,IAAI,WAAW;gBAChD,GAAG,EAAE,iBAAiB,EAAE,GAAG,IAAI,WAAW;gBAC1C,IAAI,EAAE,iBAAiB,EAAE,IAAI,IAAI,WAAW;gBAC5C,KAAK,EAAE,iBAAiB,EAAE,KAAK,IAAI,WAAW;aAC/C,EACD,wBAAwB,EAAE,wBAAwB,EAClD,oBAAoB,EAAE,oBAAoB,EAC1C,YAAY,EAAE;gBACZ,YAAY,KAAK,kBAAkB;oBACjC,YAAY,KAAK,2BAA2B,IAAI;oBAC9C,eAAe,EAAE,MAAM,CAAC,UAAU;iBACnC;gBACH,YAAY;aACb,EACD,oBAAoB,EAAE,oBAAoB,KACtC,iBAAiB,EACrB,YAAY,EAAE,YAAY;YAC1B,mEAAmE;YACnE,+CAA+C;YAC/C,0DAA0D;YAC1D,YAAY,EAAE,YAAY,YAC1B,uBAAC,qDAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB,YAC/D,wBAAC,8BAAmB,CAAC,QAAQ,IAC3B,KAAK,EAAE,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,aACtE,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,CAK1B,uBAAC,mBAAI,IACH,KAAK,EAAE;gCACL,MAAM,CAAC,UAAU;gCACjB,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;gCAC7C,EAAE,MAAM,EAAE,YAAY,EAAE;6BACzB,YACA,gBAAgB,EAAE,GACd,CACR,CAAC,CAAC,CAAC,IAAI,EACP,MAAM,IAAI,IAAI,IAAI,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,CACzC,uBAAC,mBAAI,IACH,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gCACd,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;gCAEjD,eAAe,CAAC,YAAY,CAAC,CAAC;gCAC9B,uBAAuB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;4BACjD,CAAC,EACD,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YACjE,MAAM,CAAC;gCACN,IAAI,EAAE,UAAU;gCAChB,OAAO;gCACP,KAAK;gCACL,UAAU;6BACX,CAAC,GACG,CACR,CAAC,CAAC,CAAC,IAAI,EACR,uBAAC,6BAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,mBAAmB,IAAI,WAAW,KAAK,KAAK,YAC9E,uBAAC,4BAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU,YAAG,MAAM,EAAE,GAA8B,GAC1D,IACD,GACM,GACvB,GACC,CACtB,CAAC;AACJ,CAAC,CAAC;AASF,SAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAS;IACjF,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,iBAAQ,GAAE,CAAC;IAC9B,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAA,+CAAsB,EAAC,KAAK,CAAC,CAAC;IAE9D,IAAA,2DAA4B,EAAC,WAAW,CAAC,CAAC;IAE1C,MAAM,cAAc,GAAG,IAAA,sCAAiB,EAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEpE,MAAM,oBAAoB,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CACvD,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO,CACL,uBAAC,iCAAsB,cACrB,uBAAC,kCAAW,IACV,oBAAoB,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,EAC5D,KAAK,EAAE,MAAM,CAAC,SAAS,YACtB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC/D,MAAM,UAAU,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAE,CAAC;gBAChF,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;gBACxC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC;gBACjD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;gBACjD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;gBAC7C,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC9E,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAElE,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnD,MAAM,YAAY,GAAG,OAAO,IAAI,uBAAQ,CAAC,EAAE,KAAK,KAAK,CAAC;gBAEtD,MAAM,WAAW,GACf,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;gBAExF,mFAAmF;gBACnF,6FAA6F;gBAC7F,MAAM,YAAY,GAAG,QAAQ,EAAE;oBAC7B,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY;oBAChE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC;gBAEhD,OAAO,CACL,uBAAC,SAAS,IAER,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,EAClB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,OAAO,EAC5B,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,GAAG,EAAE;wBACpB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,iBAAiB;4BACvB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;4BACvB,MAAM,EAAE,KAAK,CAAC,GAAG;yBAClB,CAAC,CAAC;oBACL,CAAC,EACD,YAAY,EAAE,GAAG,EAAE;wBACjB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,iBAAiB;4BACvB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;4BACxB,MAAM,EAAE,KAAK,CAAC,GAAG;yBAClB,CAAC,CAAC;oBACL,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE;wBACb,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,eAAe;4BACrB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;4BACxB,MAAM,EAAE,KAAK,CAAC,GAAG;yBAClB,CAAC,CAAC;oBACL,CAAC,EACD,WAAW,EAAE,GAAG,EAAE;wBAChB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,eAAe;4BACrB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;4BACvB,MAAM,EAAE,KAAK,CAAC,GAAG;yBAClB,CAAC,CAAC;oBACL,CAAC,EACD,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;wBACrB,UAAU,CAAC,QAAQ,CAAC;4BAClB,GAAG,qBAAY,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC;4BACnD,MAAM,EAAE,KAAK,CAAC,GAAG;4BACjB,MAAM,EAAE,KAAK,CAAC,GAAG;yBAClB,CAAC,CAAC;wBAEH,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjC,CAAC,EACD,yBAAyB,EAAE,GAAG,EAAE;wBAC9B,UAAU,CAAC,QAAQ,CAAC;4BAClB,GAAG,qBAAY,CAAC,GAAG,EAAE;4BACrB,MAAM,EAAE,KAAK,CAAC,GAAG;4BACjB,MAAM,EAAE,KAAK,CAAC,GAAG;yBAClB,CAAC,CAAC;oBACL,CAAC,EACD,wBAAwB,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClC,UAAU,CAAC,QAAQ,CAAC;4BAClB,GAAG,qBAAY,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC;4BACnD,MAAM,EAAE,KAAK,CAAC,GAAG;4BACjB,MAAM,EAAE,KAAK,CAAC,GAAG;yBAClB,CAAC,CAAC;oBACL,CAAC,EACD,eAAe,EAAE,GAAG,EAAE;wBACpB,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,eAAe;4BACrB,MAAM,EAAE,KAAK,CAAC,GAAG;yBAClB,CAAC,CAAC;oBACL,CAAC,EACD,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;wBAC9B,UAAU,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,mBAAmB;4BACzB,MAAM,EAAE,KAAK,CAAC,GAAG;4BACjB,IAAI,EAAE;gCACJ,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK;gCAC9B,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ;6BACnC;yBACF,CAAC,CAAC;oBACL,CAAC,IA3EI,KAAK,CAAC,GAAG,CA4Ed,CACH,CAAC;YACJ,CAAC,CAAC,GACU,GACS,CAC1B,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;KACR;IACD,MAAM,EAAE;QACN,MAAM,EAAE,CAAC;KACV;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;KACP;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;KACb;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC,CAAC","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { use } from 'react';\nimport { Animated, Platform, StatusBar, StyleSheet, useAnimatedValue, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport {\n compatibilityFlags,\n type ScreenProps,\n ScreenStack,\n ScreenStackItem,\n} from 'react-native-screens';\n\nimport {\n getDefaultHeaderHeight,\n getHeaderTitle,\n HeaderBackContext,\n HeaderHeightContext,\n HeaderShownContext,\n SafeAreaProviderCompat,\n useFrameSize,\n} from '../../elements';\nimport type {\n NativeStackDescriptor,\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n} from '../types';\nimport { useHeaderConfigProps } from './useHeaderConfigProps';\nimport {\n NavigationProvider,\n type ParamListBase,\n type RouteProp,\n StackActions,\n type StackNavigationState,\n usePreventRemoveContext,\n useTheme,\n} from '../../native';\nimport { debounce } from '../utils/debounce';\nimport { getModalRouteKeys } from '../utils/getModalRoutesKeys';\nimport { AnimatedHeaderHeightContext } from '../utils/useAnimatedHeaderHeight';\nimport { useDismissedRouteError } from '../utils/useDismissedRouteError';\nimport { useInvalidPreventRemoveError } from '../utils/useInvalidPreventRemoveError';\n\nconst ANDROID_DEFAULT_HEADER_HEIGHT = 56;\n\nfunction isFabric() {\n return 'nativeFabricUIManager' in global;\n}\n\ntype SceneViewProps = {\n index: number;\n focused: boolean;\n shouldFreeze: boolean;\n descriptor: NativeStackDescriptor;\n previousDescriptor?: NativeStackDescriptor;\n nextDescriptor?: NativeStackDescriptor;\n isPresentationModal?: boolean;\n isPreloaded?: boolean;\n onWillDisappear: () => void;\n onWillAppear: () => void;\n onAppear: () => void;\n onDisappear: () => void;\n onDismissed: ScreenProps['onDismissed'];\n onHeaderBackButtonClicked: ScreenProps['onHeaderBackButtonClicked'];\n onNativeDismissCancelled: ScreenProps['onDismissed'];\n onGestureCancel: ScreenProps['onGestureCancel'];\n onSheetDetentChanged: ScreenProps['onSheetDetentChanged'];\n};\n\nconst useNativeDriver = Platform.OS !== 'web';\n\nconst SceneView = ({\n index,\n focused,\n shouldFreeze,\n descriptor,\n previousDescriptor,\n nextDescriptor,\n isPresentationModal,\n isPreloaded,\n onWillDisappear,\n onWillAppear,\n onAppear,\n onDisappear,\n onDismissed,\n onHeaderBackButtonClicked,\n onNativeDismissCancelled,\n onGestureCancel,\n onSheetDetentChanged,\n}: SceneViewProps) => {\n const { route, navigation, options, render } = descriptor;\n\n let {\n animation,\n animationMatchesGesture,\n presentation = isPresentationModal ? 'modal' : 'card',\n fullScreenGestureEnabled,\n } = options;\n\n const {\n animationDuration,\n animationTypeForReplace = 'push',\n fullScreenGestureShadowEnabled = true,\n gestureEnabled,\n gestureDirection = presentation === 'card' ? 'horizontal' : 'vertical',\n gestureResponseDistance,\n header,\n headerBackButtonMenuEnabled,\n headerShown,\n headerBackground,\n headerTransparent,\n autoHideHomeIndicator,\n keyboardHandlingEnabled,\n navigationBarColor,\n navigationBarTranslucent,\n navigationBarHidden,\n orientation,\n sheetAllowedDetents = [1.0],\n sheetLargestUndimmedDetentIndex = -1,\n sheetGrabberVisible = false,\n sheetCornerRadius = -1.0,\n sheetElevation = 24,\n sheetExpandsWhenScrolledToEdge = true,\n sheetInitialDetentIndex = 0,\n sheetShouldOverflowTopInset = false,\n sheetResizeAnimationEnabled = true,\n statusBarAnimation,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n statusBarBackgroundColor,\n unstable_sheetFooter,\n scrollEdgeEffects,\n freezeOnBlur,\n contentStyle,\n unstable_nativeProps,\n } = options;\n const screenNativeProps = unstable_nativeProps;\n\n if (gestureDirection === 'vertical' && Platform.OS === 'ios') {\n // for `vertical` direction to work, we need to set `fullScreenGestureEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `animationMatchesGesture` needs to be set to `true` so the `animation` 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 (fullScreenGestureEnabled === undefined) {\n fullScreenGestureEnabled = true;\n }\n\n if (animationMatchesGesture === undefined) {\n animationMatchesGesture = true;\n }\n\n if (animation === undefined) {\n animation = 'slide_from_bottom';\n }\n }\n\n // workaround for rn-screens where gestureDirection has to be set on both\n // current and previous screen - software-mansion/react-native-screens/pull/1509\n const nextGestureDirection = nextDescriptor?.options.gestureDirection;\n const gestureDirectionOverride =\n nextGestureDirection != null ? nextGestureDirection : gestureDirection;\n\n if (index === 0) {\n // first screen should always be treated as `card`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `card`\n presentation = 'card';\n }\n\n const { colors } = useTheme();\n const insets = useSafeAreaInsets();\n\n // `modal`, `formSheet` and `pageSheet` presentations do not take whole screen, so should not take the inset.\n const isModal =\n presentation === 'modal' || presentation === 'formSheet' || presentation === 'pageSheet';\n\n // Modals are fullscreen in landscape only on iPhone\n const isIPhone = Platform.OS === 'ios' && !(Platform.isPad || Platform.isTV);\n\n const isParentHeaderShown = use(HeaderShownContext);\n const parentHeaderHeight = use(HeaderHeightContext);\n const parentHeaderBack = use(HeaderBackContext);\n\n const isLandscape = useFrameSize((frame) => frame.width > frame.height);\n\n const topInset =\n isParentHeaderShown || (Platform.OS === 'ios' && isModal) || (isIPhone && isLandscape)\n ? 0\n : insets.top;\n\n const defaultHeaderHeight = useFrameSize((frame) =>\n Platform.select({\n // FIXME: Currently screens isn't using Material 3\n // So our `getDefaultHeaderHeight` doesn't return the correct value\n // So we hardcode the value here for now until screens is updated\n android: ANDROID_DEFAULT_HEADER_HEIGHT + topInset,\n default: getDefaultHeaderHeight(frame, isModal, topInset),\n })\n );\n\n const { preventedRoutes } = usePreventRemoveContext();\n\n const [headerHeight, setHeaderHeight] = React.useState(defaultHeaderHeight);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const setHeaderHeightDebounced = React.useCallback(\n // Debounce the header height updates to avoid excessive re-renders\n debounce(setHeaderHeight, 100),\n []\n );\n\n const hasCustomHeader = header != null;\n\n const usesNewAndroidHeaderHeightImplementation =\n 'usesNewAndroidHeaderHeightImplementation' in compatibilityFlags &&\n compatibilityFlags['usesNewAndroidHeaderHeightImplementation'] === true;\n\n let headerHeightCorrectionOffset = 0;\n\n if (Platform.OS === 'android' && !hasCustomHeader && !usesNewAndroidHeaderHeightImplementation) {\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n\n // On Android, the native header height is not correctly calculated\n // It includes status bar height even if statusbar is not translucent\n // And the statusbar value itself doesn't match the actual status bar height\n // So we subtract the bogus status bar height and add the actual top inset\n headerHeightCorrectionOffset = -statusBarHeight + topInset;\n }\n\n const rawAnimatedHeaderHeight = useAnimatedValue(defaultHeaderHeight);\n const animatedHeaderHeight = React.useMemo(\n () => Animated.add<number>(rawAnimatedHeaderHeight, headerHeightCorrectionOffset),\n [headerHeightCorrectionOffset, rawAnimatedHeaderHeight]\n );\n\n // During the very first render topInset is > 0 when running\n // in non edge-to-edge mode on Android, while on every consecutive render\n // topInset === 0, causing header content to jump, as we add padding on the first frame,\n // just to remove it in next one. To prevent this, when statusBarTranslucent is set,\n // we apply additional padding in header only if its true.\n // For more details see: https://github.com/react-navigation/react-navigation/pull/12014\n const headerTopInsetEnabled =\n typeof statusBarTranslucent === 'boolean' ? statusBarTranslucent : topInset !== 0;\n\n const canGoBack = previousDescriptor != null || parentHeaderBack != null;\n const backTitle = previousDescriptor\n ? getHeaderTitle(previousDescriptor.options, previousDescriptor.route.name)\n : parentHeaderBack?.title;\n\n const headerBack = React.useMemo(() => {\n if (canGoBack) {\n return {\n href: undefined, // No href needed for native\n title: backTitle,\n };\n }\n\n return undefined;\n }, [canGoBack, backTitle]);\n\n const isRemovePrevented = preventedRoutes[route.key]?.preventRemove;\n\n const headerConfig = useHeaderConfigProps({\n ...options,\n route,\n headerBackButtonMenuEnabled:\n isRemovePrevented !== undefined ? !isRemovePrevented : headerBackButtonMenuEnabled,\n headerBackTitle: options.headerBackTitle !== undefined ? options.headerBackTitle : undefined,\n headerHeight,\n headerShown: header !== undefined ? false : headerShown,\n headerTopInsetEnabled,\n headerTransparent,\n headerBack,\n });\n\n const onHeaderHeightChange = hasCustomHeader\n ? // If we have a custom header, don't use native header height\n undefined\n : // On Fabric, there's a bug where native event drivers for Animated objects\n // are created after the first notifications about the header height\n // from the native side, `onHeaderHeightChange` event does not notify\n // `animatedHeaderHeight` about initial values on appearing screens at the moment.\n Animated.event(\n [\n {\n nativeEvent: {\n headerHeight: rawAnimatedHeaderHeight,\n },\n },\n ],\n {\n useNativeDriver,\n listener: (e) => {\n if (\n e.nativeEvent &&\n typeof e.nativeEvent === 'object' &&\n 'headerHeight' in e.nativeEvent &&\n typeof e.nativeEvent.headerHeight === 'number'\n ) {\n const headerHeight = e.nativeEvent.headerHeight;\n\n // Only debounce if header has large title or search bar\n // As it's the only case where the header height can change frequently\n const doesHeaderAnimate =\n Platform.OS === 'ios' &&\n (options.headerLargeTitleEnabled || options.headerSearchBarOptions);\n\n if (doesHeaderAnimate) {\n setHeaderHeightDebounced(headerHeight);\n } else {\n if (\n Platform.OS === 'android' &&\n headerHeight !== 0 &&\n // On some devices, height maybe slightly off (e.g. 56.17 instead of 56)\n Math.round(headerHeight) <= ANDROID_DEFAULT_HEADER_HEIGHT\n ) {\n // FIXME: On Android, events may get delivered out-of-order\n // https://github.com/facebook/react-native/issues/54636\n // We seem to get header height without status bar height first,\n // and then the correct height with status bar height included\n // But due to out-of-order delivery, we may get the correct height first\n // and then the one without status bar height\n // This is hack to include status bar height if it's not already included\n // It only works because header height doesn't change dynamically on Android\n setHeaderHeight(headerHeight + insets.top);\n } else {\n setHeaderHeight(headerHeight);\n }\n }\n }\n },\n }\n );\n\n return (\n <NavigationProvider route={route} navigation={navigation}>\n <ScreenStackItem\n screenId={route.key}\n activityState={isPreloaded ? 0 : 2}\n style={StyleSheet.absoluteFill}\n aria-hidden={!focused}\n customAnimationOnSwipe={animationMatchesGesture}\n fullScreenSwipeEnabled={fullScreenGestureEnabled}\n fullScreenSwipeShadowEnabled={fullScreenGestureShadowEnabled}\n freezeOnBlur={freezeOnBlur}\n gestureEnabled={\n Platform.OS === 'android'\n ? // This prop enables handling of system back gestures on Android\n // Since we handle them in JS side, we disable this\n false\n : gestureEnabled\n }\n homeIndicatorHidden={autoHideHomeIndicator}\n hideKeyboardOnSwipe={keyboardHandlingEnabled}\n navigationBarColor={navigationBarColor}\n navigationBarTranslucent={navigationBarTranslucent}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={animationTypeForReplace}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n stackAnimation={animation}\n screenOrientation={orientation}\n sheetAllowedDetents={sheetAllowedDetents}\n sheetLargestUndimmedDetentIndex={sheetLargestUndimmedDetentIndex}\n sheetGrabberVisible={sheetGrabberVisible}\n sheetInitialDetentIndex={sheetInitialDetentIndex}\n sheetCornerRadius={sheetCornerRadius}\n sheetElevation={sheetElevation}\n sheetExpandsWhenScrolledToEdge={sheetExpandsWhenScrolledToEdge}\n sheetShouldOverflowTopInset={sheetShouldOverflowTopInset}\n sheetDefaultResizeAnimationEnabled={sheetResizeAnimationEnabled}\n statusBarAnimation={statusBarAnimation}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarColor={statusBarBackgroundColor}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={gestureDirectionOverride}\n transitionDuration={animationDuration}\n onWillAppear={onWillAppear}\n onWillDisappear={onWillDisappear}\n onAppear={onAppear}\n onDisappear={onDisappear}\n onDismissed={onDismissed}\n onGestureCancel={onGestureCancel}\n onSheetDetentChanged={onSheetDetentChanged}\n gestureResponseDistance={gestureResponseDistance}\n nativeBackButtonDismissalEnabled={false} // on Android\n onHeaderBackButtonClicked={onHeaderBackButtonClicked}\n preventNativeDismiss={isRemovePrevented} // on iOS\n scrollEdgeEffects={{\n bottom: scrollEdgeEffects?.bottom ?? 'automatic',\n top: scrollEdgeEffects?.top ?? 'automatic',\n left: scrollEdgeEffects?.left ?? 'automatic',\n right: scrollEdgeEffects?.right ?? 'automatic',\n }}\n onNativeDismissCancelled={onNativeDismissCancelled}\n onHeaderHeightChange={onHeaderHeightChange}\n contentStyle={[\n presentation !== 'transparentModal' &&\n presentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n unstable_sheetFooter={unstable_sheetFooter}\n {...screenNativeProps}\n headerConfig={headerConfig}\n // When ts-expect-error is added, it affects all the props below it\n // So we keep any props that need it at the end\n // Otherwise invalid props may not be caught by TypeScript\n shouldFreeze={shouldFreeze}>\n <AnimatedHeaderHeightContext.Provider value={animatedHeaderHeight}>\n <HeaderHeightContext.Provider\n value={headerShown !== false ? headerHeight : (parentHeaderHeight ?? 0)}>\n {headerBackground != null ? (\n /**\n * To show a custom header background, we render it at the top of the screen below the header\n * The header also needs to be positioned absolutely (with `translucent` style)\n */\n <View\n style={[\n styles.background,\n headerTransparent ? styles.translucent : null,\n { height: headerHeight },\n ]}>\n {headerBackground()}\n </View>\n ) : null}\n {header != null && headerShown !== false ? (\n <View\n onLayout={(e) => {\n const headerHeight = e.nativeEvent.layout.height;\n\n setHeaderHeight(headerHeight);\n rawAnimatedHeaderHeight.setValue(headerHeight);\n }}\n style={[styles.header, headerTransparent ? styles.absolute : null]}>\n {header({\n back: headerBack,\n options,\n route,\n navigation,\n })}\n </View>\n ) : null}\n <HeaderShownContext.Provider value={isParentHeaderShown || headerShown !== false}>\n <HeaderBackContext.Provider value={headerBack}>{render()}</HeaderBackContext.Provider>\n </HeaderShownContext.Provider>\n </HeaderHeightContext.Provider>\n </AnimatedHeaderHeightContext.Provider>\n </ScreenStackItem>\n </NavigationProvider>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n describe: (route: RouteProp<ParamListBase>, placeholder: boolean) => NativeStackDescriptor;\n};\n\nexport function NativeStackView({ state, navigation, descriptors, describe }: Props) {\n const { colors } = useTheme();\n const { setNextDismissedKey } = useDismissedRouteError(state);\n\n useInvalidPreventRemoveError(descriptors);\n\n const modalRouteKeys = getModalRouteKeys(state.routes, descriptors);\n\n const preloadedDescriptors = state.preloadedRoutes.reduce<NativeStackDescriptorMap>(\n (acc, route) => {\n acc[route.key] = acc[route.key] || describe(route, true);\n return acc;\n },\n {}\n );\n\n return (\n <SafeAreaProviderCompat>\n <ScreenStack\n nativeContainerStyle={{ backgroundColor: colors.background }}\n style={styles.container}>\n {state.routes.concat(state.preloadedRoutes).map((route, index) => {\n const descriptor = (descriptors[route.key] ?? preloadedDescriptors[route.key])!;\n const isFocused = state.index === index;\n const isBelowFocused = state.index - 1 === index;\n const previousKey = state.routes[index - 1]?.key;\n const nextKey = state.routes[index + 1]?.key;\n const previousDescriptor = previousKey ? descriptors[previousKey] : undefined;\n const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;\n\n const isModal = modalRouteKeys.includes(route.key);\n const isModalOnIos = isModal && Platform.OS === 'ios';\n\n const isPreloaded =\n preloadedDescriptors[route.key] !== undefined && descriptors[route.key] === undefined;\n\n // On Fabric, when screen is frozen, animated and reanimated values are not updated\n // due to component being unmounted. To avoid this, we don't freeze the previous screen there\n const shouldFreeze = isFabric()\n ? !isPreloaded && !isFocused && !isBelowFocused && !isModalOnIos\n : !isPreloaded && !isFocused && !isModalOnIos;\n\n return (\n <SceneView\n key={route.key}\n index={index}\n focused={isFocused}\n shouldFreeze={shouldFreeze}\n descriptor={descriptor}\n previousDescriptor={previousDescriptor}\n nextDescriptor={nextDescriptor}\n isPresentationModal={isModal}\n isPreloaded={isPreloaded}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onWillAppear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: false },\n target: route.key,\n });\n }}\n onAppear={() => {\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={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n\n setNextDismissedKey(route.key);\n }}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: state.key,\n });\n }}\n onNativeDismissCancelled={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n }}\n onGestureCancel={() => {\n navigation.emit({\n type: 'gestureCancel',\n target: route.key,\n });\n }}\n onSheetDetentChanged={(event) => {\n navigation.emit({\n type: 'sheetDetentChange',\n target: route.key,\n data: {\n index: event.nativeEvent.index,\n stable: event.nativeEvent.isStable,\n },\n });\n }}\n />\n );\n })}\n </ScreenStack>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n header: {\n zIndex: 1,\n },\n absolute: {\n position: 'absolute',\n top: 0,\n start: 0,\n end: 0,\n },\n translucent: {\n position: 'absolute',\n top: 0,\n start: 0,\n end: 0,\n zIndex: 1,\n elevation: 1,\n },\n background: {\n overflow: 'hidden',\n },\n});\n"]}
@@ -10,6 +10,6 @@ type Props = NativeStackNavigationOptions & {
10
10
  } | undefined;
11
11
  route: Route<string>;
12
12
  };
13
- export declare function useHeaderConfigProps({ headerBackIcon, headerBackImageSource, headerBackButtonDisplayMode, headerBackButtonMenuEnabled, headerBackTitle, headerBackTitleStyle, headerBackVisible, headerShadowVisible, headerLargeStyle, headerLargeTitle: headerLargeTitleDeprecated, headerLargeTitleEnabled, headerLargeTitleShadowVisible, headerLargeTitleStyle, headerBackground, headerLeft, headerRight, headerShown, headerStyle, headerBlurEffect, headerTintColor, headerTitle, headerTitleAlign, headerTitleStyle, headerTransparent, headerSearchBarOptions, headerTopInsetEnabled, headerBack, route, title, unstable_headerLeftItems: headerLeftItems, unstable_headerRightItems: headerRightItems, }: Props): ScreenStackHeaderConfigProps;
13
+ export declare function useHeaderConfigProps({ headerBackIcon, headerBackImageSource, headerBackButtonDisplayMode, headerBackButtonMenuEnabled, headerBackTitle, headerBackTitleStyle, headerBackVisible, headerShadowVisible, headerLargeStyle, headerLargeTitle: headerLargeTitleDeprecated, headerLargeTitleEnabled, headerLargeTitleShadowVisible, headerLargeTitleStyle, headerBackground, headerLeft, headerRight, headerShown, headerStyle, headerBlurEffect, headerTintColor, headerTitle, headerTitleAlign, headerTitleStyle, headerTransparent, headerSearchBarOptions, headerTopInsetEnabled, headerBack, route, title, unstable_headerLeftItems: headerLeftItems, unstable_headerRightItems: headerRightItems, unstable_nativeProps, }: Props): ScreenStackHeaderConfigProps;
14
14
  export {};
15
15
  //# sourceMappingURL=useHeaderConfigProps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useHeaderConfigProps.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/useHeaderConfigProps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,4BAA4B,EAKlC,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,KAAK,KAAK,EAAmC,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAKV,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAElB,KAAK,KAAK,GAAG,4BAA4B,GAAG;IAC1C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAoIF,wBAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAAE,0BAA0B,EAC5C,uBAAoD,EACpD,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACV,KAAK,EACL,KAAK,EACL,wBAAwB,EAAE,eAAe,EACzC,yBAAyB,EAAE,gBAAgB,GAC5C,EAAE,KAAK,GAAG,4BAA4B,CAwRtC"}
1
+ {"version":3,"file":"useHeaderConfigProps.d.ts","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/useHeaderConfigProps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,4BAA4B,EAKlC,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,KAAK,KAAK,EAAmC,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAKV,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAElB,KAAK,KAAK,GAAG,4BAA4B,GAAG;IAC1C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IACxE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAoIF,wBAAgB,oBAAoB,CAAC,EACnC,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAAE,0BAA0B,EAC5C,uBAAoD,EACpD,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,UAAU,EACV,KAAK,EACL,KAAK,EACL,wBAAwB,EAAE,eAAe,EACzC,yBAAyB,EAAE,gBAAgB,EAC3C,oBAAoB,GACrB,EAAE,KAAK,GAAG,4BAA4B,CA0RtC"}
@@ -108,10 +108,11 @@ const getMenuItem = (item) => {
108
108
  subtitle: description,
109
109
  };
110
110
  };
111
- function useHeaderConfigProps({ headerBackIcon, headerBackImageSource, headerBackButtonDisplayMode, headerBackButtonMenuEnabled, headerBackTitle, headerBackTitleStyle, headerBackVisible, headerShadowVisible, headerLargeStyle, headerLargeTitle: headerLargeTitleDeprecated, headerLargeTitleEnabled = headerLargeTitleDeprecated, headerLargeTitleShadowVisible, headerLargeTitleStyle, headerBackground, headerLeft, headerRight, headerShown, headerStyle, headerBlurEffect, headerTintColor, headerTitle, headerTitleAlign, headerTitleStyle, headerTransparent, headerSearchBarOptions, headerTopInsetEnabled, headerBack, route, title, unstable_headerLeftItems: headerLeftItems, unstable_headerRightItems: headerRightItems, }) {
111
+ function useHeaderConfigProps({ headerBackIcon, headerBackImageSource, headerBackButtonDisplayMode, headerBackButtonMenuEnabled, headerBackTitle, headerBackTitleStyle, headerBackVisible, headerShadowVisible, headerLargeStyle, headerLargeTitle: headerLargeTitleDeprecated, headerLargeTitleEnabled = headerLargeTitleDeprecated, headerLargeTitleShadowVisible, headerLargeTitleStyle, headerBackground, headerLeft, headerRight, headerShown, headerStyle, headerBlurEffect, headerTintColor, headerTitle, headerTitleAlign, headerTitleStyle, headerTransparent, headerSearchBarOptions, headerTopInsetEnabled, headerBack, route, title, unstable_headerLeftItems: headerLeftItems, unstable_headerRightItems: headerRightItems, unstable_nativeProps, }) {
112
112
  const { direction } = (0, native_1.useLocale)();
113
113
  const { colors, fonts, dark } = (0, native_1.useTheme)();
114
114
  const tintColor = headerTintColor ?? (react_native_1.Platform.OS === 'ios' ? colors.primary : colors.text);
115
+ const headerNativeProps = unstable_nativeProps?.headerConfig;
115
116
  const headerBackTitleStyleFlattened = react_native_1.StyleSheet.flatten([fonts.regular, headerBackTitleStyle]) || {};
116
117
  const headerLargeTitleStyleFlattened = react_native_1.StyleSheet.flatten([
117
118
  react_native_1.Platform.select({ ios: fonts.heavy, default: fonts.medium }),
@@ -271,6 +272,7 @@ function useHeaderConfigProps({ headerBackIcon, headerBackImageSource, headerBac
271
272
  headerLeftBarButtonItems: processBarButtonItems(leftItems, colors, fonts),
272
273
  headerRightBarButtonItems: processBarButtonItems(rightItems, colors, fonts),
273
274
  experimental_userInterfaceStyle: dark ? 'dark' : 'light',
275
+ ...headerNativeProps,
274
276
  };
275
277
  }
276
278
  //# sourceMappingURL=useHeaderConfigProps.js.map