expo-router 56.2.13 → 56.2.15

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 (84) hide show
  1. package/android/build.gradle +2 -2
  2. package/build/exports.d.ts +2 -1
  3. package/build/exports.d.ts.map +1 -1
  4. package/build/exports.js.map +1 -1
  5. package/build/fork/extractPathFromURL.d.ts.map +1 -1
  6. package/build/fork/extractPathFromURL.js +5 -2
  7. package/build/fork/extractPathFromURL.js.map +1 -1
  8. package/build/fork/useLinking.native.js +1 -1
  9. package/build/fork/useLinking.native.js.map +1 -1
  10. package/build/global-state/getRouteInfoFromState.d.ts.map +1 -1
  11. package/build/global-state/getRouteInfoFromState.js +3 -11
  12. package/build/global-state/getRouteInfoFromState.js.map +1 -1
  13. package/build/global-state/store.d.ts +3 -4
  14. package/build/global-state/store.d.ts.map +1 -1
  15. package/build/global-state/store.js.map +1 -1
  16. package/build/global-state/useStore.d.ts.map +1 -1
  17. package/build/global-state/useStore.js +0 -4
  18. package/build/global-state/useStore.js.map +1 -1
  19. package/build/native-tabs/NativeTabTrigger.d.ts +1 -1
  20. package/build/native-tabs/NativeTabTrigger.d.ts.map +1 -1
  21. package/build/native-tabs/NativeTabTrigger.js +9 -1
  22. package/build/native-tabs/NativeTabTrigger.js.map +1 -1
  23. package/build/native-tabs/types.d.ts +31 -0
  24. package/build/native-tabs/types.d.ts.map +1 -1
  25. package/build/native-tabs/types.js.map +1 -1
  26. package/build/react-navigation/native-stack/index.d.ts +1 -1
  27. package/build/react-navigation/native-stack/index.d.ts.map +1 -1
  28. package/build/react-navigation/native-stack/index.js.map +1 -1
  29. package/build/react-navigation/native-stack/types.d.ts +17 -0
  30. package/build/react-navigation/native-stack/types.d.ts.map +1 -1
  31. package/build/react-navigation/native-stack/types.js.map +1 -1
  32. package/build/react-navigation/native-stack/views/NativeStackView.native.d.ts.map +1 -1
  33. package/build/react-navigation/native-stack/views/NativeStackView.native.js +3 -2
  34. package/build/react-navigation/native-stack/views/NativeStackView.native.js.map +1 -1
  35. package/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts +1 -1
  36. package/build/react-navigation/native-stack/views/useHeaderConfigProps.d.ts.map +1 -1
  37. package/build/react-navigation/native-stack/views/useHeaderConfigProps.js +3 -1
  38. package/build/react-navigation/native-stack/views/useHeaderConfigProps.js.map +1 -1
  39. package/build/testing-library/context-stubs.d.ts +13 -0
  40. package/build/testing-library/context-stubs.d.ts.map +1 -1
  41. package/build/testing-library/context-stubs.js +38 -2
  42. package/build/testing-library/context-stubs.js.map +1 -1
  43. package/build/toolbar/native.android.d.ts.map +1 -1
  44. package/build/toolbar/native.android.js +6 -2
  45. package/build/toolbar/native.android.js.map +1 -1
  46. package/build/utils/url.d.ts +2 -0
  47. package/build/utils/url.d.ts.map +1 -1
  48. package/build/utils/url.js +21 -0
  49. package/build/utils/url.js.map +1 -1
  50. package/expo-module.config.json +1 -1
  51. package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.module → 56.2.15/expo.modules.router-56.2.15.module} +7 -7
  52. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.15/expo.modules.router-56.2.15.module.md5 +1 -0
  53. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.15/expo.modules.router-56.2.15.module.sha1 +1 -0
  54. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.15/expo.modules.router-56.2.15.module.sha256 +1 -0
  55. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.15/expo.modules.router-56.2.15.module.sha512 +1 -0
  56. package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.pom → 56.2.15/expo.modules.router-56.2.15.pom} +1 -1
  57. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.15/expo.modules.router-56.2.15.pom.md5 +1 -0
  58. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.15/expo.modules.router-56.2.15.pom.sha1 +1 -0
  59. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.15/expo.modules.router-56.2.15.pom.sha256 +1 -0
  60. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.15/expo.modules.router-56.2.15.pom.sha512 +1 -0
  61. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml +4 -4
  62. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.md5 +1 -1
  63. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha1 +1 -1
  64. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha256 +1 -1
  65. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha512 +1 -1
  66. package/package.json +7 -7
  67. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.module.md5 +0 -1
  68. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.module.sha1 +0 -1
  69. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.module.sha256 +0 -1
  70. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.module.sha512 +0 -1
  71. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.pom.md5 +0 -1
  72. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.pom.sha1 +0 -1
  73. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.pom.sha256 +0 -1
  74. package/local-maven-repo/expo/modules/router/expo.modules.router/56.2.13/expo.modules.router-56.2.13.pom.sha512 +0 -1
  75. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar → 56.2.15/expo.modules.router-56.2.15-sources.jar} +0 -0
  76. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar.md5 → 56.2.15/expo.modules.router-56.2.15-sources.jar.md5} +0 -0
  77. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar.sha1 → 56.2.15/expo.modules.router-56.2.15-sources.jar.sha1} +0 -0
  78. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar.sha256 → 56.2.15/expo.modules.router-56.2.15-sources.jar.sha256} +0 -0
  79. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13-sources.jar.sha512 → 56.2.15/expo.modules.router-56.2.15-sources.jar.sha512} +0 -0
  80. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar → 56.2.15/expo.modules.router-56.2.15.aar} +0 -0
  81. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar.md5 → 56.2.15/expo.modules.router-56.2.15.aar.md5} +0 -0
  82. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar.sha1 → 56.2.15/expo.modules.router-56.2.15.aar.sha1} +0 -0
  83. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar.sha256 → 56.2.15/expo.modules.router-56.2.15.aar.sha256} +0 -0
  84. /package/local-maven-repo/expo/modules/router/expo.modules.router/{56.2.13/expo.modules.router-56.2.13.aar.sha512 → 56.2.15/expo.modules.router-56.2.15.aar.sha512} +0 -0
