"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StackHeaderComponent = StackHeaderComponent; exports.appendStackHeaderPropsToOptions = appendStackHeaderPropsToOptions; const react_1 = require("react"); const react_native_1 = require("react-native"); const composition_options_1 = require("../../fork/native-stack/composition-options"); /** * The component used to configure header styling for a stack screen. * * Use this component to set header appearance properties like blur effect, background color, * and shadow visibility. * * @example * ```tsx * import { Stack } from 'expo-router'; * * export default function Page() { * return ( * <> * * * * ); * } * ``` * * @example * When used inside a layout with Stack.Screen: * ```tsx * import { Stack } from 'expo-router'; * * export default function Layout() { * return ( * * * * * * ); * } * ``` * * > **Note:** If multiple instances of this component are rendered for the same screen, * the last one rendered in the component tree takes precedence. */ function StackHeaderComponent({ children, hidden, asChild, transparent, blurEffect, style, largeStyle, }) { const options = (0, react_1.useMemo)(() => appendStackHeaderPropsToOptions({}, // satisfies ensures every prop is listed here { children, hidden, asChild, transparent, blurEffect, style, largeStyle }), [children, hidden, asChild, transparent, blurEffect, style, largeStyle]); (0, composition_options_1.useCompositionOption)(options); return null; } function appendStackHeaderPropsToOptions(options, props) { const flattenedStyle = react_native_1.StyleSheet.flatten(props.style); const flattenedLargeStyle = react_native_1.StyleSheet.flatten(props.largeStyle); if (props.hidden) { return { ...options, headerShown: false }; } if (props.asChild) { return { ...options, header: () => props.children }; } if (props.children && !props.asChild) { console.warn(`To render a custom header, set the 'asChild' prop to true on Stack.Header.`); } // Determine if header should be transparent: // 1. Explicitly set via `transparent` prop // 2. Implicitly via backgroundColor === 'transparent' // 3. Implicitly when blurEffect is set (required for blurEffect to work) const isBackgroundTransparent = flattenedStyle?.backgroundColor === 'transparent'; const hasBlurEffect = props.blurEffect !== undefined; const shouldBeTransparent = props.transparent === true || (props.transparent !== false && (isBackgroundTransparent || hasBlurEffect)); // Warn if blurEffect is set but transparent is explicitly false if (props.blurEffect && props.transparent === false) { console.warn(`Stack.Header: 'blurEffect' requires 'transparent' to be enabled.`); } return { ...options, headerShown: !props.hidden, headerBlurEffect: props.blurEffect, ...(shouldBeTransparent && { headerTransparent: true }), ...(props.transparent === false && { headerTransparent: false }), ...(flattenedStyle?.color && { headerTintColor: flattenedStyle.color }), headerStyle: { backgroundColor: flattenedStyle?.backgroundColor, }, headerLargeStyle: { backgroundColor: flattenedLargeStyle?.backgroundColor, }, ...(flattenedStyle?.shadowColor === 'transparent' && { headerShadowVisible: false }), ...(flattenedLargeStyle?.shadowColor === 'transparent' && { headerLargeTitleShadowVisible: false, }), }; } //# sourceMappingURL=StackHeaderComponent.js.map