import * as React from 'react'; import { Image, StyleProp, StyleSheet, View, ViewStyle } from 'react-native'; import { getCardCoverStyle } from './utils'; import { useInternalTheme } from '../../core/theming'; import { grey200 } from '../../styles/themes/v2/colors'; import type { ThemeProp } from '../../types'; import { splitStyles } from '../../utils/splitStyles'; export type Props = React.ComponentPropsWithRef & { /** * @internal */ index?: number; /** * @internal */ total?: number; style?: StyleProp; /** * @optional */ theme?: ThemeProp; }; /** * A component to show a cover image inside a Card. * * ## Usage * ```js * import * as React from 'react'; * import { Card } from 'react-native-paper'; * * const MyComponent = () => ( * * * * ); * * export default MyComponent; * ``` * * @extends Image props https://reactnative.dev/docs/image#props */ const CardCover = ({ index, total, style, theme: themeOverrides, ...rest }: Props) => { const theme = useInternalTheme(themeOverrides); const flattenedStyles = (StyleSheet.flatten(style) || {}) as ViewStyle; const [, borderRadiusStyles] = splitStyles( flattenedStyles, (style) => style.startsWith('border') && style.endsWith('Radius') ); const coverStyle = getCardCoverStyle({ theme, index, total, borderRadiusStyles, }); return ( ); }; CardCover.displayName = 'Card.Cover'; const styles = StyleSheet.create({ container: { height: 195, backgroundColor: grey200, overflow: 'hidden', }, image: { flex: 1, height: undefined, width: undefined, justifyContent: 'flex-end', }, }); export default CardCover; // @component-docs ignore-next-line export { CardCover };