import type { StyleProp, TextStyle, TouchableOpacityProps, ViewStyle } from "react-native"; import type { ButtonVariant, TypographyScale } from "./common.type"; import type { JSX } from "react"; /** * @see https://rn-nativeflow-docs.onrender.com/docs/components/button */ export type ButtonProps = TouchableOpacityProps & { /** Specifies the button style variant (e.g., 'contained', 'outlined') */ variant?: ButtonVariant; /** Determines button shape - 'round' or 'flat' */ type?: 'round' | 'flat'; /** Expands the button to occupy the full available width */ fullWidth?: boolean; /** Horizontal padding inside the button */ paddingH?: number; /** Vertical padding inside the button */ paddingV?: number; /** Custom background color (applies to contained buttons) */ bg?: string; /** Border radius of the button */ br?: number; /** Border width (used in outlined variant) */ stroke?: number; /** Border color (used in outlined variant) */ strokeColor?: string; /** Text (label) color */ titleColor?: string; /** Text (label) displayed on the button */ title?: string; /** Font size of the button text */ fs?: number; /** Typography scale (h1, h2, body, caption, etc.) */ fScale?: TypographyScale; /** Font family for the button text */ ff?: string; /** Size of the button (applies when `type="round"`) */ size?: number; /** Ripple effect color for button press feedback */ rippleColor?: string; /** Single icon element placed at the center (used mostly in round buttons) */ renderIcon?: JSX.Element; /** Icon displayed before the button text */ renderLeftIcon?: JSX.Element; /** Icon displayed after the button text */ renderRightIcon?: JSX.Element; /** Disables the button when true */ disabled?: boolean; /** Shows loading state when true */ loading?: boolean; /** Custom styles for the button container */ containerStyle?: StyleProp; /** Custom styles for the title text */ titleStyle?: StyleProp; /** Function to execute when button is pressed */ onPress?: () => void; };