@@ -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":"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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 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
@@ -1 +1 @@
1
- {"version":3,"file":"useHeaderConfigProps.js","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/useHeaderConfigProps.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;AAsKb,oDAwTC;;AA7dD,+CAA0E;AAC1E,+DAa8B;AAE9B,mDAA+C;AAC/C,gDAA6C;AAC7C,6CAA6D;AAC7D,yCAA2E;AAgB3E,MAAM,qBAAqB,GAAG,CAC5B,KAA0C,EAC1C,MAAuB,EACvB,KAAqB,EACrB,EAAE;IACF,OAAO,KAAK;QACV,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,2EAA2E;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,wDAAwD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;YAEzD,MAAM,mBAAmB,GAAG;gBAC1B,GAAG,IAAI;gBACP,KAAK;gBACL,KAAK,EAAE,KAAK;gBACZ,UAAU,EAAE;oBACV,GAAG,KAAK,CAAC,OAAO;oBAChB,GAAG,UAAU;iBACd;gBACD,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;aAC1B,CAAC;YAEF,IAAI,aAA0E,CAAC;YAE/E,IAAI,mBAAmB,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;gBAE9C,aAAa,GAAG;oBACd,GAAG,mBAAmB;oBACtB,IAAI,EAAE;wBACJ,GAAG,mBAAmB,CAAC,IAAI;wBAC3B,eAAe,EAAE,CAAC,eAAe;wBACjC,gBAAgB,EAAE,MAAM,KAAK,SAAS;wBACtC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;qBACxC;iBACF,CAAC;YACJ,CAAC;iBAAM,IAAI,mBAAmB,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3E,aAAa,GAAG,mBAAmB,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wCAAwC,CACnF,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,oBAAoB,GAAG,KAAK,CAAC,KAAK,EAAE,eAAe,IAAI,MAAM,CAAC,YAAY,CAAC;gBACjF,MAAM,cAAc,GAAG,IAAA,aAAK,EAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;gBAElF,aAAa,GAAG;oBACd,GAAG,aAAa;oBAChB,KAAK,EAAE;wBACL,GAAG,KAAK;wBACR,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;wBAC1B,KAAK,EAAE;4BACL,eAAe,EAAE,oBAAoB;4BACrC,KAAK,EAAE,cAAc;4BACrB,GAAG,KAAK,CAAC,OAAO;4BAChB,GAAG,KAAK,CAAC,KAAK;yBACf;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,6DAA6D,CACxG,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CACpB,IAAyC,EACoC,EAAE;IAC/E,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK;YAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;YACnD,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,IAAwE,EACZ,EAAE;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAE9E,OAAO;YACL,GAAG,IAAI;YACP,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;YACzB,KAAK,EAAE,KAAK;YACZ,gBAAgB,EAAE,MAAM,KAAK,SAAS;YACtC,aAAa,EAAE,MAAM;YACrB,eAAe,EAAE,CAAC,eAAe;YACjC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAEnD,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;QACzB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,WAAW;KACtB,CAAC;AACJ,CAAC,CAAC;AAEF,SAAgB,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,uBAAuB,GAAG,0BAA0B,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,GACrC;IACN,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,kBAAS,GAAE,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAA,iBAAQ,GAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,eAAe,IAAI,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5F,MAAM,6BAA6B,GACjC,yBAAU,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,MAAM,8BAA8B,GAClC,yBAAU,CAAC,OAAO,CAAC;QACjB,uBAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5D,qBAAqB;KACtB,CAAC,IAAI,EAAE,CAAC;IACX,MAAM,yBAAyB,GAC7B,yBAAU,CAAC,OAAO,CAAC;QACjB,uBAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3D,gBAAgB;KACjB,CAAC,IAAI,EAAE,CAAC;IACX,MAAM,oBAAoB,GAAG,yBAAU,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACnE,MAAM,yBAAyB,GAAG,yBAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAE7E,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,CAAC,GAAG,IAAA,4BAAY,EAAC;QAChF,6BAA6B,CAAC,UAAU;QACxC,8BAA8B,CAAC,UAAU;QACzC,yBAAyB,CAAC,UAAU;KACrC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GACrB,UAAU,IAAI,6BAA6B;QACzC,CAAC,CAAC,6BAA6B,CAAC,QAAQ;QACxC,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,SAAS,GAAG,IAAA,yBAAc,EAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,UAAU,GACd,OAAO,IAAI,yBAAyB;QAClC,CAAC,CAAC,yBAAyB,CAAC,KAAK;QACjC,CAAC,CAAC,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,aAAa,GACjB,UAAU,IAAI,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,eAAe,GAAG,yBAAyB,CAAC,UAAU,CAAC;IAE7D,MAAM,yBAAyB,GAAG,yBAAyB,CAAC,eAAe,CAAC;IAC5E,MAAM,eAAe,GACnB,OAAO,IAAI,8BAA8B,CAAC,CAAC,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,MAAM,kBAAkB,GACtB,UAAU,IAAI,8BAA8B;QAC1C,CAAC,CAAC,8BAA8B,CAAC,QAAQ;QACzC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,oBAAoB,GAAG,8BAA8B,CAAC,UAAU,CAAC;IAEvE,MAAM,yBAAyB,GAAc,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAEnE,IAAI,yBAAyB,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QACjD,yBAAyB,CAAC,UAAU,GAAG,yBAAyB,CAAC,UAAU,CAAC;IAC9E,CAAC;IAED,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,yBAAyB,CAAC,QAAQ,GAAG,aAAa,CAAC;IACrD,CAAC;IAED,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,yBAAyB,CAAC,UAAU,GAAG,eAAe,CAAC;IACzD,CAAC;IAED,MAAM,qBAAqB,GACzB,oBAAoB,CAAC,eAAe;QACpC,CAAC,gBAAgB,IAAI,IAAI;YACzB,iBAAiB;YACjB,oFAAoF;YACpF,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,uBAAuB,CAAC;YAChD,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEnB,MAAM,SAAS,GAAG,UAAU,IAAI,IAAI,CAAC;IAErC,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAC;QACrC,SAAS;QACT,SAAS;QACT,eAAe,EAAE,qBAAqB;QACtC,KAAK,EAAE,eAAe,IAAI,UAAU,EAAE,KAAK;QAC3C,mCAAmC;QACnC,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,WAAW,EAAE,CAAC;QACvC,SAAS;QACT,SAAS;QACT,eAAe,EAAE,qBAAqB;KACvC,CAAC,CAAC;IAEH,MAAM,kBAAkB,GACtB,OAAO,WAAW,KAAK,UAAU;QAC/B,CAAC,CAAC,WAAW,CAAC;YACV,SAAS;YACT,QAAQ,EAAE,SAAS;SACpB,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,uBAAuB,GAC3B,OAAO,6DAAsC,KAAK,SAAS;QACzD,CAAC,CAAC,6DAAsC;QACxC,CAAC,CAAC,sDAAsD;YACtD,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,gCAAS,IAAI,IAAI,CAAC;IAEjD,MAAM,kBAAkB,GAAG,uBAAuB,IAAI,sBAAsB,IAAI,IAAI,CAAC;IAErF;;;;OAIG;IACH,MAAM,sBAAsB,GAC1B,iBAAiB;QACjB,CAAC,uBAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,kBAAkB,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,CAAC,CAAC;IAEzF,MAAM,WAAW,GACf,gBAAgB,IAAI,IAAI;QACxB,iBAAiB;QACjB,kGAAkG;QAClG,CAAC,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;YAC9C,uBAAQ,CAAC,EAAE,KAAK,KAAK;YACrB,iBAAiB,KAAK,KAAK,CAAC,CAAC;IAEjC,MAAM,gCAAgC;IACpC,aAAa;IACb,uBAAQ,CAAC,EAAE,KAAK,KAAK;QACrB,QAAQ,CAAC,uBAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE;QACpC,iJAAiJ;QACjJ,CAAC,mBAAmB,IAAI,IAAI,IAAI,mBAAmB,KAAK,QAAQ,CAAC;QACjE,iBAAiB,IAAI,IAAI;QACzB,mCAAmC;QACnC,2BAA2B,KAAK,KAAK,CAAC;IAExC,MAAM,2BAA2B,GAAG,gBAAgB,KAAK,QAAQ,CAAC;IAElE,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;QAClC,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,IAAI,UAAU,GAAG,gBAAgB,EAAE,CAAC;QAClC,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE,CAAC;QACf,2CAA2C;QAC3C,qDAAqD;QACrD,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,CACf,6DACG,uBAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CACvB,6DACG,SAAS,CAAC,CAAC,CAAC,CACX,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;wBAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC3B,OAAO,CACL,uBAAC,gDAAyB,IAExB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,YAChD,IAAI,CAAC,OAAO,IAFR,KAAK,CAGgB,CAC7B,CAAC;wBACJ,CAAC;wBAED,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CACH,CAAC,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC,CAAC,CAC9B,uBAAC,gDAAyB,cAAE,iBAAiB,GAA6B,CAC3E,CAAC,CAAC,CAAC,IAAI,EACP,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,CAC5B,uBAAC,kDAA2B,cAAE,kBAAkB,GAA+B,CAChF,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC,CAAC,CAAC,CACF,6DACG,iBAAiB,IAAI,IAAI,IAAI,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CAIhE,wBAAC,gDAAyB,IAAC,KAAK,EAAE,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,aAChF,iBAAiB,EACjB,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC/B,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CAClC,uBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,YAAG,kBAAkB,GAAQ,CACtD,CAAC,CAAC,CAAC,CACF,uBAAC,mBAAI,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,YACtB,uBAAC,sBAAW,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,YAChE,SAAS,GACE,GACT,CACR,CACF,CAAC,CAAC,CAAC,IAAI,IACkB,CAC7B,CAAC,CAAC,CAAC,IAAI,EACP,2BAA2B,CAAC,CAAC,CAAC,CAC7B,uBAAC,kDAA2B,cACzB,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,CACnC,kBAAkB,CACnB,CAAC,CAAC,CAAC,CACF,uBAAC,sBAAW,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,yBAAyB,YAChE,SAAS,GACE,CACf,GAC2B,CAC/B,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,EACA,cAAc,KAAK,SAAS,IAAI,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,CACrE,uBAAC,uDAAgC,IAC/B,MAAM,EAAE,cAAc,EAAE,MAAM,IAAI,qBAAqB,GACvD,CACH,CAAC,CAAC,CAAC,IAAI,EACP,uBAAQ,CAAC,EAAE,KAAK,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CACrC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,CACL,uBAAC,iDAA0B,IAEzB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,YAChD,IAAI,CAAC,OAAO,IAFR,KAAK,CAGiB,CAC9B,CAAC;gBACJ,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CACH,CAAC,CAAC,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,CAC/B,uBAAC,iDAA0B,cAAE,kBAAkB,GAA8B,CAC9E,CAAC,CAAC,CAAC,IAAI,EACP,kBAAkB,CAAC,CAAC,CAAC,CACpB,uBAAC,qDAA8B,cAC7B,uBAAC,gCAAS,OAAK,sBAAsB,GAAI,GACV,CAClC,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC;IAEF,OAAO;QACL,sBAAsB;QACtB,eAAe,EAAE,qBAAqB;QACtC,SAAS,EAAE,eAAe;QAC1B,gBAAgB,EAAE,gCAAgC;YAChD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,2BAA2B,KAAK,SAAS;QAC7C,qBAAqB,EAAE,gCAAgC;YACrD,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,SAAS;QACb,mBAAmB;QACnB,iBAAiB;QACjB,UAAU,EAAE,gBAAgB;QAC5B,KAAK,EAAE,SAAS;QAChB,SAAS;QACT,qBAAqB,EAAE,2BAA2B,KAAK,KAAK;QAC5D,MAAM,EAAE,WAAW,KAAK,KAAK;QAC7B,cAAc,EAAE,iBAAiB,KAAK,KAAK;QAC3C,UAAU,EACR,mBAAmB,KAAK,KAAK;YAC7B,gBAAgB,IAAI,IAAI;YACxB,CAAC,iBAAiB,IAAI,mBAAmB,KAAK,IAAI,CAAC;QACrD,UAAU,EAAE,uBAAuB;QACnC,yBAAyB;QACzB,eAAe;QACf,oBAAoB;QACpB,kBAAkB;QAClB,oBAAoB;QACpB,oBAAoB,EAAE,6BAA6B,KAAK,KAAK;QAC7D,KAAK,EAAE,SAAS;QAChB,UAAU;QACV,eAAe;QACf,aAAa;QACb,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC;QACxC,eAAe,EAAE,qBAAqB;QACtC,WAAW,EAAE,WAAW,KAAK,IAAI;QACjC,QAAQ;QACR,wBAAwB,EAAE,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;QACzE,yBAAyB,EAAE,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC;QAC3E,+BAA+B,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;KAChD,CAAC;AACb,CAAC","sourcesContent":["'use client';\nimport { Platform, StyleSheet, type TextStyle, View } from 'react-native';\nimport {\n type HeaderBarButtonItemMenuAction,\n type HeaderBarButtonItemSubmenu,\n type HeaderBarButtonItemWithAction,\n type HeaderBarButtonItemWithMenu,\n isSearchBarAvailableForCurrentPlatform,\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n type ScreenStackHeaderConfigProps,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\n\nimport { processFonts } from './FontProcessor';\nimport { Color } from '../../../utils/color';\nimport { getHeaderTitle, HeaderTitle } from '../../elements';\nimport { type Route, type Theme, useLocale, useTheme } from '../../native';\nimport type {\n NativeStackHeaderItem,\n NativeStackHeaderItemButton,\n NativeStackHeaderItemMenuAction,\n NativeStackHeaderItemMenuSubmenu,\n NativeStackNavigationOptions,\n} from '../types';\n\ntype Props = NativeStackNavigationOptions & {\n headerTopInsetEnabled: boolean;\n headerHeight: number;\n headerBack: { title?: string | undefined; href: undefined } | undefined;\n route: Route<string>;\n};\n\nconst processBarButtonItems = (\n items: NativeStackHeaderItem[] | undefined,\n colors: Theme['colors'],\n fonts: Theme['fonts']\n) => {\n return items\n ?.map((item, index) => {\n if (item.type === 'custom') {\n // Handled with `ScreenStackHeaderLeftView` or `ScreenStackHeaderRightView`\n return null;\n }\n\n if (item.type === 'spacing') {\n if (item.spacing == null) {\n throw new Error(\n `Spacing item must have a 'spacing' property defined: ${JSON.stringify(item)}`\n );\n }\n\n return item;\n }\n\n if (item.type === 'button' || item.type === 'menu') {\n if (item.type === 'menu' && item.menu == null) {\n throw new Error(`Menu item must have a 'menu' property defined: ${JSON.stringify(item)}`);\n }\n\n const { badge, label, labelStyle, icon, ...rest } = item;\n\n const processedItemCommon = {\n ...rest,\n index,\n title: label,\n titleStyle: {\n ...fonts.regular,\n ...labelStyle,\n },\n icon: transformIcon(icon),\n };\n\n let processedItem: HeaderBarButtonItemWithAction | HeaderBarButtonItemWithMenu;\n\n if (processedItemCommon.type === 'menu' && item.type === 'menu') {\n const { multiselectable, layout } = item.menu;\n\n processedItem = {\n ...processedItemCommon,\n menu: {\n ...processedItemCommon.menu,\n singleSelection: !multiselectable,\n displayAsPalette: layout === 'palette',\n items: item.menu.items.map(getMenuItem),\n },\n };\n } else if (processedItemCommon.type === 'button' && item.type === 'button') {\n processedItem = processedItemCommon;\n } else {\n throw new Error(\n `Invalid item type: ${JSON.stringify(item)}. Valid types are 'button' and 'menu'.`\n );\n }\n\n if (badge) {\n const badgeBackgroundColor = badge.style?.backgroundColor ?? colors.notification;\n const badgeTextColor = Color(badgeBackgroundColor)?.isLight() ? 'black' : 'white';\n\n processedItem = {\n ...processedItem,\n badge: {\n ...badge,\n value: String(badge.value),\n style: {\n backgroundColor: badgeBackgroundColor,\n color: badgeTextColor,\n ...fonts.regular,\n ...badge.style,\n },\n },\n };\n }\n\n return processedItem;\n }\n\n throw new Error(\n `Invalid item type: ${JSON.stringify(item)}. Valid types are 'button', 'menu', 'custom' and 'spacing'.`\n );\n })\n .filter((item) => item != null);\n};\n\nconst transformIcon = (\n icon: NativeStackHeaderItemButton['icon']\n): HeaderBarButtonItemWithAction['icon'] | HeaderBarButtonItemWithMenu['icon'] => {\n if (icon?.type === 'image') {\n return icon.tinted === false\n ? { type: 'imageSource', imageSource: icon.source }\n : { type: 'templateSource', templateSource: icon.source };\n }\n\n return icon;\n};\n\nconst getMenuItem = (\n item: NativeStackHeaderItemMenuAction | NativeStackHeaderItemMenuSubmenu\n): HeaderBarButtonItemMenuAction | HeaderBarButtonItemSubmenu => {\n if (item.type === 'submenu') {\n const { label, icon, inline, layout, items, multiselectable, ...rest } = item;\n\n return {\n ...rest,\n icon: transformIcon(icon),\n title: label,\n displayAsPalette: layout === 'palette',\n displayInline: inline,\n singleSelection: !multiselectable,\n items: items.map(getMenuItem),\n };\n }\n\n const { label, icon, description, ...rest } = item;\n\n return {\n ...rest,\n icon: transformIcon(icon),\n title: label,\n subtitle: description,\n };\n};\n\nexport function useHeaderConfigProps({\n headerBackIcon,\n headerBackImageSource,\n headerBackButtonDisplayMode,\n headerBackButtonMenuEnabled,\n headerBackTitle,\n headerBackTitleStyle,\n headerBackVisible,\n headerShadowVisible,\n headerLargeStyle,\n headerLargeTitle: headerLargeTitleDeprecated,\n headerLargeTitleEnabled = headerLargeTitleDeprecated,\n headerLargeTitleShadowVisible,\n headerLargeTitleStyle,\n headerBackground,\n headerLeft,\n headerRight,\n headerShown,\n headerStyle,\n headerBlurEffect,\n headerTintColor,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerTransparent,\n headerSearchBarOptions,\n headerTopInsetEnabled,\n headerBack,\n route,\n title,\n unstable_headerLeftItems: headerLeftItems,\n unstable_headerRightItems: headerRightItems,\n}: Props): ScreenStackHeaderConfigProps {\n const { direction } = useLocale();\n const { colors, fonts, dark } = useTheme();\n const tintColor = headerTintColor ?? (Platform.OS === 'ios' ? colors.primary : colors.text);\n\n const headerBackTitleStyleFlattened =\n StyleSheet.flatten([fonts.regular, headerBackTitleStyle]) || {};\n const headerLargeTitleStyleFlattened =\n StyleSheet.flatten([\n Platform.select({ ios: fonts.heavy, default: fonts.medium }),\n headerLargeTitleStyle,\n ]) || {};\n const headerTitleStyleFlattened =\n StyleSheet.flatten([\n Platform.select({ ios: fonts.bold, default: fonts.medium }),\n headerTitleStyle,\n ]) || {};\n const headerStyleFlattened = StyleSheet.flatten(headerStyle) || {};\n const headerLargeStyleFlattened = StyleSheet.flatten(headerLargeStyle) || {};\n\n const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = processFonts([\n headerBackTitleStyleFlattened.fontFamily,\n headerLargeTitleStyleFlattened.fontFamily,\n headerTitleStyleFlattened.fontFamily,\n ]);\n\n const backTitleFontSize =\n 'fontSize' in headerBackTitleStyleFlattened\n ? headerBackTitleStyleFlattened.fontSize\n : undefined;\n\n const titleText = getHeaderTitle({ title, headerTitle }, route.name);\n const titleColor =\n 'color' in headerTitleStyleFlattened\n ? headerTitleStyleFlattened.color\n : (headerTintColor ?? colors.text);\n const titleFontSize =\n 'fontSize' in headerTitleStyleFlattened ? headerTitleStyleFlattened.fontSize : undefined;\n const titleFontWeight = headerTitleStyleFlattened.fontWeight;\n\n const largeTitleBackgroundColor = headerLargeStyleFlattened.backgroundColor;\n const largeTitleColor =\n 'color' in headerLargeTitleStyleFlattened ? headerLargeTitleStyleFlattened.color : undefined;\n const largeTitleFontSize =\n 'fontSize' in headerLargeTitleStyleFlattened\n ? headerLargeTitleStyleFlattened.fontSize\n : undefined;\n const largeTitleFontWeight = headerLargeTitleStyleFlattened.fontWeight;\n\n const headerTitleStyleSupported: TextStyle = { color: titleColor };\n\n if (headerTitleStyleFlattened.fontFamily != null) {\n headerTitleStyleSupported.fontFamily = headerTitleStyleFlattened.fontFamily;\n }\n\n if (titleFontSize != null) {\n headerTitleStyleSupported.fontSize = titleFontSize;\n }\n\n if (titleFontWeight != null) {\n headerTitleStyleSupported.fontWeight = titleFontWeight;\n }\n\n const headerBackgroundColor =\n headerStyleFlattened.backgroundColor ??\n (headerBackground != null ||\n headerTransparent ||\n // The title becomes invisible if background color is set with large title on iOS 26\n (Platform.OS === 'ios' && headerLargeTitleEnabled)\n ? 'transparent'\n : colors.card);\n\n const canGoBack = headerBack != null;\n\n const headerLeftElement = headerLeft?.({\n tintColor,\n canGoBack,\n backgroundColor: headerBackgroundColor,\n label: headerBackTitle ?? headerBack?.title,\n // `href` is only applicable to web\n href: undefined,\n });\n\n const headerRightElement = headerRight?.({\n tintColor,\n canGoBack,\n backgroundColor: headerBackgroundColor,\n });\n\n const headerTitleElement =\n typeof headerTitle === 'function'\n ? headerTitle({\n tintColor,\n children: titleText,\n })\n : null;\n\n const supportsHeaderSearchBar =\n typeof isSearchBarAvailableForCurrentPlatform === 'boolean'\n ? isSearchBarAvailableForCurrentPlatform\n : // Fallback for older versions of react-native-screens\n Platform.OS === 'ios' && SearchBar != null;\n\n const hasHeaderSearchBar = supportsHeaderSearchBar && headerSearchBarOptions != null;\n\n /**\n * We need to set this in if:\n * - Back button should stay visible when `headerLeft` is specified\n * - If `headerTitle` for Android is specified, so we only need to remove the title and keep the back button\n */\n const backButtonInCustomView =\n headerBackVisible ||\n (Platform.OS === 'android' && headerTitleElement != null && headerLeftElement == null);\n\n const translucent =\n headerBackground != null ||\n headerTransparent ||\n // When using a SearchBar or large title, the header needs to be translucent for it to work on iOS\n ((hasHeaderSearchBar || headerLargeTitleEnabled) &&\n Platform.OS === 'ios' &&\n headerTransparent !== false);\n\n const isBackButtonDisplayModeAvailable =\n // On iOS 14+\n Platform.OS === 'ios' &&\n parseInt(Platform.Version, 10) >= 14 &&\n // Doesn't have custom styling, by default System, see: https://github.com/software-mansion/react-native-screens/pull/2105#discussion_r1565222738\n (backTitleFontFamily == null || backTitleFontFamily === 'System') &&\n backTitleFontSize == null &&\n // Back button menu is not disabled\n headerBackButtonMenuEnabled !== false;\n\n const isCenterViewRenderedAndroid = headerTitleAlign === 'center';\n\n const leftItems = headerLeftItems?.({\n tintColor,\n canGoBack,\n });\n\n let rightItems = headerRightItems?.({\n tintColor,\n canGoBack,\n });\n\n if (rightItems) {\n // iOS renders right items in reverse order\n // So we need to reverse them here to match the order\n rightItems = [...rightItems].reverse();\n }\n\n const children = (\n <>\n {Platform.OS === 'ios' ? (\n <>\n {leftItems ? (\n leftItems.map((item, index) => {\n if (item.type === 'custom') {\n return (\n <ScreenStackHeaderLeftView\n key={index}\n hidesSharedBackground={item.hidesSharedBackground}>\n {item.element}\n </ScreenStackHeaderLeftView>\n );\n }\n\n return null;\n })\n ) : headerLeftElement != null ? (\n <ScreenStackHeaderLeftView>{headerLeftElement}</ScreenStackHeaderLeftView>\n ) : null}\n {headerTitleElement != null ? (\n <ScreenStackHeaderCenterView>{headerTitleElement}</ScreenStackHeaderCenterView>\n ) : null}\n </>\n ) : (\n <>\n {headerLeftElement != null || typeof headerTitle === 'function' ? (\n // The style passed to header left, together with title element being wrapped\n // in flex view is reqruied for proper header layout, in particular,\n // for the text truncation to work.\n <ScreenStackHeaderLeftView style={!isCenterViewRenderedAndroid ? { flex: 1 } : null}>\n {headerLeftElement}\n {headerTitleAlign !== 'center' ? (\n typeof headerTitle === 'function' ? (\n <View style={{ flex: 1 }}>{headerTitleElement}</View>\n ) : (\n <View style={{ flex: 1 }}>\n <HeaderTitle tintColor={tintColor} style={headerTitleStyleSupported}>\n {titleText}\n </HeaderTitle>\n </View>\n )\n ) : null}\n </ScreenStackHeaderLeftView>\n ) : null}\n {isCenterViewRenderedAndroid ? (\n <ScreenStackHeaderCenterView>\n {typeof headerTitle === 'function' ? (\n headerTitleElement\n ) : (\n <HeaderTitle tintColor={tintColor} style={headerTitleStyleSupported}>\n {titleText}\n </HeaderTitle>\n )}\n </ScreenStackHeaderCenterView>\n ) : null}\n </>\n )}\n {headerBackIcon !== undefined || headerBackImageSource !== undefined ? (\n <ScreenStackHeaderBackButtonImage\n source={headerBackIcon?.source ?? headerBackImageSource}\n />\n ) : null}\n {Platform.OS === 'ios' && rightItems ? (\n rightItems.map((item, index) => {\n if (item.type === 'custom') {\n return (\n <ScreenStackHeaderRightView\n key={index}\n hidesSharedBackground={item.hidesSharedBackground}>\n {item.element}\n </ScreenStackHeaderRightView>\n );\n }\n\n return null;\n })\n ) : headerRightElement != null ? (\n <ScreenStackHeaderRightView>{headerRightElement}</ScreenStackHeaderRightView>\n ) : null}\n {hasHeaderSearchBar ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...headerSearchBarOptions} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </>\n );\n\n return {\n backButtonInCustomView,\n backgroundColor: headerBackgroundColor,\n backTitle: headerBackTitle,\n backTitleVisible: isBackButtonDisplayModeAvailable\n ? undefined\n : headerBackButtonDisplayMode !== 'minimal',\n backButtonDisplayMode: isBackButtonDisplayModeAvailable\n ? headerBackButtonDisplayMode\n : undefined,\n backTitleFontFamily,\n backTitleFontSize,\n blurEffect: headerBlurEffect,\n color: tintColor,\n direction,\n disableBackButtonMenu: headerBackButtonMenuEnabled === false,\n hidden: headerShown === false,\n hideBackButton: headerBackVisible === false,\n hideShadow:\n headerShadowVisible === false ||\n headerBackground != null ||\n (headerTransparent && headerShadowVisible !== true),\n largeTitle: headerLargeTitleEnabled,\n largeTitleBackgroundColor,\n largeTitleColor,\n largeTitleFontFamily,\n largeTitleFontSize,\n largeTitleFontWeight,\n largeTitleHideShadow: headerLargeTitleShadowVisible === false,\n title: titleText,\n titleColor,\n titleFontFamily,\n titleFontSize,\n titleFontWeight: String(titleFontWeight),\n topInsetEnabled: headerTopInsetEnabled,\n translucent: translucent === true,\n children,\n headerLeftBarButtonItems: processBarButtonItems(leftItems, colors, fonts),\n headerRightBarButtonItems: processBarButtonItems(rightItems, colors, fonts),\n experimental_userInterfaceStyle: dark ? 'dark' : 'light',\n } as const;\n}\n"]}
1
+ {"version":3,"file":"useHeaderConfigProps.js","sourceRoot":"","sources":["../../../../src/react-navigation/native-stack/views/useHeaderConfigProps.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport { Platform, StyleSheet, type TextStyle, View } from 'react-native';\nimport {\n type HeaderBarButtonItemMenuAction,\n type HeaderBarButtonItemSubmenu,\n type HeaderBarButtonItemWithAction,\n type HeaderBarButtonItemWithMenu,\n isSearchBarAvailableForCurrentPlatform,\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n type ScreenStackHeaderConfigProps,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\n\nimport { processFonts } from './FontProcessor';\nimport { Color } from '../../../utils/color';\nimport { getHeaderTitle, HeaderTitle } from '../../elements';\nimport { type Route, type Theme, useLocale, useTheme } from '../../native';\nimport type {\n NativeStackHeaderItem,\n NativeStackHeaderItemButton,\n NativeStackHeaderItemMenuAction,\n NativeStackHeaderItemMenuSubmenu,\n NativeStackNavigationOptions,\n} from '../types';\n\ntype Props = NativeStackNavigationOptions & {\n headerTopInsetEnabled: boolean;\n headerHeight: number;\n headerBack: { title?: string | undefined; href: undefined } | undefined;\n route: Route<string>;\n};\n\nconst processBarButtonItems = (\n items: NativeStackHeaderItem[] | undefined,\n colors: Theme['colors'],\n fonts: Theme['fonts']\n) => {\n return items\n ?.map((item, index) => {\n if (item.type === 'custom') {\n // Handled with `ScreenStackHeaderLeftView` or `ScreenStackHeaderRightView`\n return null;\n }\n\n if (item.type === 'spacing') {\n if (item.spacing == null) {\n throw new Error(\n `Spacing item must have a 'spacing' property defined: ${JSON.stringify(item)}`\n );\n }\n\n return item;\n }\n\n if (item.type === 'button' || item.type === 'menu') {\n if (item.type === 'menu' && item.menu == null) {\n throw new Error(`Menu item must have a 'menu' property defined: ${JSON.stringify(item)}`);\n }\n\n const { badge, label, labelStyle, icon, ...rest } = item;\n\n const processedItemCommon = {\n ...rest,\n index,\n title: label,\n titleStyle: {\n ...fonts.regular,\n ...labelStyle,\n },\n icon: transformIcon(icon),\n };\n\n let processedItem: HeaderBarButtonItemWithAction | HeaderBarButtonItemWithMenu;\n\n if (processedItemCommon.type === 'menu' && item.type === 'menu') {\n const { multiselectable, layout } = item.menu;\n\n processedItem = {\n ...processedItemCommon,\n menu: {\n ...processedItemCommon.menu,\n singleSelection: !multiselectable,\n displayAsPalette: layout === 'palette',\n items: item.menu.items.map(getMenuItem),\n },\n };\n } else if (processedItemCommon.type === 'button' && item.type === 'button') {\n processedItem = processedItemCommon;\n } else {\n throw new Error(\n `Invalid item type: ${JSON.stringify(item)}. Valid types are 'button' and 'menu'.`\n );\n }\n\n if (badge) {\n const badgeBackgroundColor = badge.style?.backgroundColor ?? colors.notification;\n const badgeTextColor = Color(badgeBackgroundColor)?.isLight() ? 'black' : 'white';\n\n processedItem = {\n ...processedItem,\n badge: {\n ...badge,\n value: String(badge.value),\n style: {\n backgroundColor: badgeBackgroundColor,\n color: badgeTextColor,\n ...fonts.regular,\n ...badge.style,\n },\n },\n };\n }\n\n return processedItem;\n }\n\n throw new Error(\n `Invalid item type: ${JSON.stringify(item)}. Valid types are 'button', 'menu', 'custom' and 'spacing'.`\n );\n })\n .filter((item) => item != null);\n};\n\nconst transformIcon = (\n icon: NativeStackHeaderItemButton['icon']\n): HeaderBarButtonItemWithAction['icon'] | HeaderBarButtonItemWithMenu['icon'] => {\n if (icon?.type === 'image') {\n return icon.tinted === false\n ? { type: 'imageSource', imageSource: icon.source }\n : { type: 'templateSource', templateSource: icon.source };\n }\n\n return icon;\n};\n\nconst getMenuItem = (\n item: NativeStackHeaderItemMenuAction | NativeStackHeaderItemMenuSubmenu\n): HeaderBarButtonItemMenuAction | HeaderBarButtonItemSubmenu => {\n if (item.type === 'submenu') {\n const { label, icon, inline, layout, items, multiselectable, ...rest } = item;\n\n return {\n ...rest,\n icon: transformIcon(icon),\n title: label,\n displayAsPalette: layout === 'palette',\n displayInline: inline,\n singleSelection: !multiselectable,\n items: items.map(getMenuItem),\n };\n }\n\n const { label, icon, description, ...rest } = item;\n\n return {\n ...rest,\n icon: transformIcon(icon),\n title: label,\n subtitle: description,\n };\n};\n\nexport function useHeaderConfigProps({\n headerBackIcon,\n headerBackImageSource,\n headerBackButtonDisplayMode,\n headerBackButtonMenuEnabled,\n headerBackTitle,\n headerBackTitleStyle,\n headerBackVisible,\n headerShadowVisible,\n headerLargeStyle,\n headerLargeTitle: headerLargeTitleDeprecated,\n headerLargeTitleEnabled = headerLargeTitleDeprecated,\n headerLargeTitleShadowVisible,\n headerLargeTitleStyle,\n headerBackground,\n headerLeft,\n headerRight,\n headerShown,\n headerStyle,\n headerBlurEffect,\n headerTintColor,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerTransparent,\n headerSearchBarOptions,\n headerTopInsetEnabled,\n headerBack,\n route,\n title,\n unstable_headerLeftItems: headerLeftItems,\n unstable_headerRightItems: headerRightItems,\n unstable_nativeProps,\n}: Props): ScreenStackHeaderConfigProps {\n const { direction } = useLocale();\n const { colors, fonts, dark } = useTheme();\n const tintColor = headerTintColor ?? (Platform.OS === 'ios' ? colors.primary : colors.text);\n const headerNativeProps = unstable_nativeProps?.headerConfig;\n\n const headerBackTitleStyleFlattened =\n StyleSheet.flatten([fonts.regular, headerBackTitleStyle]) || {};\n const headerLargeTitleStyleFlattened =\n StyleSheet.flatten([\n Platform.select({ ios: fonts.heavy, default: fonts.medium }),\n headerLargeTitleStyle,\n ]) || {};\n const headerTitleStyleFlattened =\n StyleSheet.flatten([\n Platform.select({ ios: fonts.bold, default: fonts.medium }),\n headerTitleStyle,\n ]) || {};\n const headerStyleFlattened = StyleSheet.flatten(headerStyle) || {};\n const headerLargeStyleFlattened = StyleSheet.flatten(headerLargeStyle) || {};\n\n const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = processFonts([\n headerBackTitleStyleFlattened.fontFamily,\n headerLargeTitleStyleFlattened.fontFamily,\n headerTitleStyleFlattened.fontFamily,\n ]);\n\n const backTitleFontSize =\n 'fontSize' in headerBackTitleStyleFlattened\n ? headerBackTitleStyleFlattened.fontSize\n : undefined;\n\n const titleText = getHeaderTitle({ title, headerTitle }, route.name);\n const titleColor =\n 'color' in headerTitleStyleFlattened\n ? headerTitleStyleFlattened.color\n : (headerTintColor ?? colors.text);\n const titleFontSize =\n 'fontSize' in headerTitleStyleFlattened ? headerTitleStyleFlattened.fontSize : undefined;\n const titleFontWeight = headerTitleStyleFlattened.fontWeight;\n\n const largeTitleBackgroundColor = headerLargeStyleFlattened.backgroundColor;\n const largeTitleColor =\n 'color' in headerLargeTitleStyleFlattened ? headerLargeTitleStyleFlattened.color : undefined;\n const largeTitleFontSize =\n 'fontSize' in headerLargeTitleStyleFlattened\n ? headerLargeTitleStyleFlattened.fontSize\n : undefined;\n const largeTitleFontWeight = headerLargeTitleStyleFlattened.fontWeight;\n\n const headerTitleStyleSupported: TextStyle = { color: titleColor };\n\n if (headerTitleStyleFlattened.fontFamily != null) {\n headerTitleStyleSupported.fontFamily = headerTitleStyleFlattened.fontFamily;\n }\n\n if (titleFontSize != null) {\n headerTitleStyleSupported.fontSize = titleFontSize;\n }\n\n if (titleFontWeight != null) {\n headerTitleStyleSupported.fontWeight = titleFontWeight;\n }\n\n const headerBackgroundColor =\n headerStyleFlattened.backgroundColor ??\n (headerBackground != null ||\n headerTransparent ||\n // The title becomes invisible if background color is set with large title on iOS 26\n (Platform.OS === 'ios' && headerLargeTitleEnabled)\n ? 'transparent'\n : colors.card);\n\n const canGoBack = headerBack != null;\n\n const headerLeftElement = headerLeft?.({\n tintColor,\n canGoBack,\n backgroundColor: headerBackgroundColor,\n label: headerBackTitle ?? headerBack?.title,\n // `href` is only applicable to web\n href: undefined,\n });\n\n const headerRightElement = headerRight?.({\n tintColor,\n canGoBack,\n backgroundColor: headerBackgroundColor,\n });\n\n const headerTitleElement =\n typeof headerTitle === 'function'\n ? headerTitle({\n tintColor,\n children: titleText,\n })\n : null;\n\n const supportsHeaderSearchBar =\n typeof isSearchBarAvailableForCurrentPlatform === 'boolean'\n ? isSearchBarAvailableForCurrentPlatform\n : // Fallback for older versions of react-native-screens\n Platform.OS === 'ios' && SearchBar != null;\n\n const hasHeaderSearchBar = supportsHeaderSearchBar && headerSearchBarOptions != null;\n\n /**\n * We need to set this in if:\n * - Back button should stay visible when `headerLeft` is specified\n * - If `headerTitle` for Android is specified, so we only need to remove the title and keep the back button\n */\n const backButtonInCustomView =\n headerBackVisible ||\n (Platform.OS === 'android' && headerTitleElement != null && headerLeftElement == null);\n\n const translucent =\n headerBackground != null ||\n headerTransparent ||\n // When using a SearchBar or large title, the header needs to be translucent for it to work on iOS\n ((hasHeaderSearchBar || headerLargeTitleEnabled) &&\n Platform.OS === 'ios' &&\n headerTransparent !== false);\n\n const isBackButtonDisplayModeAvailable =\n // On iOS 14+\n Platform.OS === 'ios' &&\n parseInt(Platform.Version, 10) >= 14 &&\n // Doesn't have custom styling, by default System, see: https://github.com/software-mansion/react-native-screens/pull/2105#discussion_r1565222738\n (backTitleFontFamily == null || backTitleFontFamily === 'System') &&\n backTitleFontSize == null &&\n // Back button menu is not disabled\n headerBackButtonMenuEnabled !== false;\n\n const isCenterViewRenderedAndroid = headerTitleAlign === 'center';\n\n const leftItems = headerLeftItems?.({\n tintColor,\n canGoBack,\n });\n\n let rightItems = headerRightItems?.({\n tintColor,\n canGoBack,\n });\n\n if (rightItems) {\n // iOS renders right items in reverse order\n // So we need to reverse them here to match the order\n rightItems = [...rightItems].reverse();\n }\n\n const children = (\n <>\n {Platform.OS === 'ios' ? (\n <>\n {leftItems ? (\n leftItems.map((item, index) => {\n if (item.type === 'custom') {\n return (\n <ScreenStackHeaderLeftView\n key={index}\n hidesSharedBackground={item.hidesSharedBackground}>\n {item.element}\n </ScreenStackHeaderLeftView>\n );\n }\n\n return null;\n })\n ) : headerLeftElement != null ? (\n <ScreenStackHeaderLeftView>{headerLeftElement}</ScreenStackHeaderLeftView>\n ) : null}\n {headerTitleElement != null ? (\n <ScreenStackHeaderCenterView>{headerTitleElement}</ScreenStackHeaderCenterView>\n ) : null}\n </>\n ) : (\n <>\n {headerLeftElement != null || typeof headerTitle === 'function' ? (\n // The style passed to header left, together with title element being wrapped\n // in flex view is reqruied for proper header layout, in particular,\n // for the text truncation to work.\n <ScreenStackHeaderLeftView style={!isCenterViewRenderedAndroid ? { flex: 1 } : null}>\n {headerLeftElement}\n {headerTitleAlign !== 'center' ? (\n typeof headerTitle === 'function' ? (\n <View style={{ flex: 1 }}>{headerTitleElement}</View>\n ) : (\n <View style={{ flex: 1 }}>\n <HeaderTitle tintColor={tintColor} style={headerTitleStyleSupported}>\n {titleText}\n </HeaderTitle>\n </View>\n )\n ) : null}\n </ScreenStackHeaderLeftView>\n ) : null}\n {isCenterViewRenderedAndroid ? (\n <ScreenStackHeaderCenterView>\n {typeof headerTitle === 'function' ? (\n headerTitleElement\n ) : (\n <HeaderTitle tintColor={tintColor} style={headerTitleStyleSupported}>\n {titleText}\n </HeaderTitle>\n )}\n </ScreenStackHeaderCenterView>\n ) : null}\n </>\n )}\n {headerBackIcon !== undefined || headerBackImageSource !== undefined ? (\n <ScreenStackHeaderBackButtonImage\n source={headerBackIcon?.source ?? headerBackImageSource}\n />\n ) : null}\n {Platform.OS === 'ios' && rightItems ? (\n rightItems.map((item, index) => {\n if (item.type === 'custom') {\n return (\n <ScreenStackHeaderRightView\n key={index}\n hidesSharedBackground={item.hidesSharedBackground}>\n {item.element}\n </ScreenStackHeaderRightView>\n );\n }\n\n return null;\n })\n ) : headerRightElement != null ? (\n <ScreenStackHeaderRightView>{headerRightElement}</ScreenStackHeaderRightView>\n ) : null}\n {hasHeaderSearchBar ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...headerSearchBarOptions} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </>\n );\n\n return {\n backButtonInCustomView,\n backgroundColor: headerBackgroundColor,\n backTitle: headerBackTitle,\n backTitleVisible: isBackButtonDisplayModeAvailable\n ? undefined\n : headerBackButtonDisplayMode !== 'minimal',\n backButtonDisplayMode: isBackButtonDisplayModeAvailable\n ? headerBackButtonDisplayMode\n : undefined,\n backTitleFontFamily,\n backTitleFontSize,\n blurEffect: headerBlurEffect,\n color: tintColor,\n direction,\n disableBackButtonMenu: headerBackButtonMenuEnabled === false,\n hidden: headerShown === false,\n hideBackButton: headerBackVisible === false,\n hideShadow:\n headerShadowVisible === false ||\n headerBackground != null ||\n (headerTransparent && headerShadowVisible !== true),\n largeTitle: headerLargeTitleEnabled,\n largeTitleBackgroundColor,\n largeTitleColor,\n largeTitleFontFamily,\n largeTitleFontSize,\n largeTitleFontWeight,\n largeTitleHideShadow: headerLargeTitleShadowVisible === false,\n title: titleText,\n titleColor,\n titleFontFamily,\n titleFontSize,\n titleFontWeight: String(titleFontWeight),\n topInsetEnabled: headerTopInsetEnabled,\n translucent: translucent === true,\n children,\n headerLeftBarButtonItems: processBarButtonItems(leftItems, colors, fonts),\n headerRightBarButtonItems: processBarButtonItems(rightItems, colors, fonts),\n experimental_userInterfaceStyle: dark ? 'dark' : 'light',\n ...headerNativeProps,\n } as const;\n}\n"]}
@@ -23,6 +23,19 @@ export declare function inMemoryContext(context: MemoryContext): ((id: string) =
23
23
  id: string;
24
24
  keys: () => string[];
25
25
  };
