'use client'; import type { ColorValue, CodegenTypes as CT, HostComponent, ImageSource, ProcessedColorValue, ViewProps, } from 'react-native'; import { codegenNativeCommands, codegenNativeComponent } from 'react-native'; import type { UnsafeMixed } from '../../codegenUtils'; type StackHeaderTypeAndroid = 'small' | 'medium' | 'large'; export type StackHeaderToolbarMenuItemPressEventAndroid = Readonly<{ id: string; }>; export type StackHeaderToolbarMenuGroupSelectionChangeEventAndroid = Readonly<{ groupId: string; selectedIds: string[]; }>; type StackHeaderToolbarMenuItemShowAsActionAndroid = | 'always' | 'alwaysWithText' | 'ifRoom' | 'ifRoomWithText' | 'never'; type StackHeaderToolbarMenuItemTypeAndroid = 'action' | 'toggle' | 'automatic'; export interface StackHeaderToolbarMenuItemBaseAndroid { id: string; title?: string | undefined; titleCondensed?: string | undefined; tooltipText?: string | undefined; accessibilityLabel?: string | undefined; hidden?: CT.WithDefault; disabled?: CT.WithDefault; showAsAction?: CT.WithDefault< StackHeaderToolbarMenuItemShowAsActionAndroid, 'never' >; drawableIconResourceName?: string | null | undefined; imageIconResource?: ImageSource | null | undefined; iconTintColorNormal?: ProcessedColorValue | null | undefined; iconTintColorPressed?: ProcessedColorValue | null | undefined; iconTintColorFocused?: ProcessedColorValue | null | undefined; iconTintColorDisabled?: ProcessedColorValue | null | undefined; } type StackHeaderToolbarMenuItemAndroid = StackHeaderToolbarMenuItemBaseAndroid & { type: 'menuItem'; groupId?: string | undefined; itemType?: CT.WithDefault< StackHeaderToolbarMenuItemTypeAndroid, 'automatic' >; initialToggleState?: CT.WithDefault; }; type StackHeaderToolbarMenuGroupAndroid = { groupId: string; singleSelection?: CT.WithDefault; }; export type StackHeaderToolbarMenuBaseAndroid = { groups?: StackHeaderToolbarMenuGroupAndroid[] | undefined; children?: StackHeaderToolbarMenuElementAndroid[] | undefined; }; type StackHeaderToolbarMenuAndroid = StackHeaderToolbarMenuItemBaseAndroid & StackHeaderToolbarMenuBaseAndroid & { type: 'menu'; menuTitle?: string | undefined; }; export type StackHeaderToolbarMenuElementAndroid = | StackHeaderToolbarMenuItemAndroid | StackHeaderToolbarMenuAndroid; export interface NativeProps extends ViewProps { title?: string | undefined; hidden?: CT.WithDefault; transparent?: CT.WithDefault; backButtonHidden?: CT.WithDefault; // Android-specific props type?: CT.WithDefault; backButtonTintColorNormal?: ColorValue | undefined; backButtonTintColorPressed?: ColorValue | undefined; backButtonTintColorFocused?: ColorValue | undefined; backButtonDrawableIconResourceName?: string | undefined; backButtonImageIconResource?: ImageSource | undefined; scrollFlagScroll?: CT.WithDefault; scrollFlagEnterAlways?: CT.WithDefault; scrollFlagEnterAlwaysCollapsed?: CT.WithDefault; scrollFlagExitUntilCollapsed?: CT.WithDefault; scrollFlagSnap?: CT.WithDefault; toolbarMenu?: UnsafeMixed | undefined; toolbarMenuGroupDividerEnabled?: CT.WithDefault; onToolbarMenuItemPress?: | CT.DirectEventHandler | undefined; onToolbarMenuGroupSelectionChange?: | CT.DirectEventHandler | undefined; } type ComponentType = HostComponent; export type StackHeaderToolbarMenuElementOptionsAndroid = Partial< Omit > & { checked?: boolean | undefined; menuTitle?: string | undefined; }; type StackHeaderToolbarMenuElementUpdateNativeAndroid = StackHeaderToolbarMenuElementOptionsAndroid & { id: string }; export interface NativeCommands { updateToolbarMenuElements: ( viewRef: React.ComponentRef, updates: StackHeaderToolbarMenuElementUpdateNativeAndroid[], ) => void; } export const Commands: NativeCommands = codegenNativeCommands({ supportedCommands: ['updateToolbarMenuElements'], }); export default codegenNativeComponent( 'RNSStackHeaderConfigAndroid', { interfaceOnly: true, excludedPlatforms: ['iOS'], }, ) as HostComponent;