import * as React from 'react' import { TouchableWithoutFeedbackProps, View, ViewStyle } from 'react-native' import PlatformTouchable from 'react-native-platform-touchable' type BorderRadiusStyle = Pick< ViewStyle, | 'borderTopLeftRadius' | 'borderTopRightRadius' | 'borderBottomLeftRadius' | 'borderBottomRightRadius' > export interface Props extends TouchableWithoutFeedbackProps { borderless?: boolean children: React.ReactNode // must only have one direct child. see https://github.com/react-native-community/react-native-platform-touchable#touchable borderRadius?: number | BorderRadiusStyle shouldRenderRippleAbove?: boolean } /** * @param borderless - If true, the touchable has a borderless ripple effect. * @param borderRadius - should be added if the touchable component has rounded corners, to prevent the ripple effect from going outside the component on tap (Android). Can either be a number * representing a single border radius, or an object individually specifying each corner's radius. * @param shouldRenderRippleAbove - If present, ensures that the ripple effect will render above the touchable component. See https://github.com/facebook/react-native/issues/17200 * @returns A touchable component */ export default function Touchable({ shouldRenderRippleAbove, borderless, borderRadius = 0, ...passThroughProps }: Props) { const background = borderless ? PlatformTouchable.SelectableBackgroundBorderless() : PlatformTouchable.SelectableBackground() const borderStyle = typeof borderRadius === 'number' ? { borderRadius } : borderRadius return borderRadius === 0 ? ( ) : ( ) }