26
+ export declare function normalizeKey(key: string): string;
27
+ export declare function findDuplicateKeys(normalizedKeys: readonly string[]): string[];
28
+ /**
29
+ * Maps `requireContext` keys (`./name.ext`) to the extension-free, prefix-free
30
+ * form used by `inMemoryContext` override keys (e.g. `_layout`, `nested/route`).
31
+ *
32
+ * The returned record is keyed by the normalized key and holds the original
33
+ * require-context key, so a normalized key can be resolved back to the file it
34
+ * came from. When two files normalize to the same key (e.g. both `index.jsx`
35
+ * and `index.tsx`), it throws, matching the ambiguity `requireContext` cannot
36
+ * represent.
37
+ */
38
+ export declare function normalizeKeys(keys: string[]): Record<string, string>;
26
39
  export declare function requireContextWithOverrides(dir: string, overrides: MemoryContext): ((id: string) => any) & {
27
40
  keys: () => string[];
28
41
  resolve: (key: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"context-stubs.d.ts","sourceRoot":"","sources":["../../src/testing-library/context-stubs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC5C,MAAM,MAAM,QAAQ,GAChB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,CAAC,GACF,cAAc,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,gBAAgB,CAAC,GAAG;IACxE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,SAEpC,MAAM;aAhBT,cAAc;wBACH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;aAC9B,cAAc;;;;mBAmBR,MAAM;;;EAa1B;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,SAI/D,MAAM;;mBAUH,MAAM;;EAI1B"}
1
+ {"version":3,"file":"context-stubs.d.ts","sourceRoot":"","sources":["../../src/testing-library/context-stubs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC5C,MAAM,MAAM,QAAQ,GAChB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,CAAC,GACF,cAAc,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,gBAAgB,CAAC,GAAG;IACxE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,SAEpC,MAAM;aAhBT,cAAc;wBACH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;aAC9B,cAAc;;;;mBAmBR,MAAM;;;EAa1B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAI7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOpE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,SAa/D,MAAM;;mBAUH,MAAM;;EAI1B"}
@@ -5,6 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.requireContext = void 0;
7
7
  exports.inMemoryContext = inMemoryContext;
8
+ exports.normalizeKey = normalizeKey;
9
+ exports.findDuplicateKeys = findDuplicateKeys;
10
+ exports.normalizeKeys = normalizeKeys;
8
11
  exports.requireContextWithOverrides = requireContextWithOverrides;
9
12
  const path_1 = __importDefault(require("path"));
10
13
  const require_context_ponyfill_1 = __importDefault(require("./require-context-ponyfill"));
@@ -26,8 +29,41 @@ function inMemoryContext(context) {
26
29
  }),
27
30
  });
