import type { AnimatedScrollViewComponent } from "../ScrollViewWithBottomPadding"; import type { ScrollView, ScrollViewProps } from "react-native"; export type KeyboardAwareScrollViewMode = "insets" | "layout"; export type KeyboardAwareScrollViewProps = { /** The distance between the keyboard and the caret inside a focused `TextInput` when the keyboard is shown. Default is `0`. */ bottomOffset?: number; /** Prevents automatic scrolling of the `ScrollView` when the keyboard gets hidden, maintaining the current screen position. Default is `false`. */ disableScrollOnKeyboardHide?: boolean; /** Controls whether this `KeyboardAwareScrollView` instance should take effect. Default is `true`. */ enabled?: boolean; /** Adjusting the bottom spacing of KeyboardAwareScrollView. Default is `0`. */ extraKeyboardSpace?: number; /** * Controls how keyboard space is created at the bottom of the `ScrollView`. * * - `"insets"` *(default)*: Extends the scrollable area via `contentInset` (iOS) and `ClippingScrollView` (Android). No layout reflow occurs — content positions remain stable during keyboard animation. Recommended for most use cases. * - `"layout"`: Appends a spacer `View` as the last child of the `ScrollView`. The spacer participates in layout, so flex-based arrangements (e.g. `justifyContent: "space-between"`, `gap`) reflow naturally when the keyboard appears. Use this when you need content to physically rearrange around the keyboard space. * * Default is `"insets"`. */ mode?: KeyboardAwareScrollViewMode; /** Custom component for `ScrollView`. Default is `ScrollView`. */ ScrollViewComponent?: AnimatedScrollViewComponent; } & ScrollViewProps; export type KeyboardAwareScrollViewRef = { assureFocusedInputVisible: () => void; } & ScrollView;