28
31
  }
32
+ function normalizeKey(key) {
33
+ const withoutPrefix = key.replace(/^\.\//, '');
34
+ const ext = path_1.default.extname(withoutPrefix);
35
+ return validExtensions.includes(ext) ? withoutPrefix.slice(0, -ext.length) : withoutPrefix;
36
+ }
37
+ function findDuplicateKeys(normalizedKeys) {
38
+ return normalizedKeys.filter((normalizedKey, index) => normalizedKeys.indexOf(normalizedKey) !== index);
39
+ }
40
+ /**
41
+ * Maps `requireContext` keys (`./name.ext`) to the extension-free, prefix-free
42
+ * form used by `inMemoryContext` override keys (e.g. `_layout`, `nested/route`).
43
+ *
44
+ * The returned record is keyed by the normalized key and holds the original
45
+ * require-context key, so a normalized key can be resolved back to the file it
46
+ * came from. When two files normalize to the same key (e.g. both `index.jsx`
47
+ * and `index.tsx`), it throws, matching the ambiguity `requireContext` cannot
48
+ * represent.
49
+ */
50
+ function normalizeKeys(keys) {
51
+ const normalizedKeys = keys.map(normalizeKey);
52
+ const duplicateKeys = findDuplicateKeys(normalizedKeys);
53
+ if (duplicateKeys.length > 0) {
54
+ throw new Error(`Multiple routes resolved to the same route: ${duplicateKeys.join(', ')}`);
55
+ }
56
+ return Object.fromEntries(keys.map((key) => [normalizeKey(key), key]));
57
+ }
29
58
  function requireContextWithOverrides(dir, overrides) {
30
- const existingContext = (0, require_context_ponyfill_1.default)(path_1.default.resolve(process.cwd(), dir));
59
+ const rawContext = (0, require_context_ponyfill_1.default)(path_1.default.resolve(process.cwd(), dir));
60
+ // Normalize the require-context keys (`./name.ext`) to the extension-free form
61
+ // used by override keys, so `overrides` can be matched directly.
62
+ const normalizedKeys = normalizeKeys(rawContext.keys());
63
+ const existingContext = Object.assign((id) => rawContext(normalizedKeys[id] ?? id), {
64
+ keys: () => Object.keys(normalizedKeys),
65
+ });
66
+ const uniqueKeys = Array.from(new Set([...Object.keys(overrides), ...existingContext.keys()]));
31
67
  return Object.assign(function (id) {
32
68
  if (id in overrides) {
33
69
  const route = overrides[id];
@@ -37,7 +73,7 @@ function requireContextWithOverrides(dir, overrides) {
37
73
  return existingContext(id);
38
74
  }
39
75
  }, {
40
- keys: () => [...Object.keys(overrides), ...existingContext.keys()],
76
+ keys: () => [...uniqueKeys],
41
77
  resolve: (key) => key,
42
78
  id: '0',
43
79
  });
@@ -1 +1 @@
1
- {"version":3,"file":"context-stubs.js","sourceRoot":"","sources":["../../src/testing-library/context-stubs.ts"],"names":[],"mappings":";;;;;;AAwBA,0CAoBC;AAED,kEAkBC;AA/DD,gDAAwB;AAExB,0FAAwD;AAiB/C,yBAjBF,kCAAc,CAiBE;AAEvB,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEvD,SAAgB,eAAe,CAAC,OAAsB;IACpD,OAAO,MAAM,CAAC,MAAM,CAClB,UAAU,EAAU;QAClB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,OAAO,OAAO,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC,EACD;QACE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC7B,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC7C,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;YAExD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;KACL,CACF,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CAAC,GAAW,EAAE,SAAwB;IAC/E,MAAM,eAAe,GAAG,IAAA,kCAAc,EAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzE,OAAO,MAAM,CAAC,MAAM,CAClB,UAAU,EAAU;QAClB,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,eAAe,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,EACD;QACE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC7B,EAAE,EAAE,GAAG;KACR,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type { LoaderFunction } from 'expo-server';\nimport path from 'path';\n\nimport requireContext from './require-context-ponyfill';\nimport type { NativeIntent } from '../types';\n\nexport type ReactComponent = () => React.ReactElement<any, any> | null;\nexport type NativeIntentStub = NativeIntent;\nexport type FileStub =\n | (Record<string, unknown> & {\n default: ReactComponent;\n unstable_settings?: Record<string, any>;\n loader?: LoaderFunction;\n })\n | ReactComponent;\n\nexport type MemoryContext = Record<string, FileStub | NativeIntentStub> & {\n '+native-intent'?: NativeIntentStub;\n};\n\nexport { requireContext };\n\nconst validExtensions = ['.js', '.jsx', '.ts', '.tsx'];\n\nexport function inMemoryContext(context: MemoryContext) {\n return Object.assign(\n function (id: string) {\n id = id.replace(/^\\.\\//, '').replace(/\\.\\w*$/, '');\n return typeof context[id] === 'function' ? { default: context[id] } : context[id];\n },\n {\n resolve: (key: string) => key,\n id: '0',\n keys: () =>\n Object.keys(context).map((key) => {\n const ext = path.extname(key);\n key = key.replace(/^\\.\\//, '');\n key = key.startsWith('/') ? key : `./${key}`;\n key = validExtensions.includes(ext) ? key : `${key}.js`;\n\n return key;\n }),\n }\n );\n}\n\nexport function requireContextWithOverrides(dir: string, overrides: MemoryContext) {\n const existingContext = requireContext(path.resolve(process.cwd(), dir));\n\n return Object.assign(\n function (id: string) {\n if (id in overrides) {\n const route = overrides[id];\n return typeof route === 'function' ? { default: route } : route;\n } else {\n return existingContext(id);\n }\n },\n {\n keys: () => [...Object.keys(overrides), ...existingContext.keys()],\n resolve: (key: string) => key,\n id: '0',\n }\n );\n}\n"]}
1
+ {"version":3,"file":"context-stubs.js","sourceRoot":"","sources":["../../src/testing-library/context-stubs.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LoaderFunction } from 'expo-server';\nimport path from 'path';\n\nimport requireContext from './require-context-ponyfill';\nimport type { NativeIntent } from '../types';\n\nexport type ReactComponent = () => React.ReactElement<any, any> | null;\nexport type NativeIntentStub = NativeIntent;\nexport type FileStub =\n | (Record<string, unknown> & {\n default: ReactComponent;\n unstable_settings?: Record<string, any>;\n loader?: LoaderFunction;\n })\n | ReactComponent;\n\nexport type MemoryContext = Record<string, FileStub | NativeIntentStub> & {\n '+native-intent'?: NativeIntentStub;\n};\n\nexport { requireContext };\n\nconst validExtensions = ['.js', '.jsx', '.ts', '.tsx'];\n\nexport function inMemoryContext(context: MemoryContext) {\n return Object.assign(\n function (id: string) {\n id = id.replace(/^\\.\\//, '').replace(/\\.\\w*$/, '');\n return typeof context[id] === 'function' ? { default: context[id] } : context[id];\n },\n {\n resolve: (key: string) => key,\n id: '0',\n keys: () =>\n Object.keys(context).map((key) => {\n const ext = path.extname(key);\n key = key.replace(/^\\.\\//, '');\n key = key.startsWith('/') ? key : `./${key}`;\n key = validExtensions.includes(ext) ? key : `${key}.js`;\n\n return key;\n }),\n }\n );\n}\n\nexport function normalizeKey(key: string): string {\n const withoutPrefix = key.replace(/^\\.\\//, '');\n const ext = path.extname(withoutPrefix);\n return validExtensions.includes(ext) ? withoutPrefix.slice(0, -ext.length) : withoutPrefix;\n}\n\nexport function findDuplicateKeys(normalizedKeys: readonly string[]): string[] {\n return normalizedKeys.filter(\n (normalizedKey, index) => normalizedKeys.indexOf(normalizedKey) !== index\n );\n}\n\n/**\n * Maps `requireContext` keys (`./name.ext`) to the extension-free, prefix-free\n * form used by `inMemoryContext` override keys (e.g. `_layout`, `nested/route`).\n *\n * The returned record is keyed by the normalized key and holds the original\n * require-context key, so a normalized key can be resolved back to the file it\n * came from. When two files normalize to the same key (e.g. both `index.jsx`\n * and `index.tsx`), it throws, matching the ambiguity `requireContext` cannot\n * represent.\n */\nexport function normalizeKeys(keys: string[]): Record<string, string> {\n const normalizedKeys = keys.map(normalizeKey);\n const duplicateKeys = findDuplicateKeys(normalizedKeys);\n if (duplicateKeys.length > 0) {\n throw new Error(`Multiple routes resolved to the same route: ${duplicateKeys.join(', ')}`);\n }\n return Object.fromEntries(keys.map((key) => [normalizeKey(key), key]));\n}\n\nexport function requireContextWithOverrides(dir: string, overrides: MemoryContext) {\n const rawContext = requireContext(path.resolve(process.cwd(), dir));\n\n // Normalize the require-context keys (`./name.ext`) to the extension-free form\n // used by override keys, so `overrides` can be matched directly.\n const normalizedKeys = normalizeKeys(rawContext.keys());\n const existingContext = Object.assign((id: string) => rawContext(normalizedKeys[id] ?? id), {\n keys: () => Object.keys(normalizedKeys),\n });\n\n const uniqueKeys = Array.from(new Set([...Object.keys(overrides), ...existingContext.keys()]));\n\n return Object.assign(\n function (id: string) {\n if (id in overrides) {\n const route = overrides[id];\n return typeof route === 'function' ? { default: route } : route;\n } else {\n return existingContext(id);\n }\n },\n {\n keys: () => [...uniqueKeys],\n resolve: (key: string) => key,\n id: '0',\n }\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"native.android.d.ts","sourceRoot":"","sources":["../../src/toolbar/native.android.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CA0B9D"}
1
+ {"version":3,"file":"native.android.d.ts","sourceRoot":"","sources":["../../src/toolbar/native.android.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CA6B9D"}
@@ -16,11 +16,15 @@ function RouterToolbarHost(props) {
16
16
  }
17
17
  return baseModifiers;
18
18
  }, [insets.bottom, props.withImePadding]);
19
- return ((0, jsx_runtime_1.jsx)(react_native_1.View, { style: [react_native_1.StyleSheet.absoluteFill], pointerEvents: "box-none", children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.Host, { style: styles.host, children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.Box, { modifiers: modifiers, contentAlignment: "bottomCenter", children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.HorizontalFloatingToolbar, { colors: {
19
+ // The wrapper fills the screen so it can pin the toolbar to the bottom, but `box-none` keeps it
20
+ // from being a touch target. The Compose `Host` then wraps just the toolbar (matchContents), so
21
+ // only that area swallows touches — taps elsewhere reach the screen content below (ENG-22124).
22
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { testID: "RouterToolbarWrapper", style: styles.container, pointerEvents: "box-none", children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.Host, { matchContents: { vertical: true }, style: styles.host, children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.Box, { modifiers: modifiers, contentAlignment: "center", children: (0, jsx_runtime_1.jsx)(jetpack_compose_1.HorizontalFloatingToolbar, { colors: {
20
23
  ...(props.backgroundColor ? { toolbarContainerColor: props.backgroundColor } : {}),
21
24
  }, modifiers: [(0, modifiers_1.height)(64)], children: props.children }) }) }) }));
22
25
  }
23
26
  const styles = react_native_1.StyleSheet.create({
24
- host: { width: '100%', height: '100%', paddingHorizontal: 24 },
27
+ container: { ...react_native_1.StyleSheet.absoluteFill, justifyContent: 'flex-end' },
28
+ host: { width: '100%', paddingHorizontal: 24 },
25
29
  });
26
30
  //# sourceMappingURL=native.android.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"native.android.js","sourceRoot":"","sources":["../../src/toolbar/native.android.tsx"],"names":[],"mappings":";;AAQA,8CA0BC;;AAlCD,8DAAgF;AAChF,kEAA+F;AAC/F,iCAAgC;AAChC,+CAAgD;AAChD,mFAAmE;AAInE,SAAgB,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,MAAM,GAAG,IAAA,kDAAiB,GAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC7B,MAAM,aAAa,GAAG,CAAC,IAAA,wBAAY,GAAE,EAAE,IAAA,mBAAO,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,IAAA,sBAAU,GAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAE1C,OAAO,CACL,uBAAC,mBAAI,IAAC,KAAK,EAAE,CAAC,yBAAU,CAAC,YAAY,CAAC,EAAE,aAAa,EAAC,UAAU,YAC9D,uBAAC,sBAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,YACtB,uBAAC,qBAAG,IAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAC,cAAc,YACxD,uBAAC,2CAAyB,IACxB,MAAM,EAAE;wBACN,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACnF,EACD,SAAS,EAAE,CAAC,IAAA,kBAAM,EAAC,EAAE,CAAC,CAAC,YACtB,KAAK,CAAC,QAAQ,GACW,GACxB,GACD,GACF,CACR,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE;CAC/D,CAAC,CAAC","sourcesContent":["import { Host, HorizontalFloatingToolbar, Box } from '@expo/ui/jetpack-compose';\nimport { fillMaxWidth, height, padding, imePadding } from '@expo/ui/jetpack-compose/modifiers';\nimport { useMemo } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport type { RouterToolbarHostProps } from './native.types';\n\nexport function RouterToolbarHost(props: RouterToolbarHostProps) {\n const insets = useSafeAreaInsets();\n\n const modifiers = useMemo(() => {\n const baseModifiers = [fillMaxWidth(), padding(0, 0, 0, insets.bottom)];\n if (props.withImePadding) {\n baseModifiers.push(imePadding());\n }\n return baseModifiers;\n }, [insets.bottom, props.withImePadding]);\n\n return (\n <View style={[StyleSheet.absoluteFill]} pointerEvents=\"box-none\">\n <Host style={styles.host}>\n <Box modifiers={modifiers} contentAlignment=\"bottomCenter\">\n <HorizontalFloatingToolbar\n colors={{\n ...(props.backgroundColor ? { toolbarContainerColor: props.backgroundColor } : {}),\n }}\n modifiers={[height(64)]}>\n {props.children}\n </HorizontalFloatingToolbar>\n </Box>\n </Host>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n host: { width: '100%', height: '100%', paddingHorizontal: 24 },\n});\n"]}
1
+ {"version":3,"file":"native.android.js","sourceRoot":"","sources":["../../src/toolbar/native.android.tsx"],"names":[],"mappings":";;AAQA,8CA6BC;;AArCD,8DAAgF;AAChF,kEAA+F;AAC/F,iCAAgC;AAChC,+CAAgD;AAChD,mFAAmE;AAInE,SAAgB,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,MAAM,GAAG,IAAA,kDAAiB,GAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC7B,MAAM,aAAa,GAAG,CAAC,IAAA,wBAAY,GAAE,EAAE,IAAA,mBAAO,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,IAAA,sBAAU,GAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAE1C,gGAAgG;IAChG,gGAAgG;IAChG,+FAA+F;IAC/F,OAAO,CACL,uBAAC,mBAAI,IAAC,MAAM,EAAC,sBAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,EAAC,UAAU,YACnF,uBAAC,sBAAI,IAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,YACzD,uBAAC,qBAAG,IAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAC,QAAQ,YAClD,uBAAC,2CAAyB,IACxB,MAAM,EAAE;wBACN,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACnF,EACD,SAAS,EAAE,CAAC,IAAA,kBAAM,EAAC,EAAE,CAAC,CAAC,YACtB,KAAK,CAAC,QAAQ,GACW,GACxB,GACD,GACF,CACR,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,EAAE,GAAG,yBAAU,CAAC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE;IACrE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE;CAC/C,CAAC,CAAC","sourcesContent":["import { Host, HorizontalFloatingToolbar, Box } from '@expo/ui/jetpack-compose';\nimport { fillMaxWidth, height, padding, imePadding } from '@expo/ui/jetpack-compose/modifiers';\nimport { useMemo } from 'react';\nimport { StyleSheet, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport type { RouterToolbarHostProps } from './native.types';\n\nexport function RouterToolbarHost(props: RouterToolbarHostProps) {\n const insets = useSafeAreaInsets();\n\n const modifiers = useMemo(() => {\n const baseModifiers = [fillMaxWidth(), padding(0, 0, 0, insets.bottom)];\n if (props.withImePadding) {\n baseModifiers.push(imePadding());\n }\n return baseModifiers;\n }, [insets.bottom, props.withImePadding]);\n\n // The wrapper fills the screen so it can pin the toolbar to the bottom, but `box-none` keeps it\n // from being a touch target. The Compose `Host` then wraps just the toolbar (matchContents), so\n // only that area swallows touches — taps elsewhere reach the screen content below (ENG-22124).\n return (\n <View testID=\"RouterToolbarWrapper\" style={styles.container} pointerEvents=\"box-none\">\n <Host matchContents={{ vertical: true }} style={styles.host}>\n <Box modifiers={modifiers} contentAlignment=\"center\">\n <HorizontalFloatingToolbar\n colors={{\n ...(props.backgroundColor ? { toolbarContainerColor: props.backgroundColor } : {}),\n }}\n modifiers={[height(64)]}>\n {props.children}\n </HorizontalFloatingToolbar>\n </Box>\n </Host>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: { ...StyleSheet.absoluteFill, justifyContent: 'flex-end' },\n host: { width: '100%', paddingHorizontal: 24 },\n});\n"]}
@@ -6,4 +6,6 @@ export declare function hasUrlProtocolPrefix(href: string): boolean;
6
6
  export declare function isWellKnownUri(href: string): boolean;
7
7
  export declare function shouldLinkExternally(href: string): boolean;
8
8
  export declare function parseUrlUsingCustomBase(href: string): URL;
9
+ export declare function safeDecodeURI(value: any): any;
10
+ export declare function safeDecodeURIComponent(value: any): any;
9
11
  //# sourceMappingURL=url.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKpD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAOzD"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKpD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAOzD;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,OAOvC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,GAAG,OAOhD"}
@@ -4,6 +4,8 @@ exports.hasUrlProtocolPrefix = hasUrlProtocolPrefix;
4
4
  exports.isWellKnownUri = isWellKnownUri;
5
5
  exports.shouldLinkExternally = shouldLinkExternally;
6
6
  exports.parseUrlUsingCustomBase = parseUrlUsingCustomBase;
7
+ exports.safeDecodeURI = safeDecodeURI;
8
+ exports.safeDecodeURIComponent = safeDecodeURIComponent;
7
9
  /**
8
10
  * Does the input string start with a valid URL scheme.
9
11
  * NOTE: Additional strictness added to ensure URLs sent in query parameters for in-app navigation are not matched.
@@ -29,4 +31,23 @@ function parseUrlUsingCustomBase(href) {
29
31
  // dummy URL in the output bytecode
30
32
  return new URL(href, 'file:');
31
33
  }
34
+ // Malformed percent-encoding (e.g. `%GG`) would otherwise throw and drop the value.
35
+ function safeDecodeURI(value) {
36
+ try {
37
+ return typeof value === 'string' ? decodeURI(value) : value;
38
+ }
39
+ catch {
40
+ // If the value is not a valid URI, return it as is
41
+ return value;
42
+ }
43
+ }
44
+ function safeDecodeURIComponent(value) {
45
+ try {
46
+ return typeof value === 'string' ? decodeURIComponent(value) : value;
47
+ }
48
+ catch {
49
+ // If the value is not a valid URI component, return it as is
50
+ return value;
51
+ }
52
+ }
32
53
  //# sourceMappingURL=url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":";;AAIA,oDAEC;AAED,wCAKC;AAED,oDAGC;AAED,0DAOC;AA3BD;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,mHAAmH;IACnH,8HAA8H;IAC9H,mGAAmG;IACnG,OAAO,yEAAyE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,uEAAuE;IACvE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAY;IAClD,mFAAmF;IACnF,yGAAyG;IACzG,mHAAmH;IACnH,gHAAgH;IAChH,mCAAmC;IACnC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC","sourcesContent":["/**\n * Does the input string start with a valid URL scheme.\n * NOTE: Additional strictness added to ensure URLs sent in query parameters for in-app navigation are not matched.\n */\nexport function hasUrlProtocolPrefix(href: string): boolean {\n return /^([\\w\\d_+.-]+:)?\\/\\//.test(href);\n}\n\nexport function isWellKnownUri(href: string): boolean {\n // This is a hack and we should change this to work like the web in the future where we have full confidence in the\n // ability to match URLs and send anything unmatched to the OS. The main difference between this and `hasUrlProtocolPrefix` is\n // that we don't require `//`, e.g. `mailto:` is valid and common, and `mailto://bacon` is invalid.\n return /^(https?|mailto|tel|sms|geo|maps|market|itmss?|itms-apps|content|file):/.test(href);\n}\n\nexport function shouldLinkExternally(href: string): boolean {\n // Cheap check first to avoid regex if the href is not a path fragment.\n return !href.startsWith('.') && (hasUrlProtocolPrefix(href) || isWellKnownUri(href));\n}\n\nexport function parseUrlUsingCustomBase(href: string): URL {\n // NOTE(@kitten): This used to use a dummy base URL for parsing (phony [.] example)\n // However, this seems to get flagged since it's preserved 1:1 in the output bytecode by certain scanners\n // Instead, we use an empty `file:` URL. This will still perform `pathname` normalization, search parameter parsing\n // encoding, and all other logic, except the logic that applies to hostnames and protocols, and also not leave a\n // dummy URL in the output bytecode\n return new URL(href, 'file:');\n}\n"]}
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":";;AAIA,oDAEC;AAED,wCAKC;AAED,oDAGC;AAED,0DAOC;AAGD,sCAOC;AAED,wDAOC;AA9CD;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,mHAAmH;IACnH,8HAA8H;IAC9H,mGAAmG;IACnG,OAAO,yEAAyE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,uEAAuE;IACvE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAY;IAClD,mFAAmF;IACnF,yGAAyG;IACzG,mHAAmH;IACnH,gHAAgH;IAChH,mCAAmC;IACnC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,oFAAoF;AACpF,SAAgB,aAAa,CAAC,KAAU;IACtC,IAAI,CAAC;QACH,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAU;IAC/C,IAAI,CAAC;QACH,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["/**\n * Does the input string start with a valid URL scheme.\n * NOTE: Additional strictness added to ensure URLs sent in query parameters for in-app navigation are not matched.\n */\nexport function hasUrlProtocolPrefix(href: string): boolean {\n return /^([\\w\\d_+.-]+:)?\\/\\//.test(href);\n}\n\nexport function isWellKnownUri(href: string): boolean {\n // This is a hack and we should change this to work like the web in the future where we have full confidence in the\n // ability to match URLs and send anything unmatched to the OS. The main difference between this and `hasUrlProtocolPrefix` is\n // that we don't require `//`, e.g. `mailto:` is valid and common, and `mailto://bacon` is invalid.\n return /^(https?|mailto|tel|sms|geo|maps|market|itmss?|itms-apps|content|file):/.test(href);\n}\n\nexport function shouldLinkExternally(href: string): boolean {\n // Cheap check first to avoid regex if the href is not a path fragment.\n return !href.startsWith('.') && (hasUrlProtocolPrefix(href) || isWellKnownUri(href));\n}\n\nexport function parseUrlUsingCustomBase(href: string): URL {\n // NOTE(@kitten): This used to use a dummy base URL for parsing (phony [.] example)\n // However, this seems to get flagged since it's preserved 1:1 in the output bytecode by certain scanners\n // Instead, we use an empty `file:` URL. This will still perform `pathname` normalization, search parameter parsing\n // encoding, and all other logic, except the logic that applies to hostnames and protocols, and also not leave a\n // dummy URL in the output bytecode\n return new URL(href, 'file:');\n}\n\n// Malformed percent-encoding (e.g. `%GG`) would otherwise throw and drop the value.\nexport function safeDecodeURI(value: any) {\n try {\n return typeof value === 'string' ? decodeURI(value) : value;\n } catch {\n // If the value is not a valid URI, return it as is\n return value;\n }\n}\n\nexport function safeDecodeURIComponent(value: any) {\n try {\n return typeof value === 'string' ? decodeURIComponent(value) : value;\n } catch {\n // If the value is not a valid URI component, return it as is\n return value;\n }\n}\n"]}
@@ -9,7 +9,7 @@
9
9
  "publication": {
10
10
  "groupId": "expo.modules.router",
11
11
  "artifactId": "expo.modules.router",
12
- "version": "56.2.13",
12
+ "version": "56.2.15",
13
13
  "repository": "local-maven-repo"
14
14
  }
15
15